Dynastie seems OK, start generators
This commit is contained in:
		
							
								
								
									
										1
									
								
								generators/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								generators/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | __all__ = ["generator", "index"] | ||||||
							
								
								
									
										6
									
								
								generators/generator.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								generators/generator.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | class DynastieGenerator: | ||||||
|  |  | ||||||
|  |     def generate(self, blog, src, output): | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								generators/index.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								generators/index.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | from xml.dom.minidom import parse | ||||||
|  | from dynastie.generators.generator import DynastieGenerator | ||||||
|  | from django.db import models | ||||||
|  |  | ||||||
|  | class Index(DynastieGenerator): | ||||||
|  |  | ||||||
|  |     def generate(self, blog, src, output): | ||||||
|  |         from dynastie.models import * | ||||||
|  |         articles = Article.objects.all() | ||||||
|  |  | ||||||
|  |         dom = parse(src + '/_index.html') | ||||||
|  |  | ||||||
|  |         for node in dom.NodeList: | ||||||
|  |             print node | ||||||
|  |  | ||||||
|  |         return | ||||||
							
								
								
									
										99
									
								
								models.py
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								models.py
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| import os | import os | ||||||
| import shutil | import shutil | ||||||
| import hashlib | import hashlib | ||||||
|  | import inspect | ||||||
| from django.db import models | from django.db import models | ||||||
| from django.contrib.auth.models import User | from django.contrib.auth.models import User | ||||||
| from django.db.models.signals import post_init, post_delete, post_save | from django.db.models.signals import post_init, post_delete, post_save | ||||||
| @@ -14,47 +15,44 @@ class Blog(models.Model): | |||||||
|     keywords = models.TextField(blank=True) |     keywords = models.TextField(blank=True) | ||||||
|     writers = models.ManyToManyField(User) |     writers = models.ManyToManyField(User) | ||||||
|      |      | ||||||
|     generators = [] |     engines = list() | ||||||
|  |  | ||||||
|  |     src_path = '' | ||||||
|  |     output_path = '' | ||||||
|  |  | ||||||
|  |     def create_paths(self): | ||||||
|  |         self.src_path = 'sites/' + self.name | ||||||
|  |         self.output_path = 'sites/' + self.name + '_output' | ||||||
|  |          | ||||||
|     def create(self): |     def create(self): | ||||||
|         src = 'sites/' + self.name |  | ||||||
|         output = 'sites/' + self.name + '_output' |  | ||||||
|  |  | ||||||
|         if not os.path.exists('sites'): |         if not os.path.exists('sites'): | ||||||
|             os.mkdir('sites') |             os.mkdir('sites') | ||||||
|  |  | ||||||
|         self.remove() |         self.remove() | ||||||
|  |  | ||||||
|         os.mkdir(src) |         os.mkdir(self.src_path) | ||||||
|         os.mkdir(output) |         os.mkdir(self.output_path) | ||||||
|  |  | ||||||
|     def remove(self): |     def remove(self): | ||||||
|         src = 'sites/' + self.name |         if os.path.exists(self.src_path): | ||||||
|         output = 'sites/' + self.name + '_output' |             shutil.rmtree(self.src_path) | ||||||
|  |         if os.path.exists(self.output_path): | ||||||
|         if os.path.exists(src): |             shutil.rmtree(self.output_path) | ||||||
|             shutil.rmtree(src) |  | ||||||
|         if os.path.exists(output): |  | ||||||
|             shutil.rmtree(output) |  | ||||||
|  |  | ||||||
|     def load_generators(self): |     def load_generators(self): | ||||||
|         src = 'sites/' + self.name |         if os.path.exists(self.src_path + '/_generators'): | ||||||
|         if os.path.exists(src + '/_generators'): |             f = open(self.src_path + '/_generators', 'r') | ||||||
|             f = open(src + '/_generators', 'r') |  | ||||||
|             for line in f: |             for line in f: | ||||||
|                 generator.append(globals()[line]) |                 self.engines.append(globals()[line.strip()]) | ||||||
|             f.close() |             f.close() | ||||||
|         else: |         else: | ||||||
|             generator.append(globals()['dynastie.generators.index']) |             self.engines.append(globals()['index']) | ||||||
|             generator.append(globals()['dynastie.generators.categories']) |             self.engines.append(globals()['categories']) | ||||||
|             generator.append(globals()['dynastie.generators.archives']) |             self.engines.append(globals()['archives']) | ||||||
|              |              | ||||||
|     def copytree(self, src, dst): |     def copytree(self, src, dst): | ||||||
|         names = os.listdir(src) |         names = os.listdir(src) | ||||||
|  |  | ||||||
|         if not os.path.exists(dstname): |  | ||||||
|             os.makedirs(dst) |  | ||||||
|  |  | ||||||
|         errors = [] |         errors = [] | ||||||
|         for name in names: |         for name in names: | ||||||
|             if name.startswith('_') or name.endswith('~'): |             if name.startswith('_') or name.endswith('~'): | ||||||
| @@ -65,38 +63,45 @@ class Blog(models.Model): | |||||||
|                 if os.path.islink(srcname) and not os.path.exists(dstname): |                 if os.path.islink(srcname) and not os.path.exists(dstname): | ||||||
|                     linkto = os.readlink(srcname) |                     linkto = os.readlink(srcname) | ||||||
|                     os.symlink(linkto, dstname) |                     os.symlink(linkto, dstname) | ||||||
|                 if os.path.isdir(srcname) and not os.path.exists(dstname): |                 if os.path.isdir(srcname): | ||||||
|  |                     if not os.path.exists(dstname): | ||||||
|  |                         os.makedirs(dstname) | ||||||
|                     self.copytree(srcname, dstname) |                     self.copytree(srcname, dstname) | ||||||
|                 else: |                 else: | ||||||
|                     src_md5 = hashlib.md5() |                     if os.path.exists(dstname): | ||||||
|                     f = open(srcname,'rb')  |                         src_md5 = hashlib.md5() | ||||||
|                     src_md5.update(f.read()) |                         f = open(srcname,'rb')  | ||||||
|                     f.close() |                         src_md5.update(f.read()) | ||||||
|  |                         f.close() | ||||||
|  |  | ||||||
|                     dst_md5 = hashlib.md5() |                         dst_md5 = hashlib.md5() | ||||||
|                     f = open(dstname,'rb')  |                         f = open(dstname,'rb')  | ||||||
|                     dst_md5.update(f.read()) |                         dst_md5.update(f.read()) | ||||||
|                     f.close() |                         f.close() | ||||||
|  |  | ||||||
|                     if src_md5.digest() != dst_md5.digest(): |                         if src_md5.digest() != dst_md5.digest(): | ||||||
|                         copy2(srcname, dstname) |                             shutil.copy2(srcname, dstname) | ||||||
|  |                     else: | ||||||
|  |                         shutil.copy2(srcname, dstname) | ||||||
|  |  | ||||||
|         # XXX What about devices, sockets etc.? |         # XXX What about devices, sockets etc.? | ||||||
|             except (IOError, os.error), why: |             except (IOError, os.error), why: | ||||||
|                 errors.append((srcname, dstname, str(why))) |                 errors.append((srcname, dstname, str(why))) | ||||||
|         # catch the Error from the recursive copytree so that we can |         # catch the Error from the recursive copytree so that we can | ||||||
|         # continue with other files |         # continue with other files | ||||||
|             except Error, err: |             except Exception, err: | ||||||
|                 errors.extend(err.args[0]) |                 errors.extend(err.args[0]) | ||||||
|         if errors: |         if errors: | ||||||
|             raise Error(errors) |             raise Exception(errors) | ||||||
|  |  | ||||||
|     def generate(self): |     def generate(self): | ||||||
|         src = 'sites/' + self.name |  | ||||||
|         output = 'sites/' + self.name + '_output' |  | ||||||
|  |  | ||||||
|         self.load_generators() |         self.load_generators() | ||||||
|         self.copytree(src, output) |         self.copytree(self.src_path, self.output_path) | ||||||
|  |         for engine in self.engines: | ||||||
|  |             for name, obj in inspect.getmembers(engine): | ||||||
|  |                 if inspect.isclass(obj): | ||||||
|  |                     e = obj() | ||||||
|  |                     e.generate(self, self.src_path, self.output_path) | ||||||
|  |  | ||||||
| class Editor(models.Model): | class Editor(models.Model): | ||||||
|     name = models.CharField(max_length=255, unique=True) |     name = models.CharField(max_length=255, unique=True) | ||||||
| @@ -130,8 +135,8 @@ class Comment(models.Model): | |||||||
|     the_comment = models.TextField(max_length=255) |     the_comment = models.TextField(max_length=255) | ||||||
|  |  | ||||||
| @receiver(post_init, sender=Blog) | @receiver(post_init, sender=Blog) | ||||||
| def create_blog_signal(sender, **kwargs): | def delete_blog_signal(sender, **kwargs): | ||||||
|     sender.create() |     sender.create_paths() | ||||||
|  |  | ||||||
| @receiver(post_delete, sender=Blog) | @receiver(post_delete, sender=Blog) | ||||||
| def delete_blog_signal(sender, **kwargs): | def delete_blog_signal(sender, **kwargs): | ||||||
| @@ -139,8 +144,14 @@ def delete_blog_signal(sender, **kwargs): | |||||||
|  |  | ||||||
| @receiver(post_delete, sender=Article) | @receiver(post_delete, sender=Article) | ||||||
| def delete_article_signal(sender, **kwargs): | def delete_article_signal(sender, **kwargs): | ||||||
|     sender.blog.generate() |     kwargs["instance"].blog.create_paths() | ||||||
|  |     kwargs["instance"].blog.generate() | ||||||
|  |     # b = Blog.objects.filter(pk=kwargs["instance"].blog.id) | ||||||
|  |     # b.generate() | ||||||
|  |  | ||||||
| @receiver(post_save, sender=Article) | @receiver(post_save, sender=Article) | ||||||
| def save_article_signal(sender, **kwargs): | def save_article_signal(sender, **kwargs): | ||||||
|     sender.blog.generate() |     kwargs["instance"].blog.create_paths() | ||||||
|  |     kwargs["instance"].blog.generate() | ||||||
|  |     # b = Blog.objects.filter(pk=kwargs["instance"].blog.id) | ||||||
|  |     # b.generate() | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								urls.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								urls.py
									
									
									
									
									
								
							| @@ -23,6 +23,8 @@ urlpatterns = patterns('', | |||||||
|     url(r'^blog/edit/(\d+)$',     'dynastie.views.edit_blog',    name='edit_blog'), |     url(r'^blog/edit/(\d+)$',     'dynastie.views.edit_blog',    name='edit_blog'), | ||||||
|     url(r'^article/add/(\d+)$',   'dynastie.views.add_article',  name='add_article'), |     url(r'^article/add/(\d+)$',   'dynastie.views.add_article',  name='add_article'), | ||||||
|     url(r'^article/edit/(\d+)$',  'dynastie.views.edit_article', name='edit_article'), |     url(r'^article/edit/(\d+)$',  'dynastie.views.edit_article', name='edit_article'), | ||||||
|  |     url(r'^article/delete/(\d+)$','dynastie.views.delete_article', name='delete_article'), | ||||||
|  |     url(r'^generate/(\d+)$',      'dynastie.views.generate',     name='generate'), | ||||||
|     # url(r'^dynastie/', include('dynastie.foo.urls')), |     # url(r'^dynastie/', include('dynastie.foo.urls')), | ||||||
|  |  | ||||||
|     # Uncomment the admin/doc line below to enable admin documentation: |     # Uncomment the admin/doc line below to enable admin documentation: | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								views.py
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								views.py
									
									
									
									
									
								
							| @@ -150,7 +150,13 @@ def delete_category(request, category_id): | |||||||
|     if not request.user.is_superuser: |     if not request.user.is_superuser: | ||||||
|         return HttpResponseRedirect('/category/' + str(category_id)) |         return HttpResponseRedirect('/category/' + str(category_id)) | ||||||
|  |  | ||||||
|     Category.objects.get(pk=category_id).delete() |     category = Category.objects.get(pk=category_id) | ||||||
|  |  | ||||||
|  |     if category is None: | ||||||
|  |         raise Http404 | ||||||
|  |  | ||||||
|  |     category.delete() | ||||||
|  |  | ||||||
|     return HttpResponseRedirect('/category') |     return HttpResponseRedirect('/category') | ||||||
|  |  | ||||||
| @login_required | @login_required | ||||||
| @@ -174,6 +180,7 @@ def add_blog(request): | |||||||
|             form = BlogForm(request.POST) # A form bound to the POST data |             form = BlogForm(request.POST) # A form bound to the POST data | ||||||
|             if form.is_valid(): # All validation rules pass |             if form.is_valid(): # All validation rules pass | ||||||
|                 form = form.save() |                 form = form.save() | ||||||
|  |                 form.create() | ||||||
|                 return HttpResponseRedirect('/blog') # Redirect after POST |                 return HttpResponseRedirect('/blog') # Redirect after POST | ||||||
|         else: |         else: | ||||||
|             return HttpResponseRedirect('/blog') # Redirect after POST |             return HttpResponseRedirect('/blog') # Redirect after POST | ||||||
| @@ -289,3 +296,33 @@ def edit_article(request, article_id): | |||||||
|     return render(request, 'edit_article.html', { |     return render(request, 'edit_article.html', { | ||||||
|         'form': form, 'article_id' : article_id |         'form': form, 'article_id' : article_id | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|  | @login_required | ||||||
|  | def delete_article(request, article_id): | ||||||
|  |     article = Article.objects.get(pk=article_id) | ||||||
|  |  | ||||||
|  |     if article is None: | ||||||
|  |         raise Http404 | ||||||
|  |  | ||||||
|  |     b = Blog.objects.filter(writers=request.user.id).filter(pk=article.blog.id) | ||||||
|  |  | ||||||
|  |     if b is None: | ||||||
|  |         raise Http404 | ||||||
|  |  | ||||||
|  |     article.delete() | ||||||
|  |  | ||||||
|  |     return HttpResponseRedirect('/blog/' + str(article.blog.id)) | ||||||
|  |  | ||||||
|  | @login_required | ||||||
|  | def generate(request, blog_id): | ||||||
|  |     if not request.user.is_superuser: | ||||||
|  |         #b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id) | ||||||
|  |         b = Blog.objects.get(pk=blog_id) | ||||||
|  |     else: | ||||||
|  |         b = Blog.objects.get(pk=blog_id) | ||||||
|  |  | ||||||
|  |     if b is None: | ||||||
|  |         raise Http404 | ||||||
|  |  | ||||||
|  |     b.create_paths() | ||||||
|  |     b.generate() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user