Example #1
0
 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,
     }
Example #2
0
 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,
     }
Example #3
0
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))
Example #5
0
    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))
Example #6
0
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
Example #7
0
 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()
Example #8
0
 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()
Example #9
0
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
Example #10
0
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
Example #11
0
 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 ""
Example #13
0
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)