diff options
author | luxagraf <sng@luxagraf.net> | 2014-07-02 11:59:53 -0400 |
---|---|---|
committer | luxagraf <sng@luxagraf.net> | 2014-07-02 11:59:53 -0400 |
commit | cc9695f4c4c14d61c32611dba4ec88c98c6ce460 (patch) | |
tree | 81747f2e9d1936900e9b10772b66f6b56ca5b90e /app/pages | |
parent | 58264b2defe5d2c28abb86603b4fbcef30da1d89 (diff) |
Finished up majority of v8 redesign, merging back to master
Diffstat (limited to 'app/pages')
-rw-r--r-- | app/pages/admin.py | 3 | ||||
-rw-r--r-- | app/pages/models.py | 119 | ||||
-rw-r--r-- | app/pages/views.py | 3 |
3 files changed, 88 insertions, 37 deletions
diff --git a/app/pages/admin.py b/app/pages/admin.py index e6befe5..bdcf884 100644 --- a/app/pages/admin.py +++ b/app/pages/admin.py @@ -1,5 +1,4 @@ from django.contrib import admin -from pages.models import Page from django.forms import Textarea from django.db import models @@ -23,4 +22,4 @@ class PageAdmin(admin.ModelAdmin): }) ) -admin.site.register(Page, PageAdmin) +#admin.site.register(Page, PageAdmin) diff --git a/app/pages/models.py b/app/pages/models.py index 278ec80..62976cd 100644 --- a/app/pages/models.py +++ b/app/pages/models.py @@ -3,10 +3,17 @@ from django.contrib.sitemaps import Sitemap import markdown +import os +import yaml +from django.conf import settings +from django.template.loader import render_to_string +from django.template import Context + + def markdown_processor(md): return markdown.markdown(md, ['footnotes'], safe_mode=False) - +''' class Page(models.Model): title = models.CharField(max_length=200) slug = models.SlugField() @@ -24,7 +31,7 @@ class Page(models.Model): #run markdown self.body_html = markdown_processor(self.body_markdown) super(Page, self).save() - +''' class PageSitemap(Sitemap): changefreq = "never" @@ -32,36 +39,80 @@ class PageSitemap(Sitemap): protocol = "https" def items(self): - return Page.objects.all() - - - -''' - function to parse through text files, read them into the database and then based on yaml either add them to site map or skip them. Then I make a button to call that function via the admin and shell script to just run it locally if I don't want to bother with that. - basically: - -metayaml, body_markdown = open(filename).read().split('\n---') -metadata = yaml.loads(metayaml) -metadata.title -metadata.slug -metadata.meta_description -metadata.include_in_sitemap -metadata.template -''' - -from os import walk -import yaml - -class PageFile(): - - def get_files(self, path): - for (dirpath, dirnames, filenames) in walk(path): - for f in filenames: - self.read(f) - - def read(self, filename): - with open(filename, "r", encoding="utf-8") as f: + p = PageGenerator(settings.PROJ_ROOT + '_pages') + return p.objects(include_in_sitemap=True) + #return Page.objects.all() + + +class PageGenerator(object): + + def __init__(self, path, *args, **kwargs): + self._objects = [] + for (dirpath, dirnames, filenames) in os.walk(path): + self.dirpath = dirpath + self.file_list = filter(lambda item: not (item.startswith('.') or item.endswith('~') or item.endswith('.md')), filenames) + self.get_files() + + def get_files(self): + for f in self.file_list: + p = Page(self.dirpath + '/' + f) + self._objects.append(p) + + def objects(self, *args, **kwargs): + filtered_list = [] + if kwargs: + for item in self._objects: + found = False + for k, v in kwargs.items(): + if getattr(item, k) == v and not found: + found = True + filtered_list.append(item) + elif getattr(item, k) != v and found: + filtered_list.remove(item) + return filtered_list + return self._objects + + def write_files(self): + for obj in self.objects(): + c = Context({'object': obj, 'SITE_URL': settings.SITE_URL}) + t = render_to_string(["details/%s.html" % obj.template], c) + s = render_to_string('details/page.txt', c) + _FileWriter('', t, ext="html", filename=obj.slug) + _FileWriter('', s, ext="txt", filename=obj.slug) + + +class _FileWriter(object): + """ + Given a path and text object; write the page to disc + """ + def __init__(self, path, text_object, ext='html', filename='index'): + self.path = '%s%s' % (settings.FLATFILES_ROOT, path) + if not os.path.isdir(self.path): + os.makedirs(self.path) + fpath = '%s%s.%s' % (self.path, filename, ext) + self.write(fpath, text_object) + + def write(self, fpath, text_object): + file = open(fpath, 'wb') + file.write(text_object.encode('utf-8')) + file.close() + + +class _FileLoader(object): + + def __init__(self, filename, *args, **kwargs): + self.filename = filename + metadata = self.read() + for k, v in metadata.items(): + setattr(self, k, v) + if self.body_markdown: + self.body_html = markdown.markdown(self.body_markdown, ['footnotes'], safe_mode=False) + + def read(self): + with open(self.filename, "r", encoding="utf-8") as f: contents = f.read() - metayaml, body_markdown = contents.split('\n---') - metadata = yaml.loads(metayaml) - print(metadata) + metayaml, self.body_markdown = contents.split('\n---') + return yaml.load(metayaml) + +class Page(_FileLoader): + pass diff --git a/app/pages/views.py b/app/pages/views.py index c4a12e9..cb605ab 100644 --- a/app/pages/views.py +++ b/app/pages/views.py @@ -2,8 +2,9 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from pages.models import Page - +''' def page(request, slug): obj = get_object_or_404(Page, slug__exact=slug) context = {'object': obj, } return render_to_response(["details/%s.html" % obj.slug, 'details/page.html'], context, context_instance=RequestContext(request)) +''' |