def get_displayfield_data(self, display_field, item): """ returns dictionary with data that will be processed by collection view to display an item as defined in display_field option. This method may be overriden in Collection subclasses. """ field_name = display_field.field_name if field_name == 'content_type_name': verbose_name = ugettext('Content type name') else: try: field = item._meta.get_field(field_name) verbose_name = field.verbose_name except models.FieldDoesNotExist: try: lang = fallback_language() field = item._meta.get_field(get_real_fieldname(field_name, lang)) verbose_name = unicode(field.verbose_name)[:-len(lang) - 1] except: # TODO: make this except not empty and discriminate errors return None return { 'name': verbose_name, 'field_name': field_name, 'show_label': display_field.show_label, 'value': _get_value(display_field, field_name, item), 'type': field.get_internal_type(), 'safe': display_field.safe, }
def get_displayfield_data(self, display_field, item): """ returns dictionary with data that will be processed by collection view to display an item as defined in display_field option. This method may be overriden in Collection subclasses. """ field_name = display_field.field_name if field_name == 'content_type_name': verbose_name = ugettext('Content type name') else: try: field = item._meta.get_field(field_name) verbose_name = field.verbose_name except models.FieldDoesNotExist: try: lang = fallback_language() field = item._meta.get_field( get_real_fieldname(field_name, lang)) verbose_name = unicode(field.verbose_name)[:-len(lang) - 1] except: # TODO: make this except not empty and discriminate errors return None return { 'name': verbose_name, 'field_name': field_name, 'show_label': display_field.show_label, 'value': _get_value(display_field, field_name, item), 'type': field.get_internal_type(), 'safe': display_field.safe, }
def add_south_trans_fields(frozen_models, trans_data): for model, field_data in trans_data.items(): for field_name, field_desc in field_data.items(): for real_field in get_real_fieldname_in_each_language(field_name): field_lang = get_field_language(real_field) real_field_desc = deepcopy(field_desc) if field_lang != fallback_language(): real_field_desc[2].update({'null': 'True', 'blank': 'True'}) frozen_models[model][real_field] = real_field_desc
def handle(self, *args, **options): """ command execution """ assume_yes = options.get('assume_yes', False) default_language = options.get('default_language', None) drop = options.get('drop', False) # set manual transaction management transaction.commit_unless_managed() transaction.enter_transaction_management() transaction.managed(True) self.cursor = connection.cursor() self.introspection = connection.introspection self.default_lang = default_language or fallback_language() all_models = get_models() found_db_change_fields = False for model in all_models: if hasattr(model._meta, 'translatable_fields'): model_full_name = '%s.%s' % (model._meta.app_label, model._meta.module_name) translatable_fields = get_all_translatable_fields(model, column_in_current_table=True) db_table = model._meta.db_table for field_name in translatable_fields: db_table_fields = self.get_table_fields(db_table) db_change_langs = list(set(list(self.get_db_change_languages(field_name, db_table_fields)) + [self.default_lang])) if db_change_langs: sql_sentences = self.get_sync_sql(field_name, db_change_langs, model, db_table_fields, drop=drop) if sql_sentences: found_db_change_fields = True print_db_change_langs(db_change_langs, field_name, model_full_name) execute_sql = ask_for_confirmation(sql_sentences, model_full_name, assume_yes) if execute_sql: print 'Executing SQL...', for sentence in sql_sentences: self.cursor.execute(sentence) # commit transaction.commit() print 'Done' else: print 'SQL not executed' if transaction.is_dirty(): transaction.commit() transaction.leave_transaction_management() if not found_db_change_fields: print '\nNo new translatable fields detected' if default_language: variable = 'TRANSMETA_DEFAULT_LANGUAGE' has_transmeta_default_language = getattr(settings, variable, False) if not has_transmeta_default_language: variable = 'LANGUAGE_CODE' if getattr(settings, variable) != default_language: print ('\n\nYou should change in your settings ' 'the %s variable to "%s"' % (variable, default_language))
def handle(self, *args, **options): """ command execution """ assume_yes = options.get('assume_yes', False) default_language = options.get('default_language', None) # set manual transaction management transaction.commit_unless_managed() transaction.enter_transaction_management() transaction.managed(True) self.cursor = connection.cursor() self.introspection = connection.introspection self.default_lang = default_language or fallback_language() all_models = get_models() found_db_change_fields = False for model in all_models: if hasattr(model._meta, 'translatable_fields'): model_full_name = '%s.%s' % (model._meta.app_label, model._meta.module_name) translatable_fields = get_all_translatable_fields(model, column_in_current_table=True) db_table = model._meta.db_table for field_name in translatable_fields: db_table_fields = self.get_table_fields(db_table) db_change_langs = list(set(list(self.get_db_change_languages(field_name, db_table_fields)) + [self.default_lang])) if db_change_langs: sql_sentences = self.get_sync_sql(field_name, db_change_langs, model, db_table_fields) if sql_sentences: found_db_change_fields = True print_db_change_langs(db_change_langs, field_name, model_full_name) execute_sql = ask_for_confirmation(sql_sentences, model_full_name, assume_yes) if execute_sql: print 'Executing SQL...', for sentence in sql_sentences: self.cursor.execute(sentence) # commit transaction.commit() print 'Done' else: print 'SQL not executed' if transaction.is_dirty(): transaction.commit() transaction.leave_transaction_management() if not found_db_change_fields: print '\nNo new translatable fields detected' if default_language: variable = 'TRANSMETA_DEFAULT_LANGUAGE' has_transmeta_default_language = getattr(settings, variable, False) if not has_transmeta_default_language: variable = 'LANGUAGE_CODE' if getattr(settings, variable) != default_language: print ('\n\nYou should change in your settings ' 'the %s variable to "%s"' % (variable, default_language))
def add_south_trans_fields(frozen_models, trans_data): for model, field_data in trans_data.items(): for field_name, field_desc in field_data.items(): for real_field in get_real_fieldname_in_each_language(field_name): field_lang = get_field_language(real_field) real_field_desc = deepcopy(field_desc) if field_lang != fallback_language(): real_field_desc[2].update({ 'null': 'True', 'blank': 'True' }) frozen_models[model][real_field] = real_field_desc
def make_single_item(self, feed_item, entry): feed_item.item_cached = base64.encodestring(pickle.dumps(entry)) if self.order_by: feed_item.order_field = getattr(entry, self.order_by, None) else: feed_item.order_field = None if self.group_by: feed_item.group_field = getattr(entry, self.group_by, None) else: feed_item.group_field = None title_field = self.title_field or 'title' field_name = get_real_fieldname('name', fallback_language()) setattr(feed_item, field_name, getattr(entry, title_field, getattr(entry, 'id', None))) feed_item.excluded = self.is_excluded(entry) feed_item.save()
def handle_feed_item_pre_save(sender, instance, **kwargs): field_name = get_real_fieldname('name', fallback_language()) name = getattr(instance, field_name, None) if not name: return slug = defaultfilters.slugify(name) slug_num = slug n = 2 filter_param = 'slug__exact' filters = {filter_param: slug_num} exclude = {} if instance.basecontent_ptr: exclude = {'id': instance.basecontent_ptr.id} while BaseContent.objects.filter(**filters).exclude(**exclude).count(): slug_num = slug + u'-%s' % n filters[filter_param] = slug_num n += 1 instance.slug = slug_num
def handle(self, *args, **options): """ command execution """ # assume_yes = options.get('assume_yes', False) # for each language default_language = fallback_language() for lang in get_languages(): lang_code = lang[LANGUAGE_CODE] if lang_code == default_language: continue for model in REGISTRY: fields = REGISTRY[model].values() total = model.objects.count() current = 0 for instance in model.objects.all(): current += 1 save = False # for each field in this model for field in fields: # get the real field name (with language suffix) realname = get_real_fieldname(field.name, lang_code) # original language original = get_real_fieldname(field.name, default_language) # original value original_value = getattr(instance, original) # get current value value = getattr(instance, realname) if value == None: value = "" new_value = KeyValue.objects.lookup( original_value, lang_code) # if it's not the default message if new_value != value: # if it's not the same value setattr(instance, realname, new_value) save = True print "(Lang %s) Processed %s model, %04d / %04d" % ( lang_code, model, current, total), if save: instance.save() print " (changed)" else: print ""
def handle(self, *args, **options): """ command execution """ # assume_yes = options.get('assume_yes', False) # for each language default_language = fallback_language() for lang in get_languages(): lang_code = lang[LANGUAGE_CODE] if lang_code == default_language: continue for model in REGISTRY: fields = REGISTRY[model].values() total = model.objects.count() current = 0 for instance in model.objects.all(): current += 1 save = False # for each field in this model for field in fields: # get the real field name (with language suffix) realname = get_real_fieldname(field.name, lang_code) # original language original = get_real_fieldname(field.name, default_language) # original value original_value = getattr(instance, original) # get current value value = getattr(instance, realname) if value == None: value = "" new_value = KeyValue.objects.lookup(original_value, lang_code) # if it's not the default message if new_value != value: # if it's not the same value setattr(instance, realname, new_value) save = True print "(Lang %s) Processed %s model, %04d / %04d" % (lang_code, model, current, total), if save: instance.save() print " (changed)" else: print ""
def populate_workflow(workflow): """ Populate the workflow with states, transitions and permissions """ from merengue.perms.models import Role, Permission name_fields = get_real_fieldname_in_each_language('name') old_lang = get_language() activate(fallback_language()) for field in name_fields: value = getattr(workflow, field, True) if value == '': setattr(workflow, field, None) data = {get_real_fieldname('name'): ugettext('Draft')} draft = State.objects.create(slug='draft', workflow=workflow, **data) draft.set_permissions({ perms.ANONYMOUS_ROLE_SLUG: ('view', ), perms.OWNER_ROLE_SLUG: ('edit', 'delete', 'can_draft', 'can_pending', ), perms.REVIEWER_ROLE_SLUG: ('edit', 'delete', 'can_draft', 'can_pending', 'can_published'), }) data = {get_real_fieldname('name'): ugettext('Pending')} pending = State.objects.create(slug='pending', workflow=workflow, **data) pending.set_permissions({ perms.ANONYMOUS_ROLE_SLUG: ('view', ), perms.OWNER_ROLE_SLUG: ('edit', 'delete', 'can_draft', 'can_pending', ), perms.REVIEWER_ROLE_SLUG: ('edit', 'delete', 'can_draft', 'can_pending', 'can_published'), }) data = {get_real_fieldname('name'): ugettext('Published')} published = State.objects.create(slug='published', workflow=workflow, **data) published.set_permissions({ perms.ANONYMOUS_ROLE_SLUG: ('view', ), perms.OWNER_ROLE_SLUG: (), perms.REVIEWER_ROLE_SLUG: ('edit', 'delete', 'can_draft', 'can_pending', 'can_published'), }) data = {get_real_fieldname('name'): ugettext('Set as pending')} pending_permission = Permission.objects.get(codename='can_pending') set_as_pending = Transition.objects.create( slug='set-as-pending', workflow=workflow, destination=pending, permission=pending_permission, **data) data = {get_real_fieldname('name'): ugettext('Set as draft')} draft_permission = Permission.objects.get(codename='can_draft') set_as_draft = Transition.objects.create( slug='set-as-draft', workflow=workflow, destination=draft, permission=draft_permission, **data) data = {get_real_fieldname('name'): ugettext('Publish')} publish_permission = Permission.objects.get(codename='can_published') publish = Transition.objects.create( slug='publish', workflow=workflow, destination=published, permission=publish_permission, **data) draft.transitions.add(set_as_pending) draft.transitions.add(publish) pending.transitions.add(publish) pending.transitions.add(set_as_draft) published.transitions.add(set_as_pending) published.transitions.add(set_as_draft) try: anonymous_role = Role.objects.get(slug=perms.ANONYMOUS_ROLE_SLUG) except Role.DoesNotExist: # maybe the role does not exist (for example when tests are running) anonymous_role = Role.objects.create(id=1, slug=perms.ANONYMOUS_ROLE_SLUG) try: view_permission = Permission.objects.get(codename='view') except Permission.DoesNotExist: # maybe the permission does not exist (for example when tests are running) view_permission = Permission.objects.create(id=1, codename='view') StatePermissionRelation.objects.create( state=published, permission=view_permission, role=anonymous_role, ) for codename in ('view', 'edit', 'delete', 'can_draft', 'can_pending', 'can_published', 'manage_category', 'manage_link', 'manage_menu', 'manage_block', ): WorkflowPermissionRelation.objects.create( permission=Permission.objects.get(codename=codename), workflow=workflow, ) workflow.initial_state = draft workflow.save() activate(old_lang)