Skip to content
Open
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
7 changes: 6 additions & 1 deletion admin/base/utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""
Utility functions and classes
"""
from osf.models import Subject, NodeLicense, Brand
from osf.models import Subject, NodeLicense, Brand, CedarMetadataTemplate

from django.core.exceptions import ValidationError, PermissionDenied
from django.urls import reverse
Expand Down Expand Up @@ -116,6 +116,11 @@ def get_brand_choices():
brands = Brand.objects.all()
return [no_default] + [(brand.id, brand.name) for brand in brands]

def get_cedar_template_choices():
no_default = ('', '---------')
templates = CedarMetadataTemplate.objects.filter(active=True)
return [no_default] + [(t.id, t.schema_name) for t in templates]

def get_toplevel_subjects():
return Subject.objects.filter(parent__isnull=True, provider___id='osf').values_list('id', 'text')

Expand Down
4 changes: 3 additions & 1 deletion admin/collection_providers/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from framework.utils import sanitize_html
from osf.models import CollectionProvider
from admin.base.utils import get_nodelicense_choices, get_defaultlicense_choices, validate_slug
from admin.base.utils import get_nodelicense_choices, get_defaultlicense_choices, validate_slug, get_cedar_template_choices


class CollectionProviderForm(forms.ModelForm):
Expand Down Expand Up @@ -37,9 +37,11 @@ class Meta:
def __init__(self, *args, **kwargs):
nodelicense_choices = get_nodelicense_choices()
defaultlicense_choices = get_defaultlicense_choices()
cedar_template_choices = get_cedar_template_choices()
super().__init__(*args, **kwargs)
self.fields['licenses_acceptable'].choices = nodelicense_choices
self.fields['default_license'].choices = defaultlicense_choices
self.fields['required_metadata_template'].choices = cedar_template_choices

def clean_description(self, *args, **kwargs):
if not self.data.get('description'):
Expand Down
131 changes: 41 additions & 90 deletions admin/collection_providers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,127 +132,78 @@ def get_context_data(self, *args, **kwargs):
licenses_html += '</ul>'
collection_provider_attributes['licenses_acceptable'] = licenses_html

primary_collection = collection_provider.primary_collection
# compile html list of collected_type_choices
collected_type_choices_html = '<ul>'
for choice in primary_collection.collected_type_choices:
collected_type_choices_html += f'<li>{choice}</li>'
collected_type_choices_html += '</ul>'
kwargs['collected_type_choices'] = collected_type_choices_html

# compile html list of status_choices
status_choices_html = '<ul>'
for choice in primary_collection.status_choices:
status_choices_html += f'<li>{choice}</li>'
status_choices_html += '</ul>'
kwargs['status_choices'] = status_choices_html

# compile html list of volume_choices
volume_choices_html = '<ul>'
for choice in primary_collection.volume_choices:
volume_choices_html += f'<li>{choice}</li>'
volume_choices_html += '</ul>'
kwargs['volume_choices'] = volume_choices_html

# compile html list of issue_choices
issue_choices_html = '<ul>'
for choice in primary_collection.issue_choices:
issue_choices_html += f'<li>{choice}</li>'
issue_choices_html += '</ul>'
kwargs['issue_choices'] = issue_choices_html

# compile html list of program_area_choices
program_area_choices_html = '<ul>'
for choice in primary_collection.program_area_choices:
program_area_choices_html += f'<li>{choice}</li>'
program_area_choices_html += '</ul>'
kwargs['program_area_choices'] = program_area_choices_html

# compile html list of school_type_choices
school_type_choices_html = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.school_type_choices
))
kwargs['school_type_choices'] = school_type_choices_html

# compile html list of study_design_choices
study_design_choices_html = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.study_design_choices
))
kwargs['study_design_choices'] = study_design_choices_html

disease_choices_html = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.disease_choices
))
kwargs['disease_choices'] = disease_choices_html

data_type_choices_html = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.data_type_choices
))
kwargs['data_type_choices'] = data_type_choices_html

grade_levels_choices_html = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.grade_levels_choices
))
kwargs['grade_levels_choices'] = grade_levels_choices_html

# get a dict of model fields so that we can set the initial value for the update form
fields = model_to_dict(collection_provider)
fields['collected_type_choices'] = json.dumps(primary_collection.collected_type_choices)
fields['status_choices'] = json.dumps(primary_collection.status_choices)
fields['volume_choices'] = json.dumps(primary_collection.volume_choices)
fields['issue_choices'] = json.dumps(primary_collection.issue_choices)
fields['program_area_choices'] = json.dumps(primary_collection.program_area_choices)

fields = model_to_dict(collection_provider)

fields['school_type_choices'] = json.dumps(primary_collection.school_type_choices)
fields['study_design_choices'] = json.dumps(primary_collection.study_design_choices)
fields['data_type_choices'] = json.dumps(primary_collection.data_type_choices)
fields['disease_choices'] = json.dumps(primary_collection.disease_choices)
fields['grade_levels_choices'] = json.dumps(primary_collection.grade_levels_choices)

# compile html list of collected_type_choices
if collection_provider.primary_collection:
primary_collection = collection_provider.primary_collection

# compile html list of collected_type_choices
collected_type_choices_html = '<ul>'
for choice in collection_provider.primary_collection.collected_type_choices:
for choice in primary_collection.collected_type_choices:
collected_type_choices_html += f'<li>{choice}</li>'
collected_type_choices_html += '</ul>'
kwargs['collected_type_choices'] = collected_type_choices_html

# compile html list of status_choices
status_choices_html = '<ul>'
for choice in collection_provider.primary_collection.status_choices:
for choice in primary_collection.status_choices:
status_choices_html += f'<li>{choice}</li>'
status_choices_html += '</ul>'
kwargs['status_choices'] = status_choices_html

# compile html list of volume_choices
volume_choices_html = '<ul>'
for choice in collection_provider.primary_collection.volume_choices:
for choice in primary_collection.volume_choices:
volume_choices_html += f'<li>{choice}</li>'
volume_choices_html += '</ul>'
kwargs['volume_choices'] = volume_choices_html

# compile html list of issue_choices
issue_choices_html = '<ul>'
for choice in collection_provider.primary_collection.issue_choices:
for choice in primary_collection.issue_choices:
issue_choices_html += f'<li>{choice}</li>'
issue_choices_html += '</ul>'
kwargs['issue_choices'] = issue_choices_html

# compile html list of program_area_choices
program_area_choices_html = '<ul>'
for choice in collection_provider.primary_collection.program_area_choices:
for choice in primary_collection.program_area_choices:
program_area_choices_html += f'<li>{choice}</li>'
program_area_choices_html += '</ul>'
kwargs['program_area_choices'] = program_area_choices_html

# get a dict of model fields so that we can set the initial value for the update form
fields['collected_type_choices'] = json.dumps(collection_provider.primary_collection.collected_type_choices)
fields['status_choices'] = json.dumps(collection_provider.primary_collection.status_choices)
fields['volume_choices'] = json.dumps(collection_provider.primary_collection.volume_choices)
fields['issue_choices'] = json.dumps(collection_provider.primary_collection.issue_choices)
fields['program_area_choices'] = json.dumps(collection_provider.primary_collection.program_area_choices)
# compile html list of school_type_choices
kwargs['school_type_choices'] = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.school_type_choices
))

# compile html list of study_design_choices
kwargs['study_design_choices'] = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.study_design_choices
))

kwargs['disease_choices'] = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.disease_choices
))

kwargs['data_type_choices'] = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.data_type_choices
))

kwargs['grade_levels_choices'] = '<ul>{choices}</ul>'.format(choices=''.join(
f'<li>{choice}</li>' for choice in primary_collection.grade_levels_choices
))

fields['collected_type_choices'] = json.dumps(primary_collection.collected_type_choices)
fields['status_choices'] = json.dumps(primary_collection.status_choices)
fields['volume_choices'] = json.dumps(primary_collection.volume_choices)
fields['issue_choices'] = json.dumps(primary_collection.issue_choices)
fields['program_area_choices'] = json.dumps(primary_collection.program_area_choices)
fields['school_type_choices'] = json.dumps(primary_collection.school_type_choices)
fields['study_design_choices'] = json.dumps(primary_collection.study_design_choices)
fields['data_type_choices'] = json.dumps(primary_collection.data_type_choices)
fields['disease_choices'] = json.dumps(primary_collection.disease_choices)
fields['grade_levels_choices'] = json.dumps(primary_collection.grade_levels_choices)

kwargs['form'] = CollectionProviderForm(initial=fields)

Expand All @@ -272,7 +223,7 @@ def form_valid(self, form):
if self.object.primary_collection:
for choices_name in ['collected_type', 'status', 'issue', 'volume', 'program_area', 'school_type', 'study_design', 'data_type', 'disease', 'grade_levels']:
_process_collection_choices(self.object, choices_name, form)
self.object.primary_collection.save()
self.object.primary_collection.save()
return super().form_valid(form)

def form_invalid(self, form):
Expand Down
5 changes: 4 additions & 1 deletion admin/preprint_providers/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
Subject
)
from admin.base.utils import (get_subject_rules, get_toplevel_subjects,
get_nodelicense_choices, get_defaultlicense_choices, validate_slug)
get_nodelicense_choices, get_defaultlicense_choices, validate_slug,
get_cedar_template_choices)


class PreprintProviderForm(forms.ModelForm):
Expand Down Expand Up @@ -42,10 +43,12 @@ def __init__(self, *args, **kwargs):
toplevel_choices = get_toplevel_subjects()
nodelicense_choices = get_nodelicense_choices()
defaultlicense_choices = get_defaultlicense_choices()
cedar_template_choices = get_cedar_template_choices()
super().__init__(*args, **kwargs)
self.fields['toplevel_subjects'].choices = toplevel_choices
self.fields['licenses_acceptable'].choices = nodelicense_choices
self.fields['default_license'].choices = defaultlicense_choices
self.fields['required_metadata_template'].choices = cedar_template_choices

def clean_subjects_acceptable(self, *args, **kwargs):
subject_ids = [_f for _f in self.data['subjects_chosen'].split(', ') if _f]
Expand Down
3 changes: 3 additions & 0 deletions admin/registration_providers/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
get_defaultlicense_choices,
validate_slug,
get_brand_choices,
get_cedar_template_choices,
)


Expand Down Expand Up @@ -41,10 +42,12 @@ def __init__(self, *args, **kwargs):
nodelicense_choices = get_nodelicense_choices()
defaultlicense_choices = get_defaultlicense_choices()
brand_choices = get_brand_choices()
cedar_template_choices = get_cedar_template_choices()
super().__init__(*args, **kwargs)
self.fields['licenses_acceptable'].choices = nodelicense_choices
self.fields['default_license'].choices = defaultlicense_choices
self.fields['brand'].choices = brand_choices
self.fields['required_metadata_template'].choices = cedar_template_choices
if kwargs.get('initial', None) and kwargs.get('initial').get('_id', None):
provider = RegistrationProvider.load(kwargs.get('initial').get('_id'))
self.fields['default_schema'].choices = provider.schemas.filter(visible=True, active=True).values_list('id', 'name')
Expand Down
15 changes: 15 additions & 0 deletions api/providers/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ class Meta:
related_view_kwargs={'brand_id': '<brand.id>'},
)

required_metadata_template = RelationshipField(
related_view='cedar-metadata-templates:cedar-metadata-template-detail',
related_view_kwargs={'template_id': '<required_metadata_template._id>'},
read_only=True,
)
filterable_fields = frozenset([
'allow_submissions',
'allow_commenting',
Expand Down Expand Up @@ -199,6 +204,11 @@ class Meta:
related_view_kwargs={'provider_id': '<_id>'},
)

required_metadata_template = RelationshipField(
related_view='cedar-metadata-templates:cedar-metadata-template-detail',
related_view_kwargs={'template_id': '<required_metadata_template._id>'},
)

links = LinksField({
'self': 'get_absolute_url',
'external_url': 'get_external_url',
Expand Down Expand Up @@ -269,6 +279,11 @@ class Meta:
related_view_kwargs={'brand_id': '<brand.id>'},
)

required_metadata_template = RelationshipField(
related_view='cedar-metadata-templates:cedar-metadata-template-detail',
related_view_kwargs={'template_id': '<required_metadata_template._id>'},
)

def get_preprints_url(self, obj):
return absolute_reverse(
'providers:preprint-providers:preprints-list', kwargs={
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ def test_required_metadata_template_is_null_by_default(self, app, provider, prov
assert res.json['data']['relationships']['required_metadata_template']['data'] is None

def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
from osf.models import AbstractProvider
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
provider.required_metadata_template = cedar_template
provider.save()

res = app.get(provider_url)
assert res.status_code == 200
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,8 @@ def test_required_metadata_template_is_null_by_default(self, app, provider, prov
assert res.json['data']['relationships']['required_metadata_template']['data'] is None

def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
from osf.models import AbstractProvider
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
provider.required_metadata_template = cedar_template
provider.save()

res = app.get(provider_url)
assert res.status_code == 200
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ def test_required_metadata_template_is_null_by_default(self, app, provider, prov
assert res.json['data']['relationships']['required_metadata_template']['data'] is None

def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
from osf.models import AbstractProvider
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
provider.required_metadata_template = cedar_template
provider.save()

res = app.get(provider_url)
assert res.status_code == 200
Expand Down
Loading