Skip to content

Commit

Permalink
Change the output directory structure and a bit the templates structu…
Browse files Browse the repository at this point in the history
…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
Alexis Metaireau committed Nov 21, 2010
1 parent 6bec424 commit 090a02a
Show file tree
Hide file tree
Showing 17 changed files with 37 additions and 29 deletions.
2 changes: 0 additions & 2 deletions 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.
Expand Down
16 changes: 8 additions & 8 deletions pelican/generators.py
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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('/') + '.'
31 changes: 19 additions & 12 deletions pelican/processors.py
Expand Up @@ -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:
Expand All @@ -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):
Expand Down Expand Up @@ -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):
Expand All @@ -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):
Expand Down
3 changes: 2 additions & 1 deletion pelican/settings.py
Expand Up @@ -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',
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion pelican/themes/martyalchin/templates/base.html
Expand Up @@ -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>
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion pelican/themes/notmyidea/templates/base.html
Expand Up @@ -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" />


Expand Down
10 changes: 6 additions & 4 deletions pelican/utils.py
Expand Up @@ -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
Expand Down

0 comments on commit 090a02a

Please sign in to comment.