Changeset 2055

Show
Ignore:
Timestamp:
06/22/09 15:52:19 (9 months ago)
Author:
JensDiemer
Message:

inserting colors from ColorScheme?.

Location:
branches/0.9/pylucid_project
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • branches/0.9/pylucid_project/apps/pylucid/admin.py

    r2052 r2055  
    130130 
    131131class EditableHtmlHeadFileAdmin(VersionAdmin): 
    132     list_display = ("filepath", "description", "lastupdatetime", "lastupdateby") 
     132    list_display = ("filepath", "render", "description", "lastupdatetime", "lastupdateby") 
    133133    list_display_links = ("filepath", "description") 
    134     list_filter = ("site",) 
     134    list_filter = ("site","render") 
    135135 
    136136admin.site.register(models.EditableHtmlHeadFile, EditableHtmlHeadFileAdmin) 
  • branches/0.9/pylucid_project/apps/pylucid/models.py

    r2052 r2055  
    3939 
    4040from django_tools.middlewares import ThreadLocal 
     41from django_tools.template import render 
    4142 
    4243from pylucid_project.utils import crypt 
     
    469470        return u"ColorScheme '%s' (on sites: %r)" % (self.name, sites) 
    470471 
     472class 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]) 
    471477 
    472478class Color(AutoSiteM2M, UpdateInfoBaseModel): 
     
    476482        on_site -> sites.managers.CurrentSiteManager instance 
    477483    """ 
     484    objects = ColorManager() 
     485     
    478486    colorscheme = models.ForeignKey(ColorScheme) 
    479487    name = models.CharField(max_length=128, 
     
    567575    content = models.TextField() 
    568576     
    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): 
    570590        """ 
    571591        filesystem path with filename. 
    572592        TODO: Install section sould create the directories! 
    573593        """ 
    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): 
    580601        """ 
    581602        Try to cache the head file into filesystem (Only worked, if python process has write rights) 
    582603        Try to create the out path, if it's not exist. 
    583604        """ 
    584         cachepath = self.get_cachepath() 
     605        cachepath = self.get_cachepath(colorscheme) 
    585606         
    586607        def _save_cache_file(auto_create_dir=True): 
     608            rendered_content = self.get_rendered(colorscheme) 
    587609            try: 
    588610                f = file(cachepath, "w") 
    589                 f.write(self.content) 
     611                f.write(rendered_content) 
    590612                f.close() 
    591613            except IOError, err: 
     
    609631                user_message_or_warn("EditableHtmlHeadFile cached successful into: %r" % cachepath) 
    610632 
    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) 
    613645        if os.path.isfile(cachepath): 
    614646            # 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)) 
    619648        else: 
    620649            # not cached into filesystem -> use pylucid.views.send_head_file for it 
    621             return reverse('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): 
    625654        """ Get the link url to this head file. """ 
    626         url = self.get_absolute_url() 
     655        url = self.get_absolute_url(colorscheme) 
    627656        return headfile.HeadfileLink(url) 
    628657 
     
    643672 
    644673        # 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() 
    646675 
    647676        return super(EditableHtmlHeadFile, self).save(*args, **kwargs) 
     
    705734        ordering = ("user",) 
    706735 
     736 
     737#______________________________________________________________________________ 
     738 
     739def 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     
     751signals.post_save.connect(cache_headfiles, sender=ColorScheme) 
    707752 
    708753#______________________________________________________________________________ 
  • branches/0.9/pylucid_project/apps/pylucid/system/headfile.py

    r2022 r2055  
    7676    def __init__(self, url, tag_attrs={}): 
    7777        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(".") 
    7983        self.check_type() 
    8084 
  • branches/0.9/pylucid_project/apps/pylucid/views.py

    r2027 r2055  
    1010from pylucid.system import pylucid_plugin, i18n, pylucid_objects 
    1111from pylucid.markup.converter import apply_markup 
    12 from pylucid.models import PageTree, PageContent, EditableHtmlHeadFile, Language 
     12from pylucid.models import PageTree, PageContent, ColorScheme, EditableHtmlHeadFile, Language 
    1313 
    1414 
     
    174174# view functions 
    175175 
    176  
    177176def send_head_file(request, filepath): 
    178177    """ 
     
    180179    only a fall-back method if the file can't be stored into the media path 
    181180    """ 
     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     
    182192    try: 
    183193        headfile = EditableHtmlHeadFile.objects.get(filepath=filepath) 
    184194    except EditableHtmlHeadFile.DoesNotExist: 
    185195        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         
    190206    mimetype = headfile.mimetype     
    191207    return http.HttpResponse(content, mimetype=mimetype) 
  • branches/0.9/pylucid_project/pylucid_plugins/extrahead/context_middleware.py

    r2037 r2055  
    4242        design = pagetree.design 
    4343         
     44        colorscheme = design.colorscheme 
    4445        headfiles = design.headfiles.all() 
    4546         
    4647        for headfile in headfiles: 
    4748            # Get a instance from pylucid.system.headfile.HeadfileLink(): 
    48             headfilelink = headfile.get_headfilelink() 
     49            headfilelink = headfile.get_headfilelink(colorscheme) 
    4950            head_tag = headfilelink.get_head_tag() 
    5051            self.extrahead.append(head_tag)