Browse files

Change the output directory structure and a bit the templates structu…

…re as well.

--HG--
rename : pelican/themes/martyalchin/css/style.css => pelican/themes/martyalchin/static/css/style.css
rename : pelican/themes/notmyidea/css/main.css => pelican/themes/notmyidea/static/css/main.css
rename : pelican/themes/notmyidea/css/pygment.css => pelican/themes/notmyidea/static/css/pygment.css
rename : pelican/themes/notmyidea/css/reset.css => pelican/themes/notmyidea/static/css/reset.css
rename : pelican/themes/notmyidea/css/wide.css => pelican/themes/notmyidea/static/css/wide.css
rename : pelican/themes/notmyidea/images/icons/delicious.png => pelican/themes/notmyidea/static/images/icons/delicious.png
rename : pelican/themes/notmyidea/images/icons/lastfm.png => pelican/themes/notmyidea/static/images/icons/lastfm.png
rename : pelican/themes/notmyidea/images/icons/linkedin.png => pelican/themes/notmyidea/static/images/icons/linkedin.png
rename : pelican/themes/notmyidea/images/icons/rss.png => pelican/themes/notmyidea/static/images/icons/rss.png
rename : pelican/themes/notmyidea/images/icons/twitter.png => pelican/themes/notmyidea/static/images/icons/twitter.png
  • Loading branch information...
1 parent 6bec424 commit 090a02a9e35b0a49117779611ecdb4483b2764bf Alexis Metaireau committed Nov 21, 2010
View
2 TODO
@@ -1,8 +1,6 @@
* Add a way to support pictures (see how sphinx makes that)
* Find a way to extend the existing templates instead of rewriting all from scratch.
-* find a better way to specify the templates. an idea is simply to install the templates in a default path, and to add a way to specify them by default under a "_themes" dir.
* Make the program support UTF8-encoded files as input (and later: any encoding?)
-* Change the directory structure ?
* Add status support (draft, published, hidden)
* Add a serve + automatic generation behaviour.
* Recompile only the changed files, not all.
View
16 pelican/generators.py
@@ -16,10 +16,10 @@
class Generator(object):
"""Handle all generation process: files writes, feed creation, and this
kind of basic stuff"""
-
- def __init__(self, settings=None, path=None, theme=None, output_path=None,
+
+ def __init__(self, settings=None, path=None, theme=None, output_path=None,
markup=None):
- """Read the settings, and performs some checks on the environement
+ """Read the settings, and performs some checks on the environment
before doing anything else.
"""
if settings is None:
@@ -64,15 +64,15 @@ def run(self, processors):
for p in processors:
p.process(context, self)
- def generate_feed(self, elements, context, filename=None,
+ def generate_feed(self, elements, context, filename=None,
relative_urls=True):
"""Generate a feed with the list of articles provided
Return the feed. If no output_path or filename is specified, just return
the feed object.
:param articles: the articles to put on the feed.
- :param context: the context to get the feed metadatas.
+ :param context: the context to get the feed metadata.
:param output_path: where to output the file.
:param filename: the filename to output.
:param relative_urls: use relative urls or absolutes ones
@@ -104,11 +104,11 @@ def generate_feed(self, elements, context, filename=None,
fp = open(complete_path, 'w')
feed.write(fp, 'utf-8')
print u' [ok] writing %s' % complete_path
-
+
fp.close()
return feed
- def generate_file(self, name, template, context, relative_urls=True,
+ def generate_file(self, name, template, context, relative_urls=True,
**kwargs):
"""Write the file with the given informations
@@ -166,7 +166,7 @@ def get_files(self, path, exclude=[], extensions=None):
files.extend([os.sep.join((root, f)) for f in temp_files
if True in [f.endswith(ext) for ext in extensions]])
return files
-
+
def _get_relative_siteurl(self, filename):
"""Return the siteurl relative to the given filename"""
return '../' * filename.count('/') + '.'
View
31 pelican/processors.py
@@ -11,7 +11,7 @@
class Processor(object):
def _update_context(self, context, items):
- """Update the context with the given items from the currrent
+ """Update the context with the given items from the currrent
processor.
"""
for item in items:
@@ -24,20 +24,20 @@ def _update_context(self, context, items):
class ArticlesProcessor(Processor):
def __init__(self, settings=None):
- self.articles = []
+ self.articles = []
self.dates = {}
self.years = {}
self.tags = {}
- self.categories = {}
-
+ self.categories = {}
+
def generate_feeds(self, context, generator):
- """Generate the feeds from the current context, and output files."""
+ """Generate the feeds from the current context, and output files."""
generator.generate_feed(self.articles, context, context['FEED'])
for cat, arts in self.categories.items():
arts.sort(key=attrgetter('date'), reverse=True)
- generator.generate_feed(arts, context,
+ generator.generate_feed(arts, context,
context['CATEGORY_FEED'] % cat)
def generate_pages(self, context, generator):
@@ -92,7 +92,7 @@ def preprocess(self, context, generator):
# sort the articles by date
self.articles.sort(key=attrgetter('date'), reverse=True)
# and generate the output :)
- self._update_context(context, ('articles', 'dates', 'years',
+ self._update_context(context, ('articles', 'dates', 'years',
'tags', 'categories'))
def process(self, context, generator):
@@ -116,22 +116,29 @@ def preprocess(self, context, generator):
self.pages.append(page)
context['PAGES'] = self.pages
-
+
def process(self, context, generator):
templates = generator.get_templates()
for page in self.pages:
- generator.generate_file('pages/%s' % page.url,
+ generator.generate_file('pages/%s' % page.url,
templates['page'], context, page=page)
self._update_context(context, ('pages',))
class StaticProcessor(Processor):
"""copy static paths to output"""
+ def _copy_paths(self, paths, source, destination, output_path,
+ final_path=None):
+ for path in paths:
+ copytree(path, source, os.path.join(output_path, destination),
+ final_path)
+
def process(self, context, generator):
- for path in generator.settings['STATIC_PATHS']:
- copytree(path, generator.theme, generator.output_path)
- copytree('pics', generator.path, generator.output_path)
+ self._copy_paths(generator.settings['STATIC_PATHS'], generator.path,
+ 'static', generator.output_path)
+ self._copy_paths(generator.settings['THEME_PATHS'], generator.theme,
+ 'theme', generator.output_path, '.')
class PdfProcessor(Processor):
View
3 pelican/settings.py
@@ -6,7 +6,8 @@
'THEME': _DEFAULT_THEME,
'OUTPUT_PATH': 'output/',
'MARKUP': ('rst', 'md'),
- 'STATIC_PATHS': ['css', 'images'],
+ 'STATIC_PATHS': ['images',],
+ 'THEME_PATHS': ['static',],
'FEED': 'feeds/all.atom.xml',
'CATEGORY_FEED': 'feeds/%s.atom.xml',
'SITENAME': 'A Pelican Blog',
View
0 pelican/themes/martyalchin/css/style.css → ...n/themes/martyalchin/static/css/style.css
File renamed without changes.
View
2 pelican/themes/martyalchin/templates/base.html
@@ -3,7 +3,7 @@
<head>
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
<meta charset="utf-8" />
- <link rel="stylesheet" href="{{ SITEURL }}/css/style.css" type="text/css" />
+ <link rel="stylesheet" href="{{ SITEURL }}/theme/css/style.css" type="text/css" />
<link href="{{ SITEURL }}/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
</head>
<body>
View
0 pelican/themes/notmyidea/css/main.css → pelican/themes/notmyidea/static/css/main.css
File renamed without changes.
View
0 pelican/themes/notmyidea/css/pygment.css → ...n/themes/notmyidea/static/css/pygment.css
File renamed without changes.
View
0 pelican/themes/notmyidea/css/reset.css → ...can/themes/notmyidea/static/css/reset.css
File renamed without changes.
View
0 pelican/themes/notmyidea/css/wide.css → pelican/themes/notmyidea/static/css/wide.css
File renamed without changes.
View
0 ...emes/notmyidea/images/icons/delicious.png → ...tmyidea/static/images/icons/delicious.png
File renamed without changes
View
0 .../themes/notmyidea/images/icons/lastfm.png → .../notmyidea/static/images/icons/lastfm.png
File renamed without changes
View
0 ...hemes/notmyidea/images/icons/linkedin.png → ...otmyidea/static/images/icons/linkedin.png
File renamed without changes
View
0 ...can/themes/notmyidea/images/icons/rss.png → ...mes/notmyidea/static/images/icons/rss.png
File renamed without changes
View
0 ...themes/notmyidea/images/icons/twitter.png → ...notmyidea/static/images/icons/twitter.png
File renamed without changes
View
2 pelican/themes/notmyidea/templates/base.html
@@ -3,7 +3,7 @@
<head>
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
<meta charset="utf-8" />
- <link rel="stylesheet" href="{{ SITEURL }}/css/{{ CSS_FILE }}" type="text/css" />
+ <link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
<link href="{{ SITEURL }}/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
View
10 pelican/utils.py
@@ -50,14 +50,16 @@ def slugify(value):
value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
return re.sub('[-\s]+', '-', value)
-def copytree(path, origin, destination):
+def copytree(path, origin, destination, topath=None):
"""Copy path from origin to destination, silent any errors"""
-
+
+ if not topath:
+ topath = path
try:
fromp = os.path.expanduser(os.path.join(origin, path))
- to = os.path.expanduser(os.path.join(destination, path))
+ to = os.path.expanduser(os.path.join(destination, topath))
shutil.copytree(fromp, to)
- print u' [ok] copying %s' % fromp
+ print u' [ok] copying %s to %s' % (fromp, to)
except OSError:
pass

0 comments on commit 090a02a

Please sign in to comment.