def handle(self, *args, **options): path = options.get('file', None) dry_run = options.get('dry-run') if not path: raise CommandError('Option --file must be specified') try: f = open(path) except IOError: raise CommandError('Invalid file path.') now = timezone.now() former_employee_descr = 'An automatic vouch for being a former Mozilla employee.' employee_descr = 'An automatic vouch for being a Mozilla employee.' count = 0 for email in f: u = get_object_or_none(UserProfile, user__email=email.strip()) if u: vouches = u.vouches_received.all() already_vouched = vouches.filter( Q(description=employee_descr) | Q(description=former_employee_descr), autovouch=True) if not already_vouched.exists(): if not dry_run: Vouch.objects.create(voucher=None, vouchee=u, autovouch=True, date=now, description=former_employee_descr) count = count + 1 print "%d former staff members vouched." % count
def handle(self, *args, **options): path = options.get('file', None) dry_run = options.get('dry-run') if not path: raise CommandError('Option --file must be specified') try: f = open(path) except IOError: raise CommandError('Invalid file path.') now = timezone.now() former_employee_descr = 'An automatic vouch for being a former Mozilla employee.' employee_descr = 'An automatic vouch for being a Mozilla employee.' count = 0 for email in f: u = get_object_or_none(UserProfile, user__email=email.strip()) if u: vouches = u.vouches_received.all() already_vouched = vouches.filter( Q(description=employee_descr) | Q(description=former_employee_descr), autovouch=True ) if not already_vouched.exists(): if not dry_run: Vouch.objects.create( voucher=None, vouchee=u, autovouch=True, date=now, description=former_employee_descr ) count = count + 1 print "%d former staff members vouched." % count
def show(request, url, alias_model, template): """List all members in this group.""" group_alias = get_object_or_404(alias_model, url=url) if group_alias.alias.url != url: return redirect('groups:show_group', url=group_alias.alias.url) is_curator = False is_manager = request.user.userprofile.is_manager is_pending = False show_delete_group_button = False membership_filter_form = MembershipFilterForm(request.GET) group = group_alias.alias profile = request.user.userprofile in_group = group.has_member(profile) memberships = group.members.all() data = {} if isinstance(group, Group): # Has the user accepted the group terms if group.terms: membership = get_object_or_none( GroupMembership, group=group, userprofile=profile, status=GroupMembership.PENDING_TERMS) if membership: return redirect( reverse('groups:review_terms', args=[group.url])) # Is this user's membership pending? is_pending = group.has_pending_member(profile) is_curator = is_manager or (request.user.userprofile in group.curators.all()) # initialize the form only when the group is moderated and user is curator of the group if is_curator and group.accepting_new_members == 'by_request': membership_filter_form = MembershipFilterForm(request.GET) else: membership_filter_form = None if is_curator: statuses = [GroupMembership.MEMBER, GroupMembership.PENDING] if membership_filter_form and membership_filter_form.is_valid(): filtr = membership_filter_form.cleaned_data['filtr'] if filtr == 'members': statuses = [GroupMembership.MEMBER] elif filtr == 'pending_members': statuses = [GroupMembership.PENDING] memberships = group.groupmembership_set.filter(status__in=statuses) # Curators can delete their group if there are no other members. show_delete_group_button = is_curator and group.members.all( ).count() == 1 else: # only show full members, or this user memberships = group.groupmembership_set.filter( Q(status=GroupMembership.MEMBER) | Q(userprofile=profile)) # Order by UserProfile.Meta.ordering memberships = memberships.order_by('userprofile') # Find the most common skills of the group members. # Order by popularity in the group. shared_skill_ids = (group.members.filter( groupmembership__status=GroupMembership.MEMBER).values_list( 'skills', flat=True)) count_skills = defaultdict(int) for skill_id in shared_skill_ids: count_skills[skill_id] += 1 common_skills_ids = [ k for k, v in sorted( count_skills.items(), key=lambda x: x[1], reverse=True) if count_skills[k] > 1 ] # Translate ids to Skills preserving order. skills = [ Skill.objects.get(id=skill_id) for skill_id in common_skills_ids if skill_id ] data.update(skills=skills, membership_filter_form=membership_filter_form) page = request.GET.get('page', 1) paginator = Paginator(memberships, settings.ITEMS_PER_PAGE) try: people = paginator.page(page) except PageNotAnInteger: people = paginator.page(1) except EmptyPage: people = paginator.page(paginator.num_pages) show_pagination = paginator.count > settings.ITEMS_PER_PAGE extra_data = dict( people=people, group=group, in_group=in_group, is_curator=is_curator, is_pending=is_pending, show_pagination=show_pagination, show_delete_group_button=show_delete_group_button, show_join_button=group.user_can_join(request.user.userprofile), show_leave_button=group.user_can_leave(request.user.userprofile), members=group.member_count, ) data.update(extra_data) return render(request, template, data)
def show(request, url, alias_model, template): """List all members in this group.""" group_alias = get_object_or_404(alias_model, url=url) if group_alias.alias.url != url: return redirect('groups:show_group', url=group_alias.alias.url) is_curator = False is_manager = request.user.userprofile.is_manager is_pending = False show_delete_group_button = False membership_filter_form = MembershipFilterForm(request.GET) group = group_alias.alias profile = request.user.userprofile in_group = group.has_member(profile) memberships = group.members.all() data = {} if isinstance(group, Group): # Has the user accepted the group terms if group.terms: membership = get_object_or_none(GroupMembership, group=group, userprofile=profile, status=GroupMembership.PENDING_TERMS) if membership: return redirect(reverse('groups:review_terms', args=[group.url])) # Is this user's membership pending? is_pending = group.has_pending_member(profile) is_curator = is_manager or (request.user.userprofile in group.curators.all()) # initialize the form only when the group is moderated and user is curator of the group if is_curator and group.accepting_new_members == 'by_request': membership_filter_form = MembershipFilterForm(request.GET) else: membership_filter_form = None if is_curator: statuses = [GroupMembership.MEMBER, GroupMembership.PENDING] if membership_filter_form and membership_filter_form.is_valid(): filtr = membership_filter_form.cleaned_data['filtr'] if filtr == 'members': statuses = [GroupMembership.MEMBER] elif filtr == 'pending_members': statuses = [GroupMembership.PENDING] memberships = group.groupmembership_set.filter(status__in=statuses) # Curators can delete their group if there are no other members. show_delete_group_button = is_curator and group.members.all().count() == 1 else: # only show full members, or this user memberships = group.groupmembership_set.filter( Q(status=GroupMembership.MEMBER) | Q(userprofile=profile)) # Order by UserProfile.Meta.ordering memberships = memberships.order_by('userprofile') # Find the most common skills of the group members. # Order by popularity in the group. shared_skill_ids = (group.members.filter(groupmembership__status=GroupMembership.MEMBER) .values_list('skills', flat=True)) count_skills = defaultdict(int) for skill_id in shared_skill_ids: count_skills[skill_id] += 1 common_skills_ids = [k for k, v in sorted(count_skills.items(), key=lambda x: x[1], reverse=True) if count_skills[k] > 1] # Translate ids to Skills preserving order. skills = [Skill.objects.get(id=skill_id) for skill_id in common_skills_ids if skill_id] data.update(skills=skills, membership_filter_form=membership_filter_form) page = request.GET.get('page', 1) paginator = Paginator(memberships, settings.ITEMS_PER_PAGE) try: people = paginator.page(page) except PageNotAnInteger: people = paginator.page(1) except EmptyPage: people = paginator.page(paginator.num_pages) show_pagination = paginator.count > settings.ITEMS_PER_PAGE extra_data = dict(people=people, group=group, in_group=in_group, is_curator=is_curator, is_pending=is_pending, show_pagination=show_pagination, show_delete_group_button=show_delete_group_button, show_join_button=group.user_can_join(request.user.userprofile), show_leave_button=group.user_can_leave(request.user.userprofile), members=group.member_count, ) data.update(extra_data) return render(request, template, data)