Esempio n. 1
0
    def get_absolute_url(self, domain=False):
        obj = self.publishable
        category = get_cached_object(Category, pk=self.category_id)

        kwargs = {
            'content_type' : slugify(obj.content_type.model_class()._meta.verbose_name_plural),
            'slug' : self.slug,
        }

        if self.static:
            if category.tree_parent_id:
                kwargs['category'] = category.tree_path
                url = reverse('static_detail', kwargs=kwargs)
            else:
                url = reverse('home_static_detail', kwargs=kwargs)
        else:
            kwargs.update({
                    'year' : self.publish_from.year,
                    'month' : self.publish_from.month,
                    'day' : self.publish_from.day,
                })
            if category.tree_parent_id:
                kwargs['category'] = category.tree_path
                url = reverse('object_detail', kwargs=kwargs)
            else:
                url = reverse('home_object_detail', kwargs=kwargs)

        if category.site_id != settings.SITE_ID or domain:
            site = get_cached_object(Site, pk=category.site_id)
            return 'http://' + site.domain + url
        return url
Esempio n. 2
0
    def clean(self):
        if not self.category or not self.name:
            return

        if self.target_ct:
            try:
                get_cached_object(self.target_ct, pk=self.target_id)
            except self.target_ct.model_class().DoesNotExist:
                raise ValidationError(
                    _('This position doesn\'t point to a valid object.'))

        qset = Position.objects.filter(category=self.category, name=self.name)

        if self.pk:
            qset = qset.exclude(pk=self.pk)

        if self.active_from:
            qset = qset.exclude(active_till__lte=self.active_from)

        if self.active_till:
            qset = qset.exclude(active_from__gt=self.active_till)

        if qset.count():
            raise ValidationError(
                _('There already is a postion for %(cat)s named %(name)s fo this time.'
                  ) % {
                      'cat': self.category,
                      'name': self.name
                  })
Esempio n. 3
0
File: forms.py Progetto: Almad/ella
    def set_init_props(self, data=None, init_props=INIT_PROPS):
        """set initial form properties
        form is created from data, if it is bound
        from init_props, if not bound
        from options saved in database, if any
        """
        if data:
            # don't want MultiValueDict here - sorry for this hack - FIXME
            init_props = dict(zip(data.keys(), data.values()))

        # copy defalt settings
        self.init_props = INIT_PROPS.copy()

        # set actual time
        now = int(time.mktime(datetime.now().timetuple()))
        self.init_props['timestamp'] = now

        # update defaults with form init params
        self.init_props.update(init_props)

        target_ct, target_id = None, None
        try:
            target_ct, target_id = self.init_props['target'].split(':')
            target_ct, target_id = int(target_ct), int(target_id)
            target_contenttype = get_cached_object(ContentType, pk=target_ct)
            self.target_object = get_cached_object(target_contenttype, pk=target_id)
        except ValueError, ve:
            log.error('ValueError: %s' % str(ve))
Esempio n. 4
0
    def set_init_props(self, data=None, init_props=INIT_PROPS):
        """set initial form properties
        form is created from data, if it is bound
        from init_props, if not bound
        from options saved in database, if any
        """
        if data:
            # don't want MultiValueDict here - sorry for this hack - FIXME
            init_props = dict(zip(data.keys(), data.values()))

        # copy defalt settings
        self.init_props = INIT_PROPS.copy()

        # set actual time
        now = int(time.mktime(datetime.now().timetuple()))
        self.init_props['timestamp'] = now

        # update defaults with form init params
        self.init_props.update(init_props)

        target_ct, target_id = None, None
        try:
            target_ct, target_id = self.init_props['target'].split(':')
            target_ct, target_id = int(target_ct), int(target_id)
            target_contenttype = get_cached_object(ContentType, pk=target_ct)
            self.target_object = get_cached_object(target_contenttype,
                                                   pk=target_id)
        except ValueError, ve:
            log.error('ValueError: %s' % str(ve))
Esempio n. 5
0
 def __unicode__(self):
     if self.author_id:
         return unicode(get_cached_object(Author, pk=self.author_id))
     elif self.user_id:
         user = get_cached_object(User, pk=self.user_id)
         return user.get_full_name()
     return self.name
Esempio n. 6
0
File: admin.py Progetto: whit/ella
    def clean(self):
        """Checks if all objects exist and searches for duplicate references to the same object in one gallery."""
        if not self.is_valid():
            return

        obj = self.instance
        items = set([])

        for i, d in ((i, d) for i, d in enumerate(self.cleaned_data) if d):
            # TODO: why cleaned data does not have target_ct_id prop?
            target = (
                d['target_ct'].id,
                d['target_id'],
            )
            # check if object exists
            try:
                # TODO: wouldn't it be better not to take objects from cache?
                obj = get_cached_object(get_cached_object(
                    ContentType, pk=d['target_ct'].id),
                                        pk=d['target_id'])
            except ObjectDoesNotExist:
                raise forms.ValidationError, ugettext(
                    '%s with id %i does not exist') % (d['target_ct'],
                                                       d['target_id'])
            # check for duplicities
            if target in items:
                raise forms.ValidationError, ugettext(
                    'There are two references to %s in this gallery') % obj
            items.add(target)

        return self.cleaned_data
Esempio n. 7
0
def folder_post_save(category_tp, author_slug, sender, instance, **kwargs):
    slug = slug_from_folder(instance)

    try:
        gal = get_cached_object(Gallery, slug=slug)
        new = False
    except Gallery.DoesNotExist:
        gal = Gallery(slug=slug)
        new = True

    if category_tp is not None:
        cat = get_cached_object(Category, tree_path=category_tp)
    else:
        cat = get_cached_object(Category, tree_path='', site_id=settings.SITE_ID)

    gal.title = instance.name
    gal.category = cat
    gal.publish_from = datetime.now()
    gal.published = True
    gal.save()

    if author_slug is not None:
        gal.authors = [get_cached_object(Author, slug=author_slug),]
        gal.save()

    if new is True:
        Listing.objects.create(publishable=gal, category=cat, publish_from=gal.publish_from)
    else:
        for l in Listing.objects.filter(publishable=gal):
            l.category = cat
            l.save()
Esempio n. 8
0
    def render(self, context):
        try:
            cat = template.Variable(self.category).resolve(context)
            if not isinstance(cat, Category):
                cat = get_cached_object(Category, site=settings.SITE_ID, slug=self.category)
        except (template.VariableDoesNotExist, Category.DoesNotExist):
            cat = get_cached_object(Category, site=settings.SITE_ID, tree_parent__isnull=True)

        try:
            pos = Position.objects.get_active_position(cat, self.position, self.nofallback)
        except Position.DoesNotExist:
            return ""

        return pos.render(context, self.nodelist, self.box_type)
Esempio n. 9
0
    def render(self, context):
        try:
            cat = template.Variable(self.category).resolve(context)
            if not isinstance(cat, Category):
                cat = get_cached_object(Category, site=settings.SITE_ID, slug=self.category)
        except (template.VariableDoesNotExist, Category.DoesNotExist):
            cat = get_cached_object(Category, site=settings.SITE_ID, tree_parent__isnull=True)

        for pos in self.positions:
            try:
                Position.objects.get_active_position(cat, pos, self.nofallback)
                return self.nodelist_true.render(context)
            except Position.DoesNotExist:
                pass
        return self.nodelist_false.render(context)
Esempio n. 10
0
    def __getitem__(self, key):
        if isinstance(key, int):
            if self._reversed:
                key = -1 - key
            pk = redis.lindex(self._key, key)
            if pk is None:
                raise IndexError('list index out of range')
            return get_cached_object(FlatComment, pk=pk)

        cnt = None
        start = 0 if key.start is None else key.start
        stop = key.stop
        if key.stop is None:
            stop = cnt = self.count()
        assert isinstance(key, slice) and isinstance(
            start, int) and isinstance(stop, int) and key.step is None

        if self._reversed:
            if cnt is None:
                cnt = self.count()
            pks = reversed(redis.lrange(self._key, cnt - stop,
                                        cnt - start - 1))
        else:
            pks = redis.lrange(self._key, start, stop - 1)

        return get_cached_objects(pks, model=FlatComment, missing=SKIP)
Esempio n. 11
0
 def load_template_source(self, template_name, template_dirs=None):
     " template loader conforming to django's API "
     try:
         t = get_cached_object(CT_DBTEMPLATE, name=template_name, site__id=settings.SITE_ID)
         return (t.get_text(), template_name)
     except DbTemplate.DoesNotExist:
         raise TemplateDoesNotExist, template_name
Esempio n. 12
0
    def get_absolute_url(self, domain=False):
        obj = self.publishable
        category = self.category

        kwargs = {
            'content_type':
            slugify(obj.content_type.model_class()._meta.verbose_name_plural),
            'slug':
            self.slug,
        }

        if self.static:
            if category.tree_parent_id:
                kwargs['category'] = category.tree_path
                url = reverse('static_detail', kwargs=kwargs)
            else:
                url = reverse('home_static_detail', kwargs=kwargs)
        else:
            kwargs.update({
                'year': self.publish_from.year,
                'month': self.publish_from.month,
                'day': self.publish_from.day,
            })
            if category.tree_parent_id:
                kwargs['category'] = category.tree_path
                url = reverse('object_detail', kwargs=kwargs)
            else:
                url = reverse('home_object_detail', kwargs=kwargs)

        if category.site_id != settings.SITE_ID or domain:
            site = get_cached_object(Site, pk=category.site_id)
            return 'http://' + site.domain + url
        return url
Esempio n. 13
0
    def get_context(self, request, category, slug, year, month, day, id):

        try:
            cat = Category.objects.get_by_tree_path(category)
        except Category.DoesNotExist:
            # non-static url, no way to recover
            if year:
                raise Http404("Category with tree_path '%s' doesn't exist." % category)
            else:
                cat = None

        if year:
            lookup = {
                'publish_from__year': year,
                'publish_from__month': month,
                'publish_from__day': day,
                'category': cat,
                'slug': slug,
                'static': False
            }
            try:
                publishable = get_cached_object(Publishable, published=True, **lookup)
            except Publishable.DoesNotExist:
                # Fallback for staff members in case there are multiple
                # objects with same URL.
                if request.user.is_staff:
                    try:
                        publishable = Publishable.objects.filter(published=False, **lookup)[0]
                    except IndexError:
                        raise Http404
                else:
                    raise Http404
        else:
            publishable = get_cached_object_or_404(Publishable, pk=id)

        if not (publishable.is_published() or request.user.is_staff):
            # future publish, render if accessed by logged in staff member
            raise Http404

        if not year:
            if cat is None:
                raise self.WrongUrl('Category with tree_path %r does not exist.' % category, publishable)
            elif not publishable.static:
                raise self.WrongUrl('%s is not static.' % publishable, publishable)
            elif slug != publishable.slug:
                raise self.WrongUrl('Wrong slug in URL (%r).' % slug, publishable)
            elif publishable.category_id != cat.pk:
                raise self.WrongUrl('Wrong category for %s.' % publishable, publishable)

        # save existing object to preserve memory and SQL
        publishable.category = cat

        context = {
                'object' : publishable,
                'category' : cat,
                'content_type_name' : slugify(publishable.content_type.model_class()._meta.verbose_name_plural),
                'content_type' : publishable.content_type
            }

        return context
Esempio n. 14
0
def image_pre_save(sender, instance, **kwargs):
    basetitle = instance.original_filename

    try:
        p = Photo.objects.get(title=basetitle)
    except Photo.DoesNotExist:
        p = Photo(title=basetitle)

    p.image = instance.file.file
    p.save()

    fld = instance.folder

    if fld is not None and fgs.AUTOCREATE and is_gallery_folder(fld.pretty_logical_path)[0]:
        try:
            gal = get_cached_object(Gallery, slug=slug_from_folder(fld))

            if GalleryItem.objects.filter(gallery=gal, photo=p).count() == 0:
                GalleryItem.objects.create(
                    gallery=gal,
                    photo=p,
                    order=fld.file_count
                )
        except Gallery.DoesNotExist:
            pass
Esempio n. 15
0
 def url(self):
     if not self.slug:
         return ''
     url = reverse('ella_exports_by_slug', args={'slug': self.slug,})
     # prepend the domain if it doesn't match current Site
     site = get_cached_object(Site, pk=self.category.site_id)
     return 'http://' + site.domain + url
Esempio n. 16
0
File: models.py Progetto: Almad/ella
    def _get_template_list(self):
        """
        slightly patched version of Box._get_template_list
        TODO: ugly ;)
        """
        t_list = []
        if hasattr(self.obj, 'category_id') and self.obj.category_id:
            from ella.core.models import Category
            cat = get_cached_object(Category, pk=self.obj.category_id)
            base_path = 'box/category/%s/content_type/%s.%s/' % (cat.path, self.obj._meta.app_label, self.obj._meta.module_name)
            if hasattr(self.obj, 'slug'):
                t_list.append(base_path + 'attachment_type/%s/%s/%s.html' % (self.obj.type.name, self.obj.slug, self.box_type,))
                t_list.append(base_path + '%s/%s.html' % (self.obj.slug, self.box_type,))
            t_list.append(base_path + 'attachment_type/%s/%s.html' % (self.obj.type.name, self.box_type,))
            t_list.append(base_path + 'attachment_type/%s/box.html' % self.obj.type.name)
            t_list.append(base_path + '%s.html' % (self.box_type,))
            t_list.append(base_path + 'box.html')

        base_path = 'box/content_type/%s.%s/' % (self.obj._meta.app_label, self.obj._meta.module_name)
        if hasattr(self.obj, 'slug'):
            t_list.append(base_path + 'attachment_type/%s/%s/%s.html' % (self.obj.type.name, self.obj.slug, self.box_type,))
            t_list.append(base_path + '%s/%s.html' % (self.obj.slug, self.box_type,))
        t_list.append(base_path + 'attachment_type/%s/%s.html' % (self.obj.type.name, self.box_type,))
        t_list.append(base_path + 'attachment_type/%s/box.html' % self.obj.type.name)
        t_list.append(base_path + '%s.html' % (self.box_type,))
        t_list.append(base_path + 'box.html')

        t_list.append('box/attachment_type/%s/%s.html' % (self.obj.type.name, self.box_type))
        t_list.append('box/attachment_type/%s/box.html' % self.obj.type.name)
        t_list.append('box/%s.html' % self.box_type)
        t_list.append('box/box.html')

        return t_list
Esempio n. 17
0
def image_post_delete(sender, instance, **kwargs):
    basetitle = instance.original_filename

    try:
        p = get_cached_object(Photo, title=basetitle)
        p.delete()
    except Photo.DoesNotExist:
        pass
Esempio n. 18
0
 def get_photo(self):
     " Get object's Photo. "
     if not hasattr(self, '_photo'):
         try:
             self._photo = get_cached_object(Photo, pk=self.photo_id)
         except Photo.DoesNotExist:
             self._photo = None
     return self._photo
Esempio n. 19
0
    def get_photo_in_format(self, photo, format, include_original=True):
        if isinstance(photo, Photo):
            photo_id = photo.id
        else:
            photo_id = photo
            photo = None

        if not isinstance(format, Format):
            format = Format.objects.get_for_name(format)

        if redis:
            p = redis.pipeline()
            p.hgetall(REDIS_PHOTO_KEY % photo_id)
            p.hgetall(REDIS_FORMATTED_PHOTO_KEY % (photo_id, format.id))
            original, formatted = p.execute()
            if formatted:
                if include_original:
                    formatted['original'] = original
                return formatted

        if not photo:
            try:
                photo = get_cached_object(Photo, pk=photo_id)
            except Photo.DoesNotExist:
                return format.get_blank_img()

        try:
            formated_photo = get_cached_object(FormatedPhoto, photo=photo, format=format)
        except FormatedPhoto.DoesNotExist:
            try:
                # use get or create because there is a possible race condition here
                # we don't want to JUST use get_or_create to go through cache 99.9% of the time
                formated_photo, _ = self.get_or_create(photo=photo, format=format)
            except (IOError, SystemError) as e:
                log.warning("Cannot create formatted photo due to %s.", e)
                return format.get_blank_img()

        info = {
            'url': formated_photo.url,
            'width': formated_photo.width,
            'height': formated_photo.height,
        }
        if include_original:
            info['original'] = photo.get_image_info()

        return info
Esempio n. 20
0
File: models.py Progetto: whit/ella
    def _get_template_list(self):
        """
        slightly patched version of Box._get_template_list
        TODO: ugly ;)
        """
        t_list = []
        if hasattr(self.obj, 'category_id') and self.obj.category_id:
            from ella.core.models import Category
            cat = get_cached_object(Category, pk=self.obj.category_id)
            base_path = 'box/category/%s/content_type/%s.%s/' % (
                cat.path, self.obj._meta.app_label, self.obj._meta.module_name)
            if hasattr(self.obj, 'slug'):
                t_list.append(base_path + 'attachment_type/%s/%s/%s.html' % (
                    self.obj.type.name,
                    self.obj.slug,
                    self.box_type,
                ))
                t_list.append(base_path + '%s/%s.html' % (
                    self.obj.slug,
                    self.box_type,
                ))
            t_list.append(base_path + 'attachment_type/%s/%s.html' % (
                self.obj.type.name,
                self.box_type,
            ))
            t_list.append(base_path +
                          'attachment_type/%s/box.html' % self.obj.type.name)
            t_list.append(base_path + '%s.html' % (self.box_type, ))
            t_list.append(base_path + 'box.html')

        base_path = 'box/content_type/%s.%s/' % (self.obj._meta.app_label,
                                                 self.obj._meta.module_name)
        if hasattr(self.obj, 'slug'):
            t_list.append(base_path + 'attachment_type/%s/%s/%s.html' % (
                self.obj.type.name,
                self.obj.slug,
                self.box_type,
            ))
            t_list.append(base_path + '%s/%s.html' % (
                self.obj.slug,
                self.box_type,
            ))
        t_list.append(base_path + 'attachment_type/%s/%s.html' % (
            self.obj.type.name,
            self.box_type,
        ))
        t_list.append(base_path +
                      'attachment_type/%s/box.html' % self.obj.type.name)
        t_list.append(base_path + '%s.html' % (self.box_type, ))
        t_list.append(base_path + 'box.html')

        t_list.append('box/attachment_type/%s/%s.html' %
                      (self.obj.type.name, self.box_type))
        t_list.append('box/attachment_type/%s/box.html' % self.obj.type.name)
        t_list.append('box/%s.html' % self.box_type)
        t_list.append('box/box.html')

        return t_list
Esempio n. 21
0
 def get_percentage(self):
     """
     Compute and return percentage representation of choice object to its question's total votes
     """
     t = get_cached_object(Question, pk=self.question_id).get_total_votes()
     p = 0
     if self.votes:
         p = int((100.0/t)*self.votes)
     return p
Esempio n. 22
0
 def load_template_source(self, template_name, template_dirs=None):
     " template loader conforming to django's API "
     try:
         t = get_cached_object(CT_DBTEMPLATE,
                               name=template_name,
                               site__id=settings.SITE_ID)
         return (t.get_text(), template_name)
     except DbTemplate.DoesNotExist:
         raise TemplateDoesNotExist, template_name
Esempio n. 23
0
    def clean(self):
        """registered user validation and other cleaning"""
        from django.forms.util import ValidationError

        try:
            # target_ct, target_id validation
            target_ct = self.init_props['target_ct']
            target_id = self.init_props['target_id']
            target_ct = get_cached_object(ContentType, pk=target_ct)
            target_object = get_cached_object(target_ct, pk=target_id)

            self.cleaned_data['target_ct'] = target_ct
            self.cleaned_data['target_id'] = target_id
            self.cleaned_data['target_object'] = target_object
        except models.ObjectDoesNotExist:
            raise ValidationError, _("Target object does not exist.")

        return self.cleaned_data
Esempio n. 24
0
File: forms.py Progetto: Almad/ella
    def clean(self):
        """registered user validation and other cleaning"""
        from django.forms.util import ValidationError

        try:
            # target_ct, target_id validation
            target_ct = self.init_props['target_ct']
            target_id = self.init_props['target_id']
            target_ct = get_cached_object(ContentType, pk=target_ct)
            target_object = get_cached_object(target_ct, pk=target_id)

            self.cleaned_data['target_ct'] = target_ct
            self.cleaned_data['target_id'] = target_id
            self.cleaned_data['target_object'] = target_object
        except models.ObjectDoesNotExist:
            raise ValidationError, _("Target object does not exist.")

        return self.cleaned_data
Esempio n. 25
0
 def url(self):
     if self.link:
         return self.link
     if not self.slug:
         return ''
     url = reverse('ella_exports_by_slug', args=(self.slug, ))
     # prepend the domain if it doesn't match current Site
     site = get_cached_object(Site, pk=self.category.site_id)
     return 'http://' + site.domain + url
Esempio n. 26
0
File: forms.py Progetto: whit/ella
    def set_init_props(self, data=None, init_props=defaults.INIT_PROPS):
        """
        set initial form properties
        form is created from data, if it is bound
        from init_props, if not bound
        from options saved in database, if any
        """
        if data:
            # don't want MultiValueDict here
            init_props = dict(zip(data.keys(), data.values()))

        # copy defalt settings
        self.init_props = defaults.INIT_PROPS.copy()

        # set actual time
        now = int(time.time())
        self.init_props['timestamp'] = now
        self.init_props['timestamp_min'] = now - defaults.FORM_TIMEOUT

        # update defaults with form init params
        self.init_props.update(init_props)

        target_ct, target_id = None, None
        try:
            target_ct, target_id = self.init_props['target'].split(defaults.OPTS_DELIM)
            target_ct, target_id = int(target_ct), int(target_id)
            target_contenttype = get_cached_object(ContentType, pk=target_ct)
            self.target_object = get_cached_object(target_contenttype, pk=target_id)
        except ValueError:
            pass
        except models.ObjectDoesNotExist:
            pass

        # defaults for this instance
        self.init_props['target_ct'] = target_ct
        self.init_props['target_id'] = target_id

        # find any options updates in database
        self.check_db_options(target_ct, target_id)

        # defaults continue
        self.OPTIONS = self.init_props['options'].split(defaults.OPTS_DELIM)
        self.init_props['gonzo'] = self.get_hash(self.init_props['options'], self.init_props['target'], self.init_props['timestamp'])
Esempio n. 27
0
File: models.py Progetto: whit/ella
def applicable_sites(user, permission=None):
    q = SiteUserRole.objects.filter(user=user).distinct().values('site')
    if permission:
        app_label, code = permission.split('.', 1)
        perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)
        q = q.filter(group__permissions=perm)
    else:
        # take any permission
        q = q.filter(group__permissions__id__isnull=False)
    return [ d['site'] for d in q ]
Esempio n. 28
0
    def render(self, context):
        try:
            cat = template.Variable(self.category).resolve(context)
            if not isinstance(cat, Category):
                cat = get_cached_object(Category,
                                        site=settings.SITE_ID,
                                        slug=self.category)
        except (template.VariableDoesNotExist, Category.DoesNotExist):
            cat = get_cached_object(Category,
                                    site=settings.SITE_ID,
                                    tree_parent__isnull=True)

        try:
            pos = Position.objects.get_active_position(cat, self.position,
                                                       self.nofallback)
        except Position.DoesNotExist:
            return ''

        return pos.render(context, self.nodelist, self.box_type)
Esempio n. 29
0
    def render(self, context):
        try:
            cat = template.Variable(self.category).resolve(context)
            if not isinstance(cat, Category):
                cat = get_cached_object(Category,
                                        site=settings.SITE_ID,
                                        slug=self.category)
        except (template.VariableDoesNotExist, Category.DoesNotExist):
            cat = get_cached_object(Category,
                                    site=settings.SITE_ID,
                                    tree_parent__isnull=True)

        for pos in self.positions:
            try:
                Position.objects.get_active_position(cat, pos, self.nofallback)
                return self.nodelist_true.render(context)
            except Position.DoesNotExist:
                pass
        return self.nodelist_false.render(context)
Esempio n. 30
0
File: models.py Progetto: whit/ella
 def points(self):
     """
     Parse choices represented as a string and returns reached points count
     """
     points = 0
     for q in self.choices.split('|'):
         vs = q.split(':')
         for v in vs[1].split(','):
             points += get_cached_object(Choice, pk=v).points
     return points
Esempio n. 31
0
def applicable_sites(user, permission=None):
    q = SiteUserRole.objects.filter(user=user).distinct().values('site')
    if permission:
        app_label, code = permission.split('.', 1)
        perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)
        q = q.filter(group__permissions=perm)
    else:
        # take any permission
        q = q.filter(group__permissions__id__isnull=False)
    return [ d['site'] for d in q ]
Esempio n. 32
0
 def points(self):
     """
     Parse choices represented as a string and returns reached points count
     """
     points = 0
     for q in self.choices.split('|'):
         vs = q.split(':')
         for v in vs[1].split(','):
             points += get_cached_object(Choice, pk=v).points
     return points
Esempio n. 33
0
File: forms.py Progetto: rajeev/ella
    def set_init_props(self, data=None, init_props=defaults.INIT_PROPS):
        """
        set initial form properties
        form is created from data, if it is bound
        from init_props, if not bound
        from options saved in database, if any
        """
        if data:
            # don't want MultiValueDict here
            init_props = dict(zip(data.keys(), data.values()))

        # copy defalt settings
        self.init_props = defaults.INIT_PROPS.copy()

        # set actual time
        now = int(time.time())
        self.init_props['timestamp'] = now
        self.init_props['timestamp_min'] = now - defaults.FORM_TIMEOUT

        # update defaults with form init params
        self.init_props.update(init_props)

        target_ct, target_id = None, None
        try:
            target_ct, target_id = self.init_props['target'].split(defaults.OPTS_DELIM)
            target_ct, target_id = int(target_ct), int(target_id)
            target_contenttype = get_cached_object(ContentType, pk=target_ct)
            self.target_object = get_cached_object(target_contenttype, pk=target_id)
        except ValueError:
            pass
        except models.ObjectDoesNotExist:
            pass

        # defaults for this instance
        self.init_props['target_ct'] = target_ct
        self.init_props['target_id'] = target_id

        # find any options updates in database
        self.check_db_options(target_ct, target_id)

        # defaults continue
        self.OPTIONS = self.init_props['options'].split(defaults.OPTS_DELIM)
        self.init_props['gonzo'] = self.get_hash(self.init_props['options'], self.init_props['target'], self.init_props['timestamp'])
Esempio n. 34
0
def has_site_permission(user, model, site, permission):
    if user.has_perm(permission):
        return True

    app_label, code = permission.split('.', 1)
    perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)

    if SiteUserRole.objects.filter(site=site, user=user, group__permissions=perm).count():
        return True

    return False
Esempio n. 35
0
    def get(self, request, *args, **kwargs):
        if 'slug' not in kwargs:
            raise Http404

        # Compatibility with `paginator` tag.
        if 'p' in request.GET:
            self.kwargs.update({'page': request.GET['p']})

        self.author = get_cached_object(Author, slug=kwargs['slug'])

        return super(AuthorView, self).get(request, *args, **kwargs)
Esempio n. 36
0
File: views.py Progetto: Pheox/ella
    def get(self, request, *args, **kwargs):
        if "slug" not in kwargs:
            raise Http404

        # Compatibility with `paginator` tag.
        if "p" in request.GET:
            self.kwargs.update({"page": request.GET["p"]})

        self.author = get_cached_object(Author, slug=kwargs["slug"])

        return super(AuthorView, self).get(request, *args, **kwargs)
Esempio n. 37
0
File: views.py Progetto: Pheox/ella
    def get(self, request, *args, **kwargs):
        if 'slug' not in kwargs:
            raise Http404

        # Compatibility with `paginator` tag.
        if 'p' in request.GET:
            self.kwargs.update({'page': request.GET['p']})

        self.author = get_cached_object(Author, slug=kwargs['slug'])

        return super(AuthorView, self).get(request, *args, **kwargs)
Esempio n. 38
0
File: models.py Progetto: whit/ella
def has_site_permission(user, model, site, permission):
    if user.has_perm(permission):
        return True

    app_label, code = permission.split('.', 1)
    perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)

    if SiteUserRole.objects.filter(site=site, user=user, group__permissions=perm).count():
        return True

    return False
Esempio n. 39
0
File: models.py Progetto: whit/ella
    def get_percentage(self):
        """
        Compute and return percentage representation of choice object to its question's total votes
        """
        if hasattr(self, 'percentage'):
            return self.percentage

        t = get_cached_object(Question, pk=self.question_id).get_total_votes()
        p = 0
        if self.votes:
            p = int((100.0 / t) * self.votes)
        return p
Esempio n. 40
0
 def get_absolute_url(self):
     if not self.tree_parent_id:
         url = reverse('root_homepage')
     else:
         url = reverse('category_detail',
                       kwargs={
                           'category': self.tree_path,
                       })
     if self.site_id != settings.SITE_ID:
         # prepend the domain if it doesn't match current Site
         site = get_cached_object(Site, pk=self.site_id)
         return 'http://' + site.domain + url
     return url
Esempio n. 41
0
 def save(self, commit=True):
     contestant = super(ContestantForm, self).save(commit=False)
     contestant.contest = self.contest
     if self.request.user.is_authenticated():
         contestant.user = self.request.user
     if commit:
         contestant.save()
         for q, f in self.qforms:
             ch_pk = f.cleaned_data['choice']
             if ch_pk:
                 if isinstance(ch_pk, (tuple, list)):
                     ch_pk, ans = ch_pk
                     if not q.is_required and not ans.strip():
                         continue
                     data = dict(contestant=contestant,
                                 choice=get_cached_object(Choice, pk=ch_pk),
                                 answer=ans.strip())
                 else:
                     data = dict(contestant=contestant,
                                 choice=get_cached_object(Choice, pk=ch_pk))
                 Answer.objects.create(**data)
     return contestant
Esempio n. 42
0
    def clean(self):
        """Checks if all objects exist and searches for duplicate references to the same object in one gallery."""
        if not self.is_valid():
            return

        obj = self.instance
        items = set([])

        for i,d in ((i,d) for i,d in enumerate(self.cleaned_data) if d):
            # TODO: why cleaned data does not have target_ct_id prop?
            target = (d['target_ct'].id, d['target_id'],)
            # check if object exists
            try:
                # TODO: wouldn't it be better not to take objects from cache?
                obj = get_cached_object(get_cached_object(ContentType, pk=d['target_ct'].id), pk=d['target_id'])
            except ObjectDoesNotExist:
                raise forms.ValidationError, ugettext('%s with id %i does not exist') % (d['target_ct'], d['target_id'])
            # check for duplicities
            if target in items:
                raise forms.ValidationError, ugettext('There are two references to %s in this gallery') % obj
            items.add(target)

        return self.cleaned_data
Esempio n. 43
0
    def get_for_object(self, obj):
        if hasattr(obj, 'app_data'):
            return obj.app_data.get('comments', DEFAULT_COMMENT_OPTIONS)

        ct = ContentType.objects.get_for_model(obj)
        try:
            coo = get_cached_object(CommentOptionsObject, target_ct=ct, target_id=obj.pk)
            return {
                'blocked': coo.blocked,
                'premoderated': coo.premoderated,
                'check_profanities': coo.check_profanities,
            }
        except CommentOptionsObject.DoesNotExist:
            return DEFAULT_COMMENT_OPTIONS
Esempio n. 44
0
    def clean(self):
        if not self.category or not self.name:
            return

        if self.target_ct:
            try:
                get_cached_object(self.target_ct, pk=self.target_id)
            except self.target_ct.model_class().DoesNotExist:
                raise ValidationError(_('This position doesn\'t point to a valid object.'))

        qset = Position.objects.filter(category=self.category, name=self.name)

        if self.pk:
            qset = qset.exclude(pk=self.pk)

        if self.active_from:
            qset = qset.exclude(active_till__lte=self.active_from)

        if self.active_till:
            qset = qset.exclude(active_from__gt=self.active_till)

        if qset.count():
            raise ValidationError(_('There already is a postion for %(cat)s named %(name)s fo this time.') % {'cat': self.category, 'name': self.name})
Esempio n. 45
0
File: forms.py Progetto: whit/ella
    def clean(self):
        """registered user validation and other cleaning"""
        if 'username' in self.init_props and 'password' in self.init_props:
            user = authenticate(username=self.init_props['username'], password=self.init_props['password'])
            if not user:
                raise ValidationError, _("Invalid user.")
            elif BannedUser.objects.filter(
                    target_ct=self.init_props['target_ct'],
                    target_id=self.init_props['target_id'],
                    user=user
                ).count():
                raise ValidationError, _("Banned user.")
            else:
                self.cleaned_data['user'] = user

        try:
            # target_ct, target_id validation
            target_ct = self.init_props['target_ct']
            target_id = self.init_props['target_id']
            target_ct = get_cached_object(ContentType, pk=target_ct)
            target_object = get_cached_object(target_ct, pk=target_id)

            self.cleaned_data['target_ct'] = target_ct
            self.cleaned_data['target_id'] = target_id
            self.cleaned_data['target_object'] = target_object
        except models.ObjectDoesNotExist:
            raise ValidationError, _("Target object does not exist.")

        parent = self.cleaned_data['parent']
        if parent:
            try:
                self.cleaned_data['parent'] = get_cached_object(Comment, pk=parent, target_ct=target_ct, target_id=target_id)
            except models.ObjectDoesNotExist:
                raise ValidationError, _("You are responding to a non-existent comment.")

        return self.cleaned_data
Esempio n. 46
0
File: forms.py Progetto: rajeev/ella
    def clean(self):
        """registered user validation and other cleaning"""
        if 'username' in self.init_props and 'password' in self.init_props:
            user = authenticate(username=self.init_props['username'], password=self.init_props['password'])
            if not user:
                raise ValidationError, _("Invalid user.")
            elif BannedUser.objects.filter(
                    target_ct=self.init_props['target_ct'],
                    target_id=self.init_props['target_id'],
                    user=user
                ).count():
                raise ValidationError, _("Banned user.")
            else:
                self.cleaned_data['user'] = user

        try:
            # target_ct, target_id validation
            target_ct = self.init_props['target_ct']
            target_id = self.init_props['target_id']
            target_ct = get_cached_object(ContentType, pk=target_ct)
            target_object = get_cached_object(target_ct, pk=target_id)

            self.cleaned_data['target_ct'] = target_ct
            self.cleaned_data['target_id'] = target_id
            self.cleaned_data['target_object'] = target_object
        except models.ObjectDoesNotExist:
            raise ValidationError, _("Target object does not exist.")

        parent = self.cleaned_data['parent']
        if parent:
            try:
                self.cleaned_data['parent'] = get_cached_object(Comment, pk=parent, target_ct=target_ct, target_id=target_id)
            except models.ObjectDoesNotExist:
                raise ValidationError, _("You are responding to a non-existent comment.")

        return self.cleaned_data
Esempio n. 47
0
 def get_absolute_url(self):
     if not self.tree_parent_id:
         url = reverse('root_homepage')
     else:
         url = reverse(
                 'category_detail',
                 kwargs={
                     'category' : self.tree_path,
                 }
             )
     if self.site_id != settings.SITE_ID:
         # prepend the domain if it doesn't match current Site
         site = get_cached_object(Site, pk=self.site_id)
         return 'http://' + site.domain + url
     return url
Esempio n. 48
0
def has_category_permission(user, model, category, permission):
    if user.has_perm(permission):
        return True

    app_label, code = permission.split('.', 1)
    perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)

    if CategoryUserRole.objects.filter(
            category=category,
            user=user,
            group__permissions=perm
).count():
        return True

    # fallback to site permissions
    return has_site_permission(user, model, category.site_id, permission)
Esempio n. 49
0
File: models.py Progetto: whit/ella
def has_category_permission(user, model, category, permission):
    if user.has_perm(permission):
        return True

    app_label, code = permission.split('.', 1)
    perm = get_cached_object(Permission, content_type__app_label=app_label, codename=code)

    if CategoryUserRole.objects.filter(
            category=category,
            user=user,
            group__permissions=perm
        ).count():
        return True

    # fallback to site permissions
    return has_site_permission(user, model, category.site_id, permission)
Esempio n. 50
0
File: hits.py Progetto: whit/ella
    def render(self, context):
        if self.pk:
            try:
                place = get_cached_object(Placement, pk=self.place)
            except Placement.DoesNotExist:
                return ''
        else:
            try:
                place = Variable(self.place).resolve(context)
            except VariableDoesNotExist:
                return ''

        if core_settings.DOUBLE_RENDER and 'SECOND_RENDER' not in context:
            return '{%% load hits %%}{%% hitcount for pk %(place_pk)s %%}' % {
                'place_pk': place.pk,
            }
        HitCount.objects.hit(place)
        return ''
Esempio n. 51
0
    def render(self, context):
        if self.pk:
            try:
                place = get_cached_object(Placement, pk=self.place)
            except Placement.DoesNotExist:
                return ''
        else:
            try:
                place = Variable(self.place).resolve(context)
            except VariableDoesNotExist:
                return ''

        if DOUBLE_RENDER and 'SECOND_RENDER' not in context:
            return '{%% load hits %%}{%% hitcount for pk %(place_pk)s %%}' % {
                'place_pk' : place.pk,
            }
        HitCount.objects.hit(place)
        return ''
Esempio n. 52
0
    def main_placement(self):
        " Return object's main placement, that is the object's placement in its primary category "
        if hasattr(self, '_main_placement'):
            return self._main_placement

        current_site = Site.objects.get_current()

        # TODO: what if have got multiple listings on one site?
        placements = get_cached_list(
            Placement,
            publishable=self.pk,
            category__site=current_site,
        )
        if placements:
            if len(placements) == 1:
                self._main_placement = placements[0]
            else:
                # with multiple listings, one with first publish_from
                # primary
                first_published = None
                for placement in placements:
                    if first_published is None or placement.publish_from < first_published.publish_from:
                        first_published = placement

                assert first_published is not None
                self._main_placement = first_published

        else:
            try:
                # TODO - check and if we don't have category, take the only placement that exists in current site
                self._main_placement = get_cached_object(
                    Placement, publishable=self.pk, category=self.category_id)
            except Placement.DoesNotExist:
                self._main_placement = None

        if self._main_placement:
            # preserve memory and SQL queries by using the same object
            self._main_placement.publishable = self

        return self._main_placement
Esempio n. 53
0
def parse_object_definition(tagname, od_tokens):
    """parse object definition tokens APP_LABEL.MODEL_NAME with FIELD VALUE"""
    if len(od_tokens) == 1:
        obj = od_tokens[0]
    elif len(od_tokens) == 4:
        model = models.get_model(*od_tokens[0].split('.'))
        if model is None:
            raise template.TemplateSyntaxError, "%r tag: Model %r does not exist" % (
                tagname, od_tokens[0])

        try:
            obj = get_cached_object(model,
                                    **{smart_str(od_tokens[2]): od_tokens[3]})
        except models.ObjectDoesNotExist:
            raise template.TemplateSyntaxError, "%r tag: Model %r with field %r equal to %r does not exist." % (
                tagname, od_tokens[0], od_tokens[2], od_tokens[3])
        except AssertionError:
            raise template.TemplateSyntaxError, "%r tag: Model %r with field %r equal to %r does not refer to a single object." % (
                tagname, od_tokens[0], od_tokens[2], od_tokens[3])
    else:
        raise template.TemplateSyntaxError, "%r tag: Object must be specified by 'APP_LABEL.MODEL_NAME with FIELD VALUE' or given directly" % tagname

    return obj
Esempio n. 54
0
 def last_comment(self):
     pk = redis.lindex(self._key, 0)
     if pk is None:
         return None
     return get_cached_object(FlatComment, pk=pk)
Esempio n. 55
0
 def get_comment(self, comment_id):
     c = get_cached_object(FlatComment, pk=comment_id)
     if not self._verify_own(c):
         raise FlatComment.DoesNotExist()
     return c
Esempio n. 56
0
 def author(self):
     if self.user_id:
         user = get_cached_object(User, pk=self.user_id)
         return user.username
     return self.nickname