summaryrefslogtreecommitdiff
path: root/app/pages
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2014-07-02 11:59:53 -0400
committerluxagraf <sng@luxagraf.net>2014-07-02 11:59:53 -0400
commitcc9695f4c4c14d61c32611dba4ec88c98c6ce460 (patch)
tree81747f2e9d1936900e9b10772b66f6b56ca5b90e /app/pages
parent58264b2defe5d2c28abb86603b4fbcef30da1d89 (diff)
Finished up majority of v8 redesign, merging back to master
Diffstat (limited to 'app/pages')
-rw-r--r--app/pages/admin.py3
-rw-r--r--app/pages/models.py119
-rw-r--r--app/pages/views.py3
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))
+'''