From 5ea0e8458e93483347c4db08166ed5e6cd9e34f8 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Sun, 16 Sep 2012 22:11:16 -0400 Subject: factored out the name prefix for the personal groups to just one place --- askbot/context.py | 5 ++--- askbot/forms.py | 2 +- askbot/management/commands/delete_unused_tags.py | 6 ------ askbot/models/__init__.py | 2 +- askbot/models/question.py | 22 +++++++++++----------- askbot/models/tag.py | 3 ++- askbot/models/user.py | 18 ++++++++++++++++++ askbot/views/commands.py | 15 ++++++--------- askbot/views/users.py | 6 +++--- 9 files changed, 44 insertions(+), 35 deletions(-) diff --git a/askbot/context.py b/askbot/context.py index 2dace3eb..1828ae11 100644 --- a/askbot/context.py +++ b/askbot/context.py @@ -59,9 +59,8 @@ def application_settings(request): } if askbot_settings.GROUPS_ENABLED: - groups = models.Group.objects.exclude( - name__startswith='_internal_' - ).values('id', 'name') + groups = models.Group.objects.exclude_personal() + groups = groups.values('id', 'name') group_list = [] for group in groups: group_slug = slugify(group['name']) diff --git a/askbot/forms.py b/askbot/forms.py index eb791595..8548683f 100644 --- a/askbot/forms.py +++ b/askbot/forms.py @@ -952,7 +952,7 @@ class CreateAskWidgetForm(forms.Form, FormWithHideableFields): from askbot.models import Tag super(CreateAskWidgetForm, self).__init__(*args, **kwargs) self.fields['group'] = forms.ModelChoiceField( - queryset=get_groups().exclude(name__startswith='_internal_'), + queryset=get_groups().exclude_personal(), required=False ) self.fields['tag'] = forms.ModelChoiceField(queryset=Tag.objects.get_content_tags(), diff --git a/askbot/management/commands/delete_unused_tags.py b/askbot/management/commands/delete_unused_tags.py index bc0b7d69..9bcf191b 100644 --- a/askbot/management/commands/delete_unused_tags.py +++ b/askbot/management/commands/delete_unused_tags.py @@ -14,11 +14,6 @@ class Command(NoArgsCommand): tags = tags.iterator() deleted_tags = list() for tag in ProgressBar(tags, total, message): - if tag.name == askbot_settings.GLOBAL_GROUP_NAME:#todo: temporary - continue - if tag.name.startswith('_internal_'): - continue - if not tag.threads.exists(): deleted_tags.append(tag.name) tag.delete() @@ -38,4 +33,3 @@ class Command(NoArgsCommand): print "Deleted." else: print "Did not find any." - diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 418a5dba..f5e67189 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -2249,7 +2249,7 @@ def user_get_primary_group(self): """ groups = self.get_groups(private=True) for group in groups: - if group.name.startswith('_internal_'): + if group.is_personal(): continue return group return None diff --git a/askbot/models/question.py b/askbot/models/question.py index 98a38c90..a4b3233a 100644 --- a/askbot/models/question.py +++ b/askbot/models/question.py @@ -25,7 +25,7 @@ from askbot.models.base import DraftContent, BaseQuerySetManager from askbot.models.tag import Tag, get_groups from askbot.models.post import Post, PostRevision from askbot.models.post import PostToGroup -from askbot.models.user import Group +from askbot.models.user import Group, PERSONAL_GROUP_NAME_PREFIX from askbot.models import signals from askbot import const from askbot.utils.lists import LazyList @@ -540,8 +540,8 @@ class Thread(models.Model): exclude_user=visitor ) groups = self.groups - ugroups = groups.filter(name__startswith='_internal_') - ggroups = groups.exclude(name__startswith='_internal_') + ugroups = groups.get_personal() + ggroups = groups.exclude_personal() sharing_info = { 'users': shared_users, @@ -559,7 +559,7 @@ class Thread(models.Model): thread=self, visibility=ThreadToGroup.SHOW_ALL_RESPONSES ) & models.Q( - group__name__startswith='_internal_' + group__name__startswith=PERSONAL_GROUP_NAME_PREFIX ) if exclude_user: @@ -585,13 +585,13 @@ class Thread(models.Model): def get_groups_shared_with(self, max_count=None): """returns query set of groups with whom thread is shared""" thread_groups = ThreadToGroup.objects.filter( - models.Q( - thread=self, - visibility=ThreadToGroup.SHOW_ALL_RESPONSES - ) & ~models.Q( - group__name__startswith='_internal_' - ) - ) + models.Q( + thread=self, + visibility=ThreadToGroup.SHOW_ALL_RESPONSES + ) & ~models.Q( + group__name__startswith=PERSONAL_GROUP_NAME_PREFIX + ) + ) if max_count: thread_groups = thread_groups[:max_count] diff --git a/askbot/models/tag.py b/askbot/models/tag.py index 4b635a2f..91fd354c 100644 --- a/askbot/models/tag.py +++ b/askbot/models/tag.py @@ -59,7 +59,8 @@ def filter_suggested_tags(tags): def format_personal_group_name(user): #todo: after migration of groups away from tags, #this function will be moved somewhere else - return '_internal_%s_%d' % (user.username, user.id) + from askbot.models.user import PERSONAL_GROUP_NAME_PREFIX as prefix + return '%s%s_%d' % (prefix, user.username, user.id) def is_preapproved_tag_name(tag_name): """true if tag name is in the category tree diff --git a/askbot/models/user.py b/askbot/models/user.py index 8314b28a..b8a88d73 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -20,6 +20,8 @@ from askbot.models.tag import clean_group_name#todo - delete this from askbot.forms import DomainNameField from askbot.utils.forms import email_is_allowed +PERSONAL_GROUP_NAME_PREFIX = '_internal_' + class ResponseAndMentionActivityManager(models.Manager): def get_query_set(self): response_types = const.RESPONSE_ACTIVITY_TYPES_FOR_DISPLAY @@ -388,6 +390,18 @@ class GroupMembership(AuthUserGroups): class GroupQuerySet(models.query.QuerySet): """Custom query set for the group""" + def exclude_personal(self): + """excludes the personal groups""" + return self.exclude( + name__startswith=PERSONAL_GROUP_NAME_PREFIX + ) + + def get_personal(self): + """filters for the personal groups""" + return self.filter( + name__startswith=PERSONAL_GROUP_NAME_PREFIX + ) + def get_for_user(self, user=None, private=False): if private: global_group = get_global_group() @@ -524,6 +538,10 @@ class Group(AuthGroup): return 'closed' + def is_personal(self): + """``True`` if the group is personal""" + return self.name.startswith(PERSONAL_GROUP_NAME_PREFIX) + def clean(self): """called in `save()` """ diff --git a/askbot/views/commands.py b/askbot/views/commands.py index bd04dd99..e967a080 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -536,8 +536,6 @@ def get_tag_list(request): tags = models.Tag.objects.filter( deleted = False, status = models.Tag.STATUS_ACCEPTED - ).exclude( - name__startswith='_internal_' ) tag_names = tags.values_list( @@ -652,13 +650,12 @@ def get_groups_list(request): """returns names of group tags for the autocomplete function""" global_group = get_global_group() - group_names = models.Group.objects.all().exclude( - name__startswith='_internal_' - ).exclude( - name=global_group.name - ).values_list( - 'name', flat = True - ) + groups = models.Group.objects.exclude_personal() + group_names = groups.exclude( + name=global_group.name + ).values_list( + 'name', flat = True + ) output = '\n'.join(group_names) return HttpResponse(output, mimetype = 'text/plain') diff --git a/askbot/views/users.py b/askbot/views/users.py index b0b0cfbe..7a3bc116 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -176,7 +176,7 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): #extra context for the groups if askbot_settings.GROUPS_ENABLED: #todo: cleanup this branched code after groups are migrated to auth_group - user_groups = get_groups().exclude(name__startswith='_internal_') + user_groups = get_groups().exclude_personal() if len(user_groups) <= 1: assert(user_groups[0].name == askbot_settings.GLOBAL_GROUP_NAME) user_groups = None @@ -482,7 +482,7 @@ def user_stats(request, user, context): badges.sort(key=operator.itemgetter(1), reverse=True) user_groups = models.Group.objects.get_for_user(user = user) - user_groups = user_groups.exclude(name__startswith='_internal_') + user_groups = user_groups.exclude_personal() global_group = get_global_group() user_groups = user_groups.exclude(name=global_group.name) @@ -1073,7 +1073,7 @@ def groups(request, id = None, slug = None): user=request.user ) - groups = groups.exclude(name__startswith='_internal_') + groups = groups.exclude_personal() groups = groups.annotate(users_count=Count('user')) user_can_add_groups = request.user.is_authenticated() and \ -- cgit v1.2.3-1-g7c22