comparison piecrust/importing/base.py @ 300:2daa05a21026

import: Add an XML-based Wordpress importer.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 11 Mar 2015 23:48:35 -0700
parents 2823ea40cfac
children 9093618aea08
comparison
equal deleted inserted replaced
299:88bffd469b04 300:2daa05a21026
1 import os.path 1 import os.path
2 import shutil
2 import codecs 3 import codecs
3 import logging 4 import logging
4 import yaml 5 import yaml
6 from urllib.parse import urlparse
7 from urllib.request import urlopen
5 from piecrust.pathutil import SiteNotFoundError, multi_fnmatch_filter 8 from piecrust.pathutil import SiteNotFoundError, multi_fnmatch_filter
6 9
7 10
8 logger = logging.getLogger(__name__) 11 logger = logging.getLogger(__name__)
9 12
55 full_fn = os.path.join(dirpath, fn) 58 full_fn = os.path.join(dirpath, fn)
56 rel_fn = os.path.join(rel_dirpath, fn) 59 rel_fn = os.path.join(rel_dirpath, fn)
57 self._importFile(full_fn, rel_fn, *args, **kwargs) 60 self._importFile(full_fn, rel_fn, *args, **kwargs)
58 61
59 62
60 def create_page(app, endpoint_dir, slug, metadata, content): 63 def create_page(app, rel_path, metadata, content):
61 path = os.path.join(app.root_dir, endpoint_dir, slug) 64 path = os.path.join(app.root_dir, rel_path)
62 logging.debug("Creating page: %s" % os.path.relpath(path, app.root_dir)) 65 logging.info("Creating page: %s" % rel_path)
63 header = yaml.dump(metadata) 66 header = yaml.dump(metadata)
64 os.makedirs(os.path.dirname(path), 0o755, True) 67 os.makedirs(os.path.dirname(path), 0o755, True)
65 with codecs.open(path, 'w', encoding='utf8') as fp: 68 with codecs.open(path, 'w', encoding='utf8') as fp:
66 fp.write("---\n") 69 fp.write("---\n")
67 fp.write(header) 70 fp.write(header)
68 fp.write("---\n") 71 fp.write("---\n")
69 fp.write(content) 72 fp.write(content)
70 73
74
75 def download_asset(app, url, rel_path=None, skip_if_exists=True):
76 if rel_path is None:
77 parsed_url = urlparse(url)
78 rel_path = 'assets/' + parsed_url.path.lstrip('/')
79 path = os.path.join(app.root_dir, rel_path)
80 if skip_if_exists and os.path.exists(path):
81 return
82 logger.info("Downloading %s" % rel_path)
83 os.makedirs(os.path.dirname(path), 0o755, True)
84 with urlopen(url) as resp, open(path, 'wb') as fp:
85 shutil.copyfileobj(resp, fp)
86