Example #1
0
    def create_new(cls, newobj, args, kwargs):
        """ This method is called upon user-called constructor invocation
            as it is set by pufferfish as the 'init' instance event callback
            http://www.sqlalchemy.org/docs/orm/events.html
            #sqlalchemy.orm.events.InstanceEvents.init
        """
        try:
            session = kwargs['session']
        except KeyError:
            return

        if cls.__name__.lower() == 'file':
            max_files = Setting.get(session, 'max_files').value
            num_files = File.count(session, (File.discriminator == None))
            type_ = "files"

        else:
            max_files = Setting.get(session, 'max_images').value
            num_files = File.count(session,
                                   (File.discriminator.in_(('image',
                                                            'logo',
                                                            'banner',
                                                            'background'))))
            type_ = 'images/banners/logos'

        log.debug("Current %s objects: %d, max: %d",
                  cls.__name__, num_files, max_files)
        if max_files > 0 and num_files >= max_files:
            raise QuotaError('Maximum number of {} reached'\
                             .format(type_))

        # TODO Check if disk space is reach
        super(File, cls).create_new(newobj, args, kwargs)
Example #2
0
    def enable(cls, session, id_, translation_lang_id):
        """ Enable the language 'id_'
            if the number of enabled languages did not reach 'max_languages',
            then create translations for that language:
            create translations for each NodeInfo
            from 'translation_lang_id' to 'lang_id'.
        """
        max_ = Setting.get(session, 'max_languages').value
        enabled = cls.count(session, Language.enabled == True)
        if enabled >= max_:
            msg = 'The maximum number of enabled languages was reached.'
            raise QuotaError(msg)

        language = cls.get(session, id_)
        language.enabled = True
        log.debug('Enabled language: %s', language)

        NodeInfo.create_translations(session,
                                     translation_lang_id,
                                     language)

        return language