Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions api/base/pagination.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,23 @@ def paginate_queryset(self, queryset, request, view=None):
return super().paginate_queryset(queryset, request, view=None)


class JSONAPINoPagination(pagination.BasePagination):
'''do not accept page params nor paginate the queryset, but (for consistency with
JSONAPIPagination) do format the data into a jsonapi doc

possible future improvement: format jsonapi docs somewhere more reasonable
(like the renderer?) and delete this pagination class
'''
def paginate_queryset(self, queryset, request, view=None):
return queryset # let it be

def get_paginated_response(self, data):
return Response({
'data': data,
'meta': {'total': len(data)},
})


class MaxSizePagination(JSONAPIPagination):
page_size = 1000
max_page_size = None
Expand Down
21 changes: 0 additions & 21 deletions api/base/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,27 +266,6 @@ def assert_resource_type(obj, resource_tuple):
assert isinstance(obj, resource_tuple), f'obj must be {a_or_an} {error_message}; got {obj}'


class MockQueryset(list):
"""
This class is meant to convert a simple list into a filterable queryset look-a-like.
"""

def __init__(self, items, search, default_attrs=None, **kwargs):
self.search = search

for item in items:
if default_attrs:
item.update(default_attrs)
self.add_dict_as_item(item)

def __len__(self):
return self.search.count()

def add_dict_as_item(self, dict):
item = type('item', (object,), dict)
self.append(item)


def toggle_view_by_flag(flag_name, old_view, new_view):
'''toggle between view implementations based on a feature flag

Expand Down
39 changes: 0 additions & 39 deletions api/institutions/renderers.py

This file was deleted.

107 changes: 2 additions & 105 deletions api/institutions/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from api.base.serializers import YearmonthField
from api.nodes.serializers import CompoundIDField
from api.base.exceptions import RelationshipPostMakesNoChanges
from api.base.utils import absolute_reverse


class InstitutionSerializer(JSONAPISerializer):
Expand Down Expand Up @@ -205,30 +204,6 @@ def create(self, validated_data):
}


class InstitutionSummaryMetricSerializer(JSONAPISerializer):

class Meta:
type_ = 'institution-summary-metrics'

id = IDField(source='institution_id', read_only=True)
public_project_count = ser.IntegerField(read_only=True)
private_project_count = ser.IntegerField(read_only=True)
user_count = ser.IntegerField(read_only=True)

links = LinksField({
'self': 'get_absolute_url',
})

def get_absolute_url(self, obj):
return absolute_reverse(
'institutions:institution-summary-metrics',
kwargs={
'institution_id': self.context['request'].parser_context['kwargs']['institution_id'],
'version': 'v2',
},
)


class UniqueDeptIDField(CompoundIDField):
"""Creates a unique department ID of the form "<institution-id>-<dept-id>"."""

Expand All @@ -255,74 +230,9 @@ class Meta:
name = ser.CharField(read_only=True)
number_of_users = ser.IntegerField(read_only=True)

links = LinksField({
'self': 'get_absolute_url',
})

filterable_fields = frozenset([
'id',
'name',
'number_of_users',
])

def get_absolute_url(self, obj):
return absolute_reverse(
'institutions:institution-department-metrics',
kwargs={
'institution_id': self.context['request'].parser_context['kwargs']['institution_id'],
'version': 'v2',
},
)


class OldInstitutionUserMetricsSerializer(JSONAPISerializer):
class InstitutionUserMetricsSerializer(JSONAPISerializer):
'''serializer for institution-users metrics

used only when the INSTITUTIONAL_DASHBOARD_2024 feature flag is NOT active
(and should be removed when that flag is permanently active)
'''

class Meta:
type_ = 'institution-users'

id = IDField(source='user_id', read_only=True)
user_name = ser.CharField(read_only=True)
public_projects = ser.IntegerField(source='public_project_count', read_only=True)
private_projects = ser.IntegerField(source='private_project_count', read_only=True)
department = ser.CharField(read_only=True)

user = RelationshipField(
related_view='users:user-detail',
related_view_kwargs={'user_id': '<user_id>'},
)

links = LinksField({
'self': 'get_absolute_url',
})

filterable_fields = frozenset([
'id',
'user_name',
'public_projects',
'private_projects',
'department',
])

def get_absolute_url(self, obj):
return absolute_reverse(
'institutions:institution-user-metrics',
kwargs={
'institution_id': self.context['request'].parser_context['kwargs']['institution_id'],
'version': 'v2',
},
)


class NewInstitutionUserMetricsSerializer(JSONAPISerializer):
'''serializer for institution-users metrics

used only when the INSTITUTIONAL_DASHBOARD_2024 feature flag is active
(and should be renamed without "New" when that flag is permanently active)
'''

class Meta:
Expand Down Expand Up @@ -360,11 +270,6 @@ class Meta:
)
contacts = ser.SerializerMethodField()

links = LinksField({})

def get_absolute_url(self):
return None # there is no detail view for institution-users

def get_contacts(self, obj):
user = OSFUser.load(obj._d_['user_id'])
if not user:
Expand All @@ -381,11 +286,8 @@ def get_contacts(self, obj):
return list(results)


class NewInstitutionSummaryMetricsSerializer(JSONAPISerializer):
class InstitutionSummaryMetricsSerializer(JSONAPISerializer):
'''serializer for institution-summary metrics

used only when the INSTITUTIONAL_DASHBOARD_2024 feature flag is active
(and should be renamed without "New" when that flag is permanently active)
'''

class Meta:
Expand Down Expand Up @@ -414,11 +316,6 @@ class Meta:
related_view_kwargs={'institution_id': '<institution_id>'},
)

links = LinksField({})

def get_absolute_url(self):
return None # there is no detail view for institution-users


class InstitutionRelated(JSONAPIRelationshipSerializer):
id = ser.CharField(source='_id', required=False, allow_null=True)
Expand Down
4 changes: 2 additions & 2 deletions api/institutions/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
re_path(r'^(?P<institution_id>\w+)/relationships/registrations/$', views.InstitutionRegistrationsRelationship.as_view(), name=views.InstitutionRegistrationsRelationship.view_name),
re_path(r'^(?P<institution_id>\w+)/relationships/nodes/$', views.InstitutionNodesRelationship.as_view(), name=views.InstitutionNodesRelationship.view_name),
re_path(r'^(?P<institution_id>\w+)/users/$', views.InstitutionUserList.as_view(), name=views.InstitutionUserList.view_name),
re_path(r'^(?P<institution_id>\w+)/metrics/summary/$', views.institution_summary_metrics_detail_view, name=views.institution_summary_metrics_detail_view.view_name),
re_path(r'^(?P<institution_id>\w+)/metrics/summary/$', views.InstitutionSummaryMetricsDetail.as_view(), name=views.InstitutionSummaryMetricsDetail.view_name),
re_path(r'^(?P<institution_id>\w+)/metrics/departments/$', views.InstitutionDepartmentList.as_view(), name=views.InstitutionDepartmentList.view_name),
re_path(r'^(?P<institution_id>\w+)/metrics/users/$', views.institution_user_metrics_list_view, name=views.institution_user_metrics_list_view.view_name),
re_path(r'^(?P<institution_id>\w+)/metrics/users/$', views.InstitutionUserMetricsList.as_view(), name=views.InstitutionUserMetricsList.view_name),
]
Loading
Loading