Skip to content

Commit 653d5dd

Browse files
authored
Feature/1133: interoperability (#1210)
* Add more field to Observation Serializer * Add pagination to site list * Fix tests * Fix another test * Add test settings
1 parent c5a10b8 commit 653d5dd

File tree

19 files changed

+1595
-2390
lines changed

19 files changed

+1595
-2390
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ test:
3838
@echo "------------------------------------------------------------------"
3939
@echo "Running test"
4040
@echo "------------------------------------------------------------------"7
41-
@docker compose exec django bash -c "python manage.py test"
41+
@docker compose exec django bash -c "python manage.py test --settings=minisass.settings.test"
4242

4343
dev:
4444
@echo
4545
@echo "------------------------------------------------------------------"
4646
@echo "Running in dev mode"
4747
@echo "------------------------------------------------------------------"
48-
@docker compose ${ARGS} --profile dev up -d
48+
@docker compose ${ARGS} --profile dev --env-file .env up -d
4949

5050
frontend-dev:
5151
@echo

django_project/manage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44

55
if __name__ == "__main__":
6-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "minisass.settings")
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "minisass.settings.default")
77

88
from django.core.management import execute_from_command_line
99

django_project/minisass/settings/__init__.py

Whitespace-only changes.

django_project/minisass/settings.py renamed to django_project/minisass/settings/default.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
'BACKEND': 'django.template.backends.django.DjangoTemplates',
152152
'DIRS': [
153153
os.path.join(FRONTEND_PATH, 'templates'),
154-
os.path.join(PROJECT_PATH, 'templates'),
154+
os.path.join(PROJECT_PATH, '../templates'),
155155
os.path.join(PROJECT_PATH.replace('/minisass', '/minisass_authentication'), 'templates', 'registration'),
156156
os.path.join(PROJECT_PATH, 'monitor' , 'templates' , 'monitor')
157157
],
@@ -287,3 +287,5 @@
287287
MINIO_SECRET_KEY = os.getenv("MINIO_SECRET_KEY") or os.getenv("AWS_SECRET_ACCESS_KEY")
288288
MINIO_AI_BUCKET = os.getenv("MINIO_BUCKET")
289289
MINIO_ENDPOINT = os.getenv("MINIO_URL")
290+
291+
ENABLE_GEOCODING = True
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from minisass.settings.default import *
2+
3+
ENABLE_GEOCODING = False

django_project/minisass/wsgi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
# sys.path.append("/home/django/sites/miniSASS/miniSASS")
2121
# sys.path.append("/home/web/django_project")
2222

23-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "minisass.settings")
23+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "minisass.settings.default")
2424

2525
# This application object is used by any WSGI server configured to use this
2626
# file. This includes Django's development server, if the WSGI_APPLICATION

django_project/minisass_authentication/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def create(self, validated_data):
2626

2727

2828
class UserUpdateSerializer(serializers.ModelSerializer):
29+
user_id = serializers.CharField(required=False, source='id')
2930
username = serializers.CharField(required=False)
3031
email = serializers.EmailField(required=True)
3132
name = serializers.CharField(source='first_name')
@@ -36,7 +37,6 @@ class UserUpdateSerializer(serializers.ModelSerializer):
3637
is_expert = serializers.SerializerMethodField()
3738
upload_preference = serializers.CharField(source='userprofile.upload_preference', required=True, allow_null=False)
3839

39-
4040
def get_is_expert(self, obj):
4141
try:
4242
return obj.userprofile.is_expert
@@ -88,7 +88,7 @@ def save(self, old_user):
8888
class Meta:
8989
model = User
9090
fields = (
91-
'username', 'email', 'name', 'surname',
91+
'user_id', 'username', 'email', 'name', 'surname',
9292
'organisation_type', 'organisation_name', 'country', 'is_expert', 'upload_preference'
9393
)
9494

django_project/minisass_authentication/tests/test_views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ def test_update_works(self):
186186
self.assertEquals(response.status_code, 200)
187187
expected_response = self.base_payload
188188
expected_response['is_expert'] = False
189+
expected_response['user_id'] = str(self.user.id)
189190
self.assertEquals(
190191
response.json(),
191192
expected_response

django_project/minisass_authentication/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
activate_account,
1010
CheckAuthenticationStatus,
1111
check_registration_status,
12-
user_login,
12+
UserLoginView,
1313
register,
1414
request_password_reset,
1515
verify_password_reset,
@@ -35,7 +35,7 @@
3535
path('api/reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
3636
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
3737
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
38-
path('api/login/', user_login, name='user_login'),
38+
path('api/login/', UserLoginView.as_view(), name='user_login'),
3939
path('api/register/', register, name='register'),
4040
path('api/logout/', UserLogout.as_view(), name='user-logout'),
4141
path('api/user/update/', UpdateUser.as_view(), name='profile-update'),

django_project/minisass_authentication/views.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from datetime import timedelta
22
from django.conf import settings
3+
from django.views.decorators.csrf import csrf_exempt
34
from django.contrib.auth import (
45
authenticate,
56
login,
@@ -123,7 +124,7 @@ def contact_us(request):
123124
domain = Site.objects.get_current().domain
124125

125126
mail_subject = 'Contact Us'
126-
message = render_to_string('contact_us.html', {
127+
message = render_to_string('registration/contact_us.html', {
127128
'from': email,
128129
'name': name,
129130
'contact': phone,
@@ -329,7 +330,7 @@ def register(request):
329330
)
330331

331332
mail_subject = 'Activate account on miniSASS'
332-
message = render_to_string('activate_account.html', {
333+
message = render_to_string('registration/activate_account.html', {
333334
'domain': domain,
334335
'activation_link': activation_link,
335336
'name': username
@@ -455,19 +456,23 @@ def create_long_lived_refresh_token(user, days=90):
455456
return refresh
456457

457458

458-
@api_view(['POST'])
459-
def user_login(request):
460-
if request.method == 'POST':
459+
from django.utils.decorators import method_decorator
461460

461+
462+
class UserLoginView(APIView):
463+
permission_classes = [AllowAny]
464+
authentication_classes = [] # No authentication required for login
465+
466+
def post(self, request):
462467
email = request.data.get('email')
463468
password = request.data.get('password')
464469
app = request.GET.get('app', 'web')
465-
470+
466471
user = authenticate(request, email=email, password=password)
467-
472+
468473
if user:
469474
login(request, user)
470-
475+
471476
access_token = RefreshToken.for_user(user).access_token
472477

473478
# Check if first name is "Anonymous"
@@ -477,6 +482,7 @@ def user_login(request):
477482
else:
478483
is_profile_updated = get_is_user_password_enforced(user, password)
479484
has_consented = get_user_privacy_consent(user)
485+
480486
priv_pol = PrivacyPolicy.objects.order_by("-published_at").first()
481487
priv_pol_ver = priv_pol.version if priv_pol else None
482488

0 commit comments

Comments
 (0)