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)
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