Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Rex Dri
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
32
Issues
32
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Rex Dri
Rex Dri
Commits
7cc17dfe
Commit
7cc17dfe
authored
Sep 02, 2018
by
Florent Chehab
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Big Update : moderation and viewset permissions centralized
parent
e9e8ecbe
Pipeline
#26850
passed with stages
in 2 minutes and 25 seconds
Changes
53
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
308 additions
and
75 deletions
+308
-75
Makefile
Makefile
+1
-1
backend/generate/generate_all.py
backend/generate/generate_all.py
+2
-2
backend/generate/templates/urls.tpl
backend/generate/templates/urls.tpl
+29
-6
backend/models/location/city.py
backend/models/location/city.py
+4
-0
backend/models/location/cityTaggedItem.py
backend/models/location/cityTaggedItem.py
+4
-1
backend/models/location/country.py
backend/models/location/country.py
+4
-1
backend/models/location/countryDri.py
backend/models/location/countryDri.py
+3
-0
backend/models/location/countryScholarship.py
backend/models/location/countryScholarship.py
+3
-0
backend/models/location/countryTaggedItem.py
backend/models/location/countryTaggedItem.py
+3
-1
backend/models/location/currency.py
backend/models/location/currency.py
+4
-2
backend/models/my_model/forTestingModeration.py
backend/models/my_model/forTestingModeration.py
+3
-0
backend/models/my_model/forTestingVersioning.py
backend/models/my_model/forTestingVersioning.py
+3
-0
backend/models/my_model/myModel.py
backend/models/my_model/myModel.py
+2
-0
backend/models/my_model/myModelVersionned.py
backend/models/my_model/myModelVersionned.py
+3
-2
backend/models/my_model/myModelViewSet.py
backend/models/my_model/myModelViewSet.py
+2
-6
backend/models/my_model/pendingModeration.py
backend/models/my_model/pendingModeration.py
+5
-2
backend/models/other_core/department.py
backend/models/other_core/department.py
+4
-2
backend/models/other_core/offer.py
backend/models/other_core/offer.py
+3
-2
backend/models/other_core/semester.py
backend/models/other_core/semester.py
+3
-2
backend/models/other_core/specialty.py
backend/models/other_core/specialty.py
+3
-2
backend/models/tag/tag.py
backend/models/tag/tag.py
+4
-6
backend/models/tools/__init__.py
backend/models/tools/__init__.py
+0
-4
backend/models/university/campus.py
backend/models/university/campus.py
+4
-0
backend/models/university/campusTaggedItem.py
backend/models/university/campusTaggedItem.py
+3
-1
backend/models/university/university.py
backend/models/university/university.py
+3
-0
backend/models/university/universityAPI.py
backend/models/university/universityAPI.py
+2
-7
backend/models/university/universityDri.py
backend/models/university/universityDri.py
+3
-0
backend/models/university/universityInfo.py
backend/models/university/universityInfo.py
+3
-0
backend/models/university/universityModulesAPI.py
backend/models/university/universityModulesAPI.py
+2
-1
backend/models/university/universityScholarship.py
backend/models/university/universityScholarship.py
+4
-0
backend/models/university/universitySemestersDates.py
backend/models/university/universitySemestersDates.py
+4
-0
backend/models/university/universityTaggedItem.py
backend/models/university/universityTaggedItem.py
+3
-1
backend/models/user/previousDeparture.py
backend/models/user/previousDeparture.py
+3
-2
backend/models/user/previousDepartureFeedback.py
backend/models/user/previousDepartureFeedback.py
+4
-0
backend/models/user/recommendation.py
backend/models/user/recommendation.py
+3
-2
backend/models/user/recommendationList.py
backend/models/user/recommendationList.py
+3
-1
backend/models/user/userData.py
backend/models/user/userData.py
+5
-7
backend/permissions/__init__.py
backend/permissions/__init__.py
+6
-0
backend/permissions/default_viewset_permissions.py
backend/permissions/default_viewset_permissions.py
+4
-0
backend/permissions/isDriOrReadOnly.py
backend/permissions/isDriOrReadOnly.py
+14
-0
backend/permissions/isOwner.py
backend/permissions/isOwner.py
+0
-0
backend/permissions/isStaffOrReadOnly.py
backend/permissions/isStaffOrReadOnly.py
+1
-1
backend/permissions/noDelete.py
backend/permissions/noDelete.py
+0
-0
backend/permissions/noDeleteIfNotStaff.py
backend/permissions/noDeleteIfNotStaff.py
+1
-1
backend/tests/test_moderation.py
backend/tests/test_moderation.py
+2
-1
backend/tests/withUserTestCase.py
backend/tests/withUserTestCase.py
+17
-0
backend/utils/__init__.py
backend/utils/__init__.py
+2
-0
backend/utils/find_api_end_point_for_viewset.py
backend/utils/find_api_end_point_for_viewset.py
+2
-7
backend/utils/get_moderation_level.py
backend/utils/get_moderation_level.py
+17
-0
backend/utils/get_viewset_permissions.py
backend/utils/get_viewset_permissions.py
+32
-0
general/api/__init__.py
general/api/__init__.py
+1
-0
general/api/api_config.yml
general/api/api_config.yml
+46
-1
general/api/get_api_config.py
general/api/get_api_config.py
+22
-0
No files found.
Makefile
View file @
7cc17dfe
...
...
@@ -5,7 +5,7 @@ install_backend:
pip
install
-r
requirements.txt
--quiet
generate_backend
:
python ./backend/generate/generate_all.py
export
PYTHONPATH
=
$$
PWD
;
python ./backend/generate/generate_all.py
generate_frontend
:
python ./frontend/generate/generate_frontend_files.py
...
...
backend/generate/generate_all.py
View file @
7cc17dfe
#####
# This python file is used to generate js files for redux
from
django
import
template
import
yaml
from
os.path
import
join
,
realpath
,
dirname
from
general.api
import
get_api_config
############
# Need to do this first so that Django template engine is working
...
...
@@ -44,7 +44,7 @@ saving_dir = realpath(current_dir + "/../")
# API_BASE = "http://127.0.0.1:8000/api/"
api_config
=
yaml
.
load
(
read_file
(
join
(
current_dir
,
'api_config.yml'
))
)
api_config
=
get_api_config
(
)
# Render urls.py
template_path
=
join
(
templates_dir
,
'urls.tpl'
)
...
...
backend/generate/templates/urls.tpl
View file @
7cc17dfe
...
...
@@ -9,11 +9,18 @@ from django.conf.urls import url, include
from django.conf import settings
from rest_framework import routers
{% spaceless %}
{% for model in data %}{% if 'requires_testing' not in model or not model.requires_testing %}
ALL_MODELS = []
ALL_VIEWSETS = []
{% for model in data %}
{% if not model.requires_testing %}
from backend.models.{
{
model
.
import_location
}
} import {
{
model
.
viewset
}
}
{% endif %}{% endfor %}
{% endspaceless %}
ALL_VIEWSETS.append({
{
model
.
viewset
}
})
{% if model.model is not None and not model.ignore_in_admin%}
from backend.models.{
{
model
.
import_location
}
} import {
{
model
.
model
}
}
ALL_MODELS.append({
{
model
.
model
}
})
{% endif %}
{% endif %}
{% endfor %}
from rest_framework.documentation import include_docs_urls
...
...
@@ -24,19 +31,35 @@ urlpatterns = [
router = routers.DefaultRouter()
if settings.TESTING:
{% for model in data %}{% if
'requires_testing' in model or
model.requires_testing %}
{% for model in data %}{% if model.requires_testing %}
from backend.models.{
{
model
.
import_location
}
} import {
{
model
.
viewset
}
}
ALL_VIEWSETS.append({
{
model
.
viewset
}
})
{% if model.model is not None %}
from backend.models.{
{
model
.
import_location
}
} import {
{
model
.
model
}
}
ALL_MODELS.append({
{
model
.
model
}
})
{% endif %}
router.register(
r'{
{
model
.
api_end_point
}
}{% if 'api_attr' in model %}/{
{
model
.
api_attr
}
}{% endif %}',
{
{
model
.
viewset
}
}{%if 'api_name' in model%},"{
{
model
.
api_name
}
}"{% endif %}
){% endif %}{% endfor %}
{% for model in data %}{% if
'requires_testing' not in model or
not model.requires_testing %}
{% for model in data %}{% if not model.requires_testing %}
router.register(
r'{
{
model
.
api_end_point
}
}{% if 'api_attr' in model %}/{
{
model
.
api_attr
}
}{% endif %}',
{
{
model
.
viewset
}
}{%if 'api_name' in model%},"{
{
model
.
api_name
}
}"{% endif %}
){% endif %}{% endfor %}
urlpatterns += [url(r'^api/', include(router.urls))]
for model in ALL_MODELS:
if model.moderation_level is None:
raise Exception("You forgot to set the moderation_level variable in the model {}".format(str(model)))
from backend.permissions import DEFAULT_VIEWSET_PERMISSIONS
for viewset in ALL_VIEWSETS:
for p in DEFAULT_VIEWSET_PERMISSIONS:
v_p = viewset.permission_classes
if p not in v_p:
raise Exception("Permission_classes are not defined correctly in the viewset {}".format(str(viewset)))
{% endautoescape %}
backend/models/location/city.py
View file @
7cc17dfe
...
...
@@ -2,9 +2,12 @@ from django.db import models
from
rest_framework
import
serializers
from
backend.models.location
import
Country
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelVersionnedViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
City
(
MyModel
):
moderation_level
=
get_moderation_level
(
"City"
)
name
=
models
.
CharField
(
max_length
=
200
)
local_name
=
models
.
CharField
(
max_length
=
200
,
null
=
True
,
blank
=
True
)
# We add an area to distinguish similarly named cities
...
...
@@ -29,5 +32,6 @@ class CitySerializer(MyModelSerializer):
class
CityViewSet
(
MyModelVersionnedViewSet
):
permission_classes
=
get_viewset_permissions
(
"CityViewSet"
)
queryset
=
City
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CitySerializer
backend/models/location/cityTaggedItem.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.tag
import
TaggedItem
,
TaggedItemSerializer
,
TaggedItemViewSet
from
backend.models.location
import
City
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
CityTaggedItem
(
TaggedItem
):
moderation_level
=
get_moderation_level
(
"CityTaggedItem"
)
city
=
models
.
OneToOneField
(
City
,
on_delete
=
models
.
PROTECT
,
related_name
=
'city_items'
,
primary_key
=
True
)
...
...
@@ -22,6 +25,6 @@ class CityTaggedItemSerializer(TaggedItemSerializer):
class
CityTaggedItemViewSet
(
TaggedItemViewSet
):
permission_classes
=
get_viewset_permissions
(
"CityTaggedItemViewSet"
)
queryset
=
CityTaggedItem
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CityTaggedItemSerializer
backend/models/location/country.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelVersionnedViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
# Data model based on : https://unstats.un.org/unsd/methodology/m49/overview/
class
Country
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Country"
)
name
=
models
.
CharField
(
max_length
=
200
)
iso_alpha2_code
=
models
.
CharField
(
primary_key
=
True
,
max_length
=
2
)
iso_alpha3_code
=
models
.
CharField
(
...
...
@@ -27,5 +29,6 @@ class CountrySerializer(MyModelSerializer):
class
CountryViewSet
(
MyModelVersionnedViewSet
):
permission_classes
=
get_viewset_permissions
(
"CountryViewSet"
)
queryset
=
Country
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CountrySerializer
backend/models/location/countryDri.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.location
import
Country
from
backend.models.module
import
DriRestrictedModule
,
DriRestrictedModuleSerializer
,
DriRestrictedModuleViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
CountryDri
(
DriRestrictedModule
):
moderation_level
=
get_moderation_level
(
"CountryDri"
)
country
=
models
.
ManyToManyField
(
Country
,
related_name
=
"country_dri"
)
...
...
@@ -20,5 +22,6 @@ class CountryDriSerializer(DriRestrictedModuleSerializer):
class
CountryDriViewSet
(
DriRestrictedModuleViewSet
):
permission_classes
=
get_viewset_permissions
(
"CountryDriViewSet"
)
queryset
=
CountryDri
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CountryDriSerializer
backend/models/location/countryScholarship.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.location
import
Country
from
backend.models.module
import
Scholarship
,
ScholarshipSerializer
,
ScholarshipViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
CountryScholarship
(
Scholarship
):
moderation_level
=
get_moderation_level
(
"CountryScholarship"
)
country
=
models
.
ManyToManyField
(
Country
,
related_name
=
"country_scholarhip"
)
...
...
@@ -20,5 +22,6 @@ class CountryScholarshipSerializer(ScholarshipSerializer):
class
CountryScholarshipViewSet
(
ScholarshipViewSet
):
permission_classes
=
get_viewset_permissions
(
"CountryScholarshipViewSet"
)
queryset
=
CountryScholarship
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CountryScholarshipSerializer
backend/models/location/countryTaggedItem.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.tag
import
TaggedItem
,
TaggedItemSerializer
,
TaggedItemViewSet
from
backend.models.location
import
Country
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
CountryTaggedItem
(
TaggedItem
):
moderation_level
=
get_moderation_level
(
"CountryTaggedItem"
)
country
=
models
.
OneToOneField
(
Country
,
on_delete
=
models
.
PROTECT
,
related_name
=
'country_items'
,
primary_key
=
True
)
...
...
@@ -22,6 +24,6 @@ class CountryTaggedItemSerializer(TaggedItemSerializer):
class
CountryTaggedItemViewSet
(
TaggedItemViewSet
):
permission_classes
=
get_viewset_permissions
(
"CountryTaggedItemViewSet"
)
queryset
=
CountryTaggedItem
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CountryTaggedItemSerializer
backend/models/location/currency.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
permissions
from
django.core.validators
import
MinValueValidator
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
Currency
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Currency"
)
code
=
models
.
CharField
(
primary_key
=
True
,
max_length
=
3
)
name
=
models
.
CharField
(
max_length
=
100
)
symbol
=
models
.
CharField
(
null
=
True
,
blank
=
True
,
max_length
=
30
)
...
...
@@ -22,6 +24,6 @@ class CurrencySerializer(MyModelSerializer):
class
CurrencyViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,)
# TODO : change
permission_classes
=
get_viewset_permissions
(
"CurrencyViewSet"
)
queryset
=
Currency
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CurrencySerializer
backend/models/my_model/forTestingModeration.py
View file @
7cc17dfe
...
...
@@ -2,12 +2,14 @@ from .myModel import MyModel
from
.myModelSerializer
import
MyModelSerializer
from
.myModelViewSet
import
MyModelViewSet
from
django.db
import
models
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
ForTestingModeration
(
MyModel
):
"""
Simple model for testing purposes
"""
moderation_level
=
get_moderation_level
(
"ForTestingModeration"
)
aaa
=
models
.
CharField
(
max_length
=
100
)
...
...
@@ -24,5 +26,6 @@ class ForTestingModerationViewSet(MyModelViewSet):
"""
Same as above
"""
permission_classes
=
get_viewset_permissions
(
"ForTestingModerationViewSet"
)
serializer_class
=
ForTestingModerationSerializer
queryset
=
ForTestingModeration
.
objects
.
all
()
backend/models/my_model/forTestingVersioning.py
View file @
7cc17dfe
from
.myModelVersionned
import
MyModelVersionned
,
MyModelVersionnedSerializer
,
MyModelVersionnedViewSet
from
django.db
import
models
import
reversion
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
@
reversion
.
register
()
...
...
@@ -8,6 +9,7 @@ class ForTestingVersioning(MyModelVersionned):
"""
Simple model for testing purposes
"""
moderation_level
=
get_moderation_level
(
"ForTestingVersioning"
)
bbb
=
models
.
CharField
(
max_length
=
100
)
@
classmethod
...
...
@@ -28,5 +30,6 @@ class ForTestingVersioningViewSet(MyModelVersionnedViewSet):
"""
Same as above
"""
permission_classes
=
get_viewset_permissions
(
"ForTestingVersioningViewSet"
)
serializer_class
=
ForTestingVersioningSerializer
queryset
=
ForTestingVersioning
.
objects
.
all
()
backend/models/my_model/myModel.py
View file @
7cc17dfe
...
...
@@ -23,3 +23,5 @@ class MyModel(models.Model):
class
Meta
:
abstract
=
True
moderation_level
=
None
backend/models/my_model/myModelVersionned.py
View file @
7cc17dfe
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.signals
import
new_revision_saved
from
rest_framework
import
serializers
,
permissions
,
mixins
,
viewsets
from
rest_framework
import
serializers
,
mixins
,
viewsets
import
reversion
from
reversion.models
import
Version
from
django.contrib.contenttypes.models
import
ContentType
from
django.core.serializers.base
import
DeserializationError
from
django.core
import
serializers
as
djangoSerializers
from
backend.utils
import
get_viewset_permissions
class
MyModelVersionned
(
MyModel
):
...
...
@@ -81,7 +82,7 @@ class VersionSerializer(serializers.ModelSerializer):
class
VersionViewSet
(
mixins
.
ListModelMixin
,
viewsets
.
GenericViewSet
):
# TODO better presentation
permission_classes
=
(
permissions
.
IsAuthenticated
,
)
permission_classes
=
get_viewset_permissions
(
"VersionViewSet"
)
serializer_class
=
VersionSerializer
def
get_queryset
(
self
):
...
...
backend/models/my_model/myModelViewSet.py
View file @
7cc17dfe
from
rest_framework
import
permissions
from
.myModelSerializer
import
MyModelSerializer
from
backend.
models.tools
import
NoDeleteIfNotAdmin
from
backend.
permissions
import
DEFAULT_VIEWSET_PERMISSIONS
from
backend.models.tools
import
DictModeViewSet
class
MyModelViewSet
(
DictModeViewSet
):
serializer_class
=
MyModelSerializer
permission_classes
=
(
permissions
.
IsAuthenticated
,
NoDeleteIfNotAdmin
,
)
permission_classes
=
DEFAULT_VIEWSET_PERMISSIONS
def
get_queryset
(
self
):
"""
...
...
backend/models/my_model/pendingModeration.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
serializers
,
viewsets
,
permissions
from
rest_framework
import
serializers
,
viewsets
from
django.contrib.contenttypes.models
import
ContentType
from
django.contrib.contenttypes.fields
import
GenericForeignKey
from
django.contrib.postgres.fields
import
JSONField
from
django.contrib.auth.models
import
User
from
backend.utils
import
get_viewset_permissions
,
get_moderation_level
class
PendingModeration
(
models
.
Model
):
moderation_level
=
get_moderation_level
(
"PendingModeration"
)
content_type
=
models
.
ForeignKey
(
ContentType
,
on_delete
=
models
.
CASCADE
)
object_id
=
models
.
CharField
(
max_length
=
100
)
# 100 should be ok
referenced_object
=
GenericForeignKey
(
'content_type'
,
'object_id'
)
...
...
@@ -36,6 +39,6 @@ class PendingModerationSerializer(serializers.ModelSerializer):
class
PendingModerationViewSet
(
viewsets
.
ModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,
)
permission_classes
=
get_viewset_permissions
(
"PendingModerationViewSet"
)
queryset
=
PendingModeration
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
PendingModerationSerializer
backend/models/other_core/department.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
rest_framework
import
permissions
from
backend.utils
import
get_moderation_level
,
get_viewset_
permissions
class
Department
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Department"
)
code
=
models
.
CharField
(
primary_key
=
True
,
max_length
=
6
)
name
=
models
.
CharField
(
max_length
=
100
)
active
=
models
.
BooleanField
()
...
...
@@ -16,6 +18,6 @@ class DepartmentSerializer(MyModelSerializer):
class
DepartmentViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,
)
permission_classes
=
get_viewset_permissions
(
"DepartmentViewSet"
)
queryset
=
Department
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
DepartmentSerializer
backend/models/other_core/offer.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
permissions
from
backend.models.university
import
University
from
backend.models.other_core
import
Semester
,
Specialty
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
Offer
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Offer"
)
semester
=
models
.
ForeignKey
(
Semester
,
on_delete
=
models
.
PROTECT
)
university
=
models
.
ForeignKey
(
University
,
on_delete
=
models
.
PROTECT
)
...
...
@@ -28,6 +29,6 @@ class OfferSerializer(MyModelSerializer):
class
OfferViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,
)
permission_classes
=
get_viewset_permissions
(
"OfferViewSet"
)
queryset
=
Offer
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
OfferSerializer
backend/models/other_core/semester.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
permissions
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
Semester
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Semester"
)
code
=
models
.
CharField
(
primary_key
=
True
,
max_length
=
6
)
...
...
@@ -14,6 +15,6 @@ class SemesterSerializer(MyModelSerializer):
class
SemesterViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,
)
permission_classes
=
get_viewset_permissions
(
"SemesterViewSet"
)
queryset
=
Semester
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
SemesterSerializer
backend/models/other_core/specialty.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
permissions
from
backend.models.other_core
import
Department
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
Specialty
(
MyModel
):
moderation_level
=
get_moderation_level
(
"Specialty"
)
code
=
models
.
CharField
(
max_length
=
6
)
department
=
models
.
ForeignKey
(
Department
,
on_delete
=
models
.
PROTECT
)
name
=
models
.
CharField
(
max_length
=
100
)
...
...
@@ -22,6 +23,6 @@ class SpecialtySerializer(MyModelSerializer):
class
SpecialtyViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAdminUser
,
)
permission_classes
=
get_viewset_permissions
(
"SpecialtyViewSet"
)
queryset
=
Specialty
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
SpecialtySerializer
backend/models/tag/tag.py
View file @
7cc17dfe
from
django.db
import
models
from
rest_framework
import
permissions
from
backend.models.my_model
import
MyModel
,
MyModelSerializer
,
MyModelViewSet
from
backend.models.tools
import
IsAdminOrReadOnly
from
django.contrib.postgres.fields
import
JSONField
from
backend.utils
import
get_viewset_permissions
,
get_moderation_level
class
Tag
(
MyModel
):
"""
TODO description
"""
moderation_level
=
get_moderation_level
(
"Tag"
)
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
)
config
=
JSONField
(
blank
=
True
,
default
=
dict
)
...
...
@@ -20,9 +21,6 @@ class TagSerializer(MyModelSerializer):
class
TagViewSet
(
MyModelViewSet
):
permission_classes
=
(
permissions
.
IsAuthenticated
,
IsAdminOrReadOnly
)
permission_classes
=
get_viewset_permissions
(
"TagViewSet"
)
queryset
=
Tag
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
TagSerializer
backend/models/tools/__init__.py
View file @
7cc17dfe
from
.DictModeViewSet
import
DictModeViewSet
# noqa: F401
from
.noDeleteIfNotAdmin
import
NoDeleteIfNotAdmin
# noqa: F401
from
.isOwner
import
IsOwner
# noqa: F401
from
.noDelete
import
NoDelete
# noqa: F401
from
.isAdminOrReadOnly
import
IsAdminOrReadOnly
# noqa: F401
backend/models/university/campus.py
View file @
7cc17dfe
...
...
@@ -3,9 +3,11 @@ from backend.models.module import BasicModule, BasicModuleSerializer, BasicModul
from
backend.models.location
import
City
from
backend.models.university
import
University
from
django.core.validators
import
MinValueValidator
,
MaxValueValidator
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
Campus
(
BasicModule
):
moderation_level
=
get_moderation_level
(
"Campus"
)
is_main_campus
=
models
.
BooleanField
(
null
=
False
)
name
=
models
.
CharField
(
max_length
=
200
,
null
=
True
)
...
...
@@ -47,10 +49,12 @@ class CampusSerializer(BasicModuleSerializer):
class
CampusViewSet
(
BasicModuleViewSet
):
permission_classes
=
get_viewset_permissions
(
"CampusViewSet"
)
queryset
=
Campus
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CampusSerializer
class
MainCampusViewSet
(
BasicModuleViewSet
):
permission_classes
=
get_viewset_permissions
(
"MainCampusViewSet"
)
queryset
=
Campus
.
objects
.
filter
(
is_main_campus
=
True
)
serializer_class
=
CampusSerializer
backend/models/university/campusTaggedItem.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.university
import
Campus
from
backend.models.tag
import
TaggedItem
,
TaggedItemSerializer
,
TaggedItemViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
CampusTaggedItem
(
TaggedItem
):
moderation_level
=
get_moderation_level
(
"CampusTaggedItem"
)
campus
=
models
.
OneToOneField
(
Campus
,
on_delete
=
models
.
PROTECT
,
related_name
=
'city_items'
,
primary_key
=
True
)
...
...
@@ -22,6 +24,6 @@ class CampusTaggedItemSerializer(TaggedItemSerializer):
class
CampusTaggedItemViewSet
(
TaggedItemViewSet
):
permission_classes
=
get_viewset_permissions
(
"CampusTaggedItemViewSet"
)
queryset
=
CampusTaggedItem
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
CampusTaggedItemSerializer
backend/models/university/university.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.my_model
import
MyModel
from
backend.utils.friendly_path
import
friendly_path
from
backend.utils
import
get_moderation_level
path_and_rename
=
friendly_path
(
"uploads/universities/logos/"
,
'name'
)
...
...
@@ -9,6 +10,8 @@ class University(MyModel):
"""
Model storing information about universities
"""
moderation_level
=
get_moderation_level
(
"University"
)
name
=
models
.
CharField
(
max_length
=
200
)
acronym
=
models
.
CharField
(
max_length
=
20
,
null
=
True
,
blank
=
True
)
logo
=
models
.
ImageField
(
upload_to
=
path_and_rename
,
max_length
=
250
,
...
...
backend/models/university/universityAPI.py
View file @
7cc17dfe
from
backend.models.university
import
University
from
rest_framework
import
permissions
from
backend.models.tools
import
NoDeleteIfNotAdmin
from
backend.models.my_model
import
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_viewset_permissions
class
UniversitySerializer
(
MyModelSerializer
):
...
...
@@ -12,10 +11,6 @@ class UniversitySerializer(MyModelSerializer):
class
UniversityViewSet
(
MyModelViewSet
):
permission_classes
=
get_viewset_permissions
(
"UniversityViewSet"
)
serializer_class
=
UniversitySerializer
permission_classes
=
(
permissions
.
IsAuthenticated
,
NoDeleteIfNotAdmin
,
)
queryset
=
University
.
objects
.
all
()
# pylint: disable=E1101
backend/models/university/universityDri.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.university
import
University
from
backend.models.module
import
DriRestrictedModule
,
DriRestrictedModuleSerializer
,
DriRestrictedModuleViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
UniversityDri
(
DriRestrictedModule
):
moderation_level
=
get_moderation_level
(
"UniversityDri"
)
university
=
models
.
ManyToManyField
(
University
,
related_name
=
"university_dri"
)
...
...
@@ -20,5 +22,6 @@ class UniversityDriSerializer(DriRestrictedModuleSerializer):
class
UniversityDriViewSet
(
DriRestrictedModuleViewSet
):
permission_classes
=
get_viewset_permissions
(
"UniversityDriViewSet"
)
queryset
=
UniversityDri
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
UniversityDriSerializer
backend/models/university/universityInfo.py
View file @
7cc17dfe
...
...
@@ -3,9 +3,11 @@ from backend.models.module import BasicModule, BasicModuleSerializer, BasicModul
from
backend.models.university
import
University
from
backend.models.location
import
Currency
from
django.core.validators
import
MinValueValidator
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
UniversityInfo
(
BasicModule
):
moderation_level
=
get_moderation_level
(
"UniversityInfo"
)
university
=
models
.
OneToOneField
(
University
,
on_delete
=
models
.
CASCADE
,
related_name
=
'university_info'
,
primary_key
=
True
,
null
=
False
)
...
...
@@ -39,5 +41,6 @@ class UniversityInfoSerializer(BasicModuleSerializer):
class
UniversityInfoViewSet
(
BasicModuleViewSet
):
permission_classes
=
get_viewset_permissions
(
"UniversityInfoViewSet"
)
queryset
=
UniversityInfo
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
UniversityInfoSerializer
backend/models/university/universityModulesAPI.py
View file @
7cc17dfe
...
...
@@ -3,6 +3,7 @@ from backend.models.university.campus import CampusSerializer
from
backend.models.university
import
UniversityDriSerializer
from
backend.models.my_model
import
MyModelSerializer
,
MyModelViewSet
from
backend.utils
import
get_viewset_permissions
class
UniversityModulesSerializer
(
MyModelSerializer
):
...
...
@@ -15,7 +16,7 @@ class UniversityModulesSerializer(MyModelSerializer):
class
UniversityModulesViewSet
(
MyModelViewSet
):
permission_classes
=
get_viewset_permissions
(
"UniversityModulesViewSet"
)
serializer_class
=
UniversityModulesSerializer
def
get_queryset
(
self
):
...
...
backend/models/university/universityScholarship.py
View file @
7cc17dfe
from
django.db
import
models
from
backend.models.university
import
University
from
backend.models.module
import
Scholarship
,
ScholarshipSerializer
,
ScholarshipViewSet
from
backend.utils
import
get_moderation_level
,
get_viewset_permissions
class
UniversityScholarship
(
Scholarship
):
moderation_level
=
get_moderation_level
(
"UniversityScholarship"
)
university
=
models
.
ForeignKey
(
University
,
on_delete
=
models
.
PROTECT
,
null
=
False
,
related_name
=
"univScholarship"
)
...
...
@@ -20,5 +22,7 @@ class UniversityScholarshipSerializer(ScholarshipSerializer):
class
UniversityScholarshipViewSet
(
ScholarshipViewSet
):
permission_classes
=
get_viewset_permissions
(
"UniversityScholarshipViewSet"
)
queryset
=
UniversityScholarship
.
objects
.
all
()
# pylint: disable=E1101
serializer_class
=
UniversityScholarshipSerializer
backend/models/university/universitySemestersDates.py
View file @
7cc17dfe
...
...
@@ -2,6 +2,7 @@ from django.db import models
from
backend.models.module
import
BasicModule
,
BasicModuleSerializer
,
BasicModuleViewSet
from
backend.models.university
import
University
from
rest_framework
import
serializers