diff piecrust/importing/piecrust.py @ 62:52e4d9a1f917

Simple importer for PieCrust 1 websites.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 27 Aug 2014 17:14:44 -0700
parents
children 28958565a17b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/piecrust/importing/piecrust.py	Wed Aug 27 17:14:44 2014 -0700
@@ -0,0 +1,66 @@
+import os
+import os.path
+import re
+import shutil
+import logging
+from piecrust.importing.base import FileWalkingImporter
+
+
+logger = logging.getLogger(__name__)
+
+
+class PieCrust1Importer(FileWalkingImporter):
+    def __init__(self):
+        super(PieCrust1Importer, self).__init__()
+        self.name = 'piecrust1'
+        self.description = "Imports content from a PieCrust 1 website."
+
+    def setupParser(self, parser, app):
+        super(PieCrust1Importer, self).setupParser(parser, app)
+        parser.add_argument('root_dir',
+                help="The root directory of the PieCrust 1 website.")
+
+    def importWebsite(self, app, args):
+        logger.debug("Importing PieCrust 1 site from: %s" % args.root_dir)
+        exclude = args.exclude or []
+        exclude += ['_cache', '_counter']
+        self._startWalk(args.root_dir, exclude, app)
+        logger.info("The PieCrust website was successfully imported.")
+
+    def _importFile(self, full_fn, rel_fn, app):
+        logger.debug("- %s" % rel_fn)
+        dest_path = rel_fn
+        convert_func = None
+        if rel_fn.replace('\\', '/') == '_content/config.yml':
+            dest_path = 'config.yml'
+            convert_func = self.convertConfig
+        elif rel_fn.startswith('_content'):
+            dest_path = rel_fn[len('_content/'):]
+            fn_dirname = os.path.dirname(rel_fn)
+            if not fn_dirname.endswith('-assets'):
+                convert_func = self.convertPage
+        else:
+            dest_path = 'assets/' + rel_fn
+
+        logger.debug("  %s -> %s" % (rel_fn, dest_path))
+        full_dest_path = os.path.join(app.root_dir, dest_path)
+        os.makedirs(os.path.dirname(full_dest_path), 0o755, True)
+        if convert_func is None:
+            shutil.copy2(full_fn, full_dest_path)
+        else:
+            with open(full_fn, 'r', encoding='utf8') as fp:
+                content = fp.read()
+            converted_content = convert_func(content)
+            with open(full_dest_path, 'w', encoding='utf8') as fp:
+                fp.write(converted_content)
+            if converted_content != content:
+                logger.warning("'%s' has been modified. The original version "
+                               "has been kept for reference." % rel_fn)
+                shutil.copy2(full_fn, full_dest_path + '.orig')
+
+    def convertConfig(self, content):
+        return content
+
+    def convertPage(self, content):
+        return content
+