Ejemplo n.º 1
0
    def handle(self, *args, **options):
        self.stdout.write('Updating badges')

        badge_data = {
            k: v['badge']
            for k, v in personalize_activities_dict(only_active=False).items()
        }

        for member in Member.enriched.all():
            self.stdout.write('- {0}'.format(member.user.username))

            member.badges = []

            # Badges for activities and deeply integrated studies, e.g. PGP,
            # RunKeeper
            for label, _ in member.connections.items():
                member.badges.append(badge_data[label])

            project_memberships = (member.datarequestprojectmember_set.filter(
                project__approved=True).filter_active())

            # Badges for DataRequestProjects
            for membership in project_memberships:
                member.badges.append(badge_data[membership.project.id_label])

            # The badge for the Public Data Sharing Study
            if member.public_data_participant.enrolled:
                member.badges.append(badge_data['public_data_sharing'])

            member.save()

        self.stdout.write('Done')
Ejemplo n.º 2
0
    def get_context_data(self, **kwargs):
        context = super(MemberDataView, self).get_context_data(**kwargs)
        activities = personalize_activities_dict(self.request.user,
                                                 only_active=False)

        user_data_files = DataFile.objects.for_user(self.request.user)
        filtered_files = [
            data_file for data_file in user_data_files
            if data_file.source in activities
        ]
        get_source = attrgetter('source')
        grouped_files = {
            g: list(f)
            for g, f in groupby(filtered_files, key=get_source)
        }

        # All activities marked as data sources, and any others with files.
        activities = {
            a: activities[a]
            for a in activities if ((
                'data_source' in activities[a] and activities[a]['data_source']
                and activities[a]['is_connected']) or a in grouped_files)
        }
        data_sources = sorted(
            activities.keys(),
            key=lambda x: activities[x]['verbose_name'].lower())

        context.update({
            'data_sources': data_sources,
            'activities': activities,
            'grouped_files': grouped_files,
        })
        return context
Ejemplo n.º 3
0
def url_slug(label):
    """
    Given a label, return the URL slug of the corresponding activity.
    """
    activities = personalize_activities_dict()

    if label not in activities:
        return ''

    return activities[label]['url_slug']
Ejemplo n.º 4
0
    def get_context_data(self, **kwargs):
        context = super(AuthorizeOnSiteDataRequestProjectView,
                        self).get_context_data(**kwargs)

        context.update({
            'project': self.get_object(),
            'activities': personalize_activities_dict(self.request.user),
            'username': self.request.user.username,
        })

        return context
Ejemplo n.º 5
0
    def get_context_data(self, **kwargs):
        context = super(AuthorizeOAuth2ProjectView,
                        self).get_context_data(**kwargs)

        context.update({
            'object': self.get_object(),
            'project': self.get_object(),
            'activities': personalize_activities_dict(self.request.user),
            # XXX: BaseOAuth2AuthorizationView doesn't provide the request
            # context for some reason
            'request': self.request,
            'username': self.request.user.username,
        })

        return context
Ejemplo n.º 6
0
    def get_context_data(self, **kwargs):
        context = super(ConnectedSourcesMixin, self).get_context_data(**kwargs)

        project = self.get_object()
        activities = personalize_activities_dict(self.request.user)

        context.update({
            'project_authorized_by_member':
            self.project_authorized_by_member,
            'sources':
            OrderedDict([(source_name, activities[source_name]['is_connected'])
                         for source_name in project.request_sources_access
                         if source_name in activities])
        })

        return context
Ejemplo n.º 7
0
    def grouped_by_source(queryset):
        activities = personalize_activities_dict()

        filtered_files = [
            data_file for data_file in queryset
            if data_file.source in activities
        ]

        get_source = attrgetter('source')

        sorted_files = sorted(filtered_files, key=get_source)
        grouped_files = groupby(sorted_files, key=get_source)
        list_files = [(group, list(files)) for group, files in grouped_files]

        def to_lower_verbose(source):
            return activities[source[0]]['verbose_name'].lower()

        return OrderedDict(sorted(list_files, key=to_lower_verbose))
Ejemplo n.º 8
0
    def get_featured_projects(self):
        """
        Get FeaturedProjects in 'activity' data format

        Override description if one is provided.
        """
        featured_projs = FeaturedProject.objects.order_by('id')[0:3]
        highlighted = []
        activities = personalize_activities_dict(self.request.user)
        try:
            for featured in featured_projs:
                try:
                    activity = activities[featured.project.id_label]
                    if featured.description:
                        activity['commentary'] = featured.description
                    highlighted.append(activity)
                except KeyError:
                    pass
            return highlighted
        except (ValueError, TypeError):
            return []
Ejemplo n.º 9
0
    def get_context_data(self, **kwargs):
        context = super(ActivityManagementView,
                        self).get_context_data(**kwargs)

        activities = personalize_activities_dict(self.request.user,
                                                 only_active=False,
                                                 only_approved=False)
        try:
            self.activity = self.get_activity(activities)
        except KeyError:
            raise Http404

        # MPB Aug 2017: This comprehension is slow, taking 2+ secs in local dev
        pubfilecount_cachetag = 'pubfilecount-{}'.format(
            self.activity['source_name'])
        public_files = cache.get(pubfilecount_cachetag)
        if not public_files:
            public_files = len([
                df for df in DataFile.objects.filter(
                    source=self.activity['source_name']).exclude(
                        parent_project_data_file__completed=False).current().
                distinct('user') if df.is_public
            ])
        cache.set(pubfilecount_cachetag, public_files, timeout=TEN_MINUTES)

        requesting_activities = self.requesting_activities()
        data_is_public = False

        data_files = []
        if self.request.user.is_authenticated():
            data_files = (DataFile.objects.for_user(
                self.request.user).filter(source=self.activity['source_name']))
            data_is_public = is_public(self.request.user.member,
                                       self.activity['source_name'])

        project = None
        project_member = None
        project_permissions = None
        granted_permissions = None
        permissions_changed = False
        if 'project_id' in self.activity:
            project = DataRequestProject.objects.get(
                pk=self.activity['project_id'])

            project_permissions = {
                'share_username': project.request_username_access,
                'send_messages': project.request_message_permission,
                'share_sources': project.request_sources_access,
                'returned_data_description': project.returned_data_description,
            }
            if self.activity['is_connected']:
                project_member = project.active_user(self.request.user)
                granted_permissions = {
                    'share_username': project_member.username_shared,
                    'send_messages': project_member.message_permission,
                    'share_sources': project_member.sources_shared,
                    'returned_data_description':
                    project.returned_data_description,
                }
                permissions_changed = (not all([
                    granted_permissions[x] == project_permissions[x] for x in
                    ['share_username', 'send_messages', 'share_sources']
                ]))

        context.update({
            'activities': activities,
            'activity': self.activity,
            'data_files': data_files,
            'is_public': data_is_public,
            'source': self.activity['source_name'],
            'project': project,
            'project_member': project_member,
            'project_permissions': project_permissions,
            'granted_permissions': granted_permissions,
            'permissions_changed': permissions_changed,
            'public_files': public_files,
            'requesting_activities': requesting_activities,
        })

        return context