Changeset 2055
- Timestamp:
- 06/22/09 15:52:19 (9 months ago)
- Location:
- branches/0.9/pylucid_project
- Files:
-
- 5 modified
-
apps/pylucid/admin.py (modified) (1 diff)
-
apps/pylucid/models.py (modified) (7 diffs)
-
apps/pylucid/system/headfile.py (modified) (1 diff)
-
apps/pylucid/views.py (modified) (3 diffs)
-
pylucid_plugins/extrahead/context_middleware.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/0.9/pylucid_project/apps/pylucid/admin.py
r2052 r2055 130 130 131 131 class EditableHtmlHeadFileAdmin(VersionAdmin): 132 list_display = ("filepath", " description", "lastupdatetime", "lastupdateby")132 list_display = ("filepath", "render", "description", "lastupdatetime", "lastupdateby") 133 133 list_display_links = ("filepath", "description") 134 list_filter = ("site", )134 list_filter = ("site","render") 135 135 136 136 admin.site.register(models.EditableHtmlHeadFile, EditableHtmlHeadFileAdmin) -
branches/0.9/pylucid_project/apps/pylucid/models.py
r2052 r2055 39 39 40 40 from django_tools.middlewares import ThreadLocal 41 from django_tools.template import render 41 42 42 43 from pylucid_project.utils import crypt … … 469 470 return u"ColorScheme '%s' (on sites: %r)" % (self.name, sites) 470 471 472 class ColorManager(models.Manager): 473 def get_color_dict(self, colorscheme): 474 colors = self.all().filter(colorscheme=colorscheme) 475 color_list = colors.values_list('name', 'value') 476 return dict([(name, "#%s" % value) for name,value in color_list]) 471 477 472 478 class Color(AutoSiteM2M, UpdateInfoBaseModel): … … 476 482 on_site -> sites.managers.CurrentSiteManager instance 477 483 """ 484 objects = ColorManager() 485 478 486 colorscheme = models.ForeignKey(ColorScheme) 479 487 name = models.CharField(max_length=128, … … 567 575 content = models.TextField() 568 576 569 def get_cachepath(self): 577 def get_color_filepath(self, colorscheme): 578 """ Colorscheme + filepath """ 579 assert isinstance(colorscheme, ColorScheme) 580 return os.path.join("ColorScheme_%s" % colorscheme.pk, self.filepath) 581 582 def get_path(self, colorscheme): 583 """ Path for filesystem cache path and link url. """ 584 return os.path.join( 585 settings.PYLUCID.PYLUCID_MEDIA_DIR, settings.PYLUCID.CACHE_DIR, 586 self.get_color_filepath(colorscheme) 587 ) 588 589 def get_cachepath(self, colorscheme): 570 590 """ 571 591 filesystem path with filename. 572 592 TODO: Install section sould create the directories! 573 593 """ 574 return os.path.join( 575 settings.MEDIA_ROOT, settings.PYLUCID.PYLUCID_MEDIA_DIR, settings.PYLUCID.CACHE_DIR, 576 self.filepath 577 ) 578 579 def save_cache_file(self): 594 return os.path.join(settings.MEDIA_ROOT, self.get_path(colorscheme)) 595 596 def get_rendered(self, colorscheme): 597 color_dict = Color.objects.get_color_dict(colorscheme) 598 return render.render_string_template(self.content, color_dict) 599 600 def save_cache_file(self, colorscheme): 580 601 """ 581 602 Try to cache the head file into filesystem (Only worked, if python process has write rights) 582 603 Try to create the out path, if it's not exist. 583 604 """ 584 cachepath = self.get_cachepath( )605 cachepath = self.get_cachepath(colorscheme) 585 606 586 607 def _save_cache_file(auto_create_dir=True): 608 rendered_content = self.get_rendered(colorscheme) 587 609 try: 588 610 f = file(cachepath, "w") 589 f.write( self.content)611 f.write(rendered_content) 590 612 f.close() 591 613 except IOError, err: … … 609 631 user_message_or_warn("EditableHtmlHeadFile cached successful into: %r" % cachepath) 610 632 611 def get_absolute_url(self): 612 cachepath = self.get_cachepath() 633 def save_all_color_cachfiles(self): 634 """ this headfile was changed: resave all cache files in every existing colors""" 635 designs = Design.objects.all().filter(colorscheme=colorscheme) 636 for design in designs: 637 print design 638 headfiles = design.headfiles.all() 639 for headfile in headfiles: 640 print headfile 641 headfile.save_cache_file(colorscheme) 642 643 def get_absolute_url(self, colorscheme): 644 cachepath = self.get_cachepath(colorscheme) 613 645 if os.path.isfile(cachepath): 614 646 # The file exist in media path -> Let the webserver send this file ;) 615 return posixpath.join( 616 settings.MEDIA_URL, settings.PYLUCID.PYLUCID_MEDIA_DIR, settings.PYLUCID.CACHE_DIR, 617 self.filepath 618 ) 647 return os.path.join(settings.MEDIA_URL, self.get_path(colorscheme)) 619 648 else: 620 649 # not cached into filesystem -> use pylucid.views.send_head_file for it 621 returnreverse('PyLucid-send_head_file', kwargs={"filepath":self.filepath})622 623 624 def get_headfilelink(self ):650 url = reverse('PyLucid-send_head_file', kwargs={"filepath":self.filepath}) 651 return url + "?ColorScheme=%s" % colorscheme.pk 652 653 def get_headfilelink(self, colorscheme): 625 654 """ Get the link url to this head file. """ 626 url = self.get_absolute_url( )655 url = self.get_absolute_url(colorscheme) 627 656 return headfile.HeadfileLink(url) 628 657 … … 643 672 644 673 # Try to cache the head file into filesystem (Only worked, if python process has write rights) 645 self.save_ cache_file()674 self.save_all_color_cachfiles() 646 675 647 676 return super(EditableHtmlHeadFile, self).save(*args, **kwargs) … … 705 734 ordering = ("user",) 706 735 736 737 #______________________________________________________________________________ 738 739 def cache_headfiles(sender, **kwargs): 740 """ 741 One colorscheme was changes: resave all cache headfiles with new color values. 742 """ 743 colorscheme = kwargs["instance"] 744 745 designs = Design.objects.all().filter(colorscheme=colorscheme) 746 for design in designs: 747 headfiles = design.headfiles.all() 748 for headfile in headfiles: 749 headfile.save_cache_file(colorscheme) 750 751 signals.post_save.connect(cache_headfiles, sender=ColorScheme) 707 752 708 753 #______________________________________________________________________________ -
branches/0.9/pylucid_project/apps/pylucid/system/headfile.py
r2022 r2055 76 76 def __init__(self, url, tag_attrs={}): 77 77 self.url = url 78 self.data_type = os.path.splitext(self.url)[1].lstrip(".") 78 if "?" in url: 79 path = url.split("?",1)[0] 80 else: 81 path = url 82 self.data_type = os.path.splitext(path)[1].lstrip(".") 79 83 self.check_type() 80 84 -
branches/0.9/pylucid_project/apps/pylucid/views.py
r2027 r2055 10 10 from pylucid.system import pylucid_plugin, i18n, pylucid_objects 11 11 from pylucid.markup.converter import apply_markup 12 from pylucid.models import PageTree, PageContent, EditableHtmlHeadFile, Language12 from pylucid.models import PageTree, PageContent, ColorScheme, EditableHtmlHeadFile, Language 13 13 14 14 … … 174 174 # view functions 175 175 176 177 176 def send_head_file(request, filepath): 178 177 """ … … 180 179 only a fall-back method if the file can't be stored into the media path 181 180 """ 181 if "ColorScheme" in request.GET: 182 colorscheme_pk = request.GET["ColorScheme"] 183 try: 184 colorscheme = ColorScheme.objects.get(pk=colorscheme_pk) 185 except ColorScheme.DoesNotExist: 186 if settings.DEBUG: 187 msg = "ColorScheme %r not found!" % colorscheme_pk 188 else: 189 msg = "" 190 raise http.Http404(msg) 191 182 192 try: 183 193 headfile = EditableHtmlHeadFile.objects.get(filepath=filepath) 184 194 except EditableHtmlHeadFile.DoesNotExist: 185 195 if settings.DEBUG: 186 request.page_msg.error("Headfile %r not found!" % filepath) 187 raise http.Http404 188 189 content = headfile.content 196 msg = "Headfile %r not found!" % filepath 197 else: 198 msg = "" 199 raise http.Http404(msg) 200 201 if headfile.render: 202 content = headfile.get_rendered(colorscheme) 203 else: 204 content = headfile.content 205 190 206 mimetype = headfile.mimetype 191 207 return http.HttpResponse(content, mimetype=mimetype) -
branches/0.9/pylucid_project/pylucid_plugins/extrahead/context_middleware.py
r2037 r2055 42 42 design = pagetree.design 43 43 44 colorscheme = design.colorscheme 44 45 headfiles = design.headfiles.all() 45 46 46 47 for headfile in headfiles: 47 48 # Get a instance from pylucid.system.headfile.HeadfileLink(): 48 headfilelink = headfile.get_headfilelink( )49 headfilelink = headfile.get_headfilelink(colorscheme) 49 50 head_tag = headfilelink.get_head_tag() 50 51 self.extrahead.append(head_tag)