Skip to content

Commit

Permalink
Early November update (#924)
Browse files Browse the repository at this point in the history
* Feat(kontres)/add image to bookable item (#785)

* added optional image to bookable item model

* added update method in serializer to handle new images

* linting

* remove update method for images

* Feat(kontres)/add approved by (#786)

* added approved by field

* endpoint will now set approved by

* serializer will return full user object in approved_by_detail

* created test for approved by

* migration

* remove unnecessary code

* removed write-only field in approved-by context

* Create minutes for Codex (#787)

* init

* format

* Feat(minute)/viewset (#788)

* added richer reponse on post and put

* added to admin panel

* added filter for minute

* Feat(kontres)/add notification (#790)

* created methods for sending notification to admin and user

* endpoint will now send notification if needed

* add migrations for new notification types

* Memberships with fines activated (#791)

init

* Feat(user)/user bio (#758)

* Created model, serializer and view for user-bio

* Created user bio model and made migrations

* Created user bio serializer + viewsets + added new endpoint

* Tested create method + added bio serializer to user serializer

* Format

* Created update method and started testing

* Debugging test failures in user retrieve

* fixed model error

* Created user_bio_factory + started testing put method

* Created fixture for UserBio

* Created custom excpetion for duplicate user bio

* Added permissions and inherited from BaseModel

* Modularized serializer for bio

* Use correct serializers in viewset + added destroy method

* Finished testing bio viewset integration + format

* Changed environent file to .env to avoid pushing up keys

* Fix: Flipped assertion statement in test, since user bio should not be deleted

* skiped buggy test from kontres

* added mark to pytest.skip

* Moved keys to .env file and reverted docker variables

* Skip buggy kontres test

* format

* Added str method to user_bio

* Removed unused imports

* format

* Changed user relation to a OneToOne-field (same affect as ForeignKey(unique=True) + removed check for duplicate bio in serializer

* Migrations + changed assertion status code in duplicate bio test (could try catch in serializer to produce 400 status code)

* format

* format

* Changed limit for description 50 -> 500 + migrations

* Migrate

* added id to serializer

* merged leaf nodes in migrations

* format

---------

Co-authored-by: Ester2109 <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>
Co-authored-by: Tam Le <[email protected]>

* Update CHANGELOG.md

* added filter for allowed photos for user (#794)

added filter for allowed photos

* Upped payment time when coming from waiting list (#796)

* fixed paymenttime saved to db (#798)

* fixed bug (#800)

* Disallow users to unregister when payment is done (#802)

added 400 status code for deleting paid registration

* update changelog

* Added serializer for category in  event (#804)

added serializer for category in  event

* Permission middelware (#806)

* added a check for existing user and id on request

* format

* Permission refactor of QR Codes (#807)

* added permissions to qr code and refactored viewset

* format

* removed unused imports

* Permissions for payment orders (#808)

* added read permissions

* added permissions for payment order and tests

* format

* chore(iac): updated docs and force https (#810)

chore: updated docs and force https

* feat(iac): add terraform guardrails so index don't nuke our infra (#811)

feat: add guardrails so index don't fup

* Automatic registration for new users with Feide (#809)

* started on feide registration endpoint

* made endpoint for creating user with Feide

* added test for parse group

* finished

* format

* removes three years if in digtrans

* changelog update

* Feide env variables Terraform (#814)

added feid env variables

* added delete endpoint for file (#815)

* added delete endpoint for file

* Trigger Build

* changed workflow to checkout v4

* changed from docker-compose to docker compose

* Update CHANGELOG.md

* format

* format

* fixed permission for committee leaders for group forms

* updated csv for forms (#818)

* Permission for group forms and news (#820)

added permission for committees to create news, and all leaders of groups to create group forms

* Update reservation_seralizer.py (#822)

* Update reservation_seralizer.py

* Fixed linting

* Put a band aid on it *smack*

* Removed blank line..

* ????

* Group ownership of Minutes (#847)

* Refactor MinuteFactory to include group field, and added validation for checkin group access

* added validation for POST request

* Changed endpoint response (#846)

* Changed endpoint response

* Fixed test

* Update test_reservation_integration.py

---------

Co-authored-by: Mads Nylund <[email protected]>

* updated changelog.md

* finished events now appear in the correct order (newest first) (#849)

* finished events now appear in the correct order (newest first)

* added description of change in changelog

* fixed formatting

* updated method to use Django ORM instead of using python methods

* Implement Swagger (#858)

* started on removing choiceenums

* refactored cheatsheet and membership

* refacotered strike enum

* refactored Groups enum

* removed AppModel choiceenum

* added swagger

* Swagger GitHub Action (#860)

* added github action for checking if Swagger is up

* new action

* try another

* tried implementing check for container

* added curl to docker image

* added check if swagger is up

* test if swagger does not get status code 200

* added ?format=openai to trigger error

* checking that the request is working

* updated CHANGELOG.md

* Add new app (#862)

* added script for adding new app to Lepton

* added command to Makefile

* Upgrade all dependencies to latest (#857)

* Add endpoint to create new group as admin

Signed-off-by: Tmpecho <[email protected]>

* Upgrade all dependencies to latest

Signed-off-by: Tmpecho <[email protected]>

* remove bad exception handling in serializers/group.py

* fix inheritance ordering in views/group.py

* refactored group integration test, added non_public_groups to enums

* fix linting

* reformat files

* remove unused import in groups/views/group.py

* Upgrade dependency "black"

Signed-off-by: Tmpecho <[email protected]>

* Upgrade dependency "sentry-sdk"

Signed-off-by: Tmpecho <[email protected]>

* Upgrade dependency "azure-storage-blob" and remove outdated comment in requirements.txt

Signed-off-by: Tmpecho <[email protected]>

* Upgrade all non-django dependencies

Signed-off-by: Tmpecho <[email protected]>

* Upgrade dependency "Django"

Signed-off-by: Tmpecho <[email protected]>

* Upgrade dependencies and remove ignored version from docker-compose.yml

Signed-off-by: Tmpecho <[email protected]>

---------

Signed-off-by: Tmpecho <[email protected]>
Co-authored-by: 1Cezzo <[email protected]>

* Allow HS members to create a new group (#864)

* Add endpoint to create new group as admin

Signed-off-by: Tmpecho <[email protected]>

* remove bad exception handling in serializers/group.py

* fix inheritance ordering in views/group.py

* refactored group integration test, added non_public_groups to enums

* fix linting

* reformat files

* remove unused import in groups/views/group.py

---------

Signed-off-by: Tmpecho <[email protected]>
Co-authored-by: 1Cezzo <[email protected]>

* App Script Fix (#875)

added serializers dir to script

* Event registration payment orders (#876)

* added list of payment orders for registrations

* update CHANGELOG.md

* chore(deps): update python-dotenv requirement from ~=0.21.1 to ~=1.0.1 (#871)

Updates the requirements on [python-dotenv](https://github.com/theskumar/python-dotenv) to permit the latest version.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](theskumar/python-dotenv@v0.21.1...v1.0.1)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Chore(deps): Bump sentry-sdk from 1.14.0 to 2.8.0 (#866)

Bumps [sentry-sdk](https://github.com/getsentry/sentry-python) from 1.14.0 to 2.8.0.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](getsentry/sentry-python@1.14.0...2.8.0)

---
updated-dependencies:
- dependency-name: sentry-sdk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Codex Course (#852)

* added models for course and registration, and viewset for course and tests

* added validation for date checking for courses

* added viewset for registration for codex courses

* removed unused fields from course model

* removed unused imports

* added API error mixins as mother clas

* fixed error mixin

* refactored to event model

* fixed wrong import

* fixed tests

* format

* skipped broken tests, must be refactored

* updated CHANGELOG.md

* format

* fixed filtering of groups and made tests

* fixed list endpoint for cheatsheets

* trigger

* format

* Endpoint for sending email (#883)

* fix formatting

* created tests for send_email endpoint

* Fix code scanning alert no. 45: Information exposure through an exception

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* fixed errors in send_email and in tests

* lint

* added tests for empty lists and for sending mail to multiple users

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* chore(deps): bump black from 24.3.0 to 24.8.0 (#869)

Bumps [black](https://github.com/psf/black) from 24.3.0 to 24.8.0.
- [Release notes](https://github.com/psf/black/releases)
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
- [Commits](psf/black@24.3.0...24.8.0)

---
updated-dependencies:
- dependency-name: black
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* chore(deps): Bump azure-storage-blob from 12.13.1 to 12.23.1 (#885)

Bumps [azure-storage-blob](https://github.com/Azure/azure-sdk-for-python) from 12.13.1 to 12.23.1.
- [Release notes](https://github.com/Azure/azure-sdk-for-python/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-python/blob/main/doc/esrp_release.md)
- [Commits](Azure/azure-sdk-for-python@azure-storage-blob_12.13.1...azure-storage-blob_12.23.1)

---
updated-dependencies:
- dependency-name: azure-storage-blob
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Added admin.py to root in new app, and added app dir to tests (#892)

added admin.py to root in new app, and added app dir to tests

* Description to forms (#894)

added description to form

* Bug report system (#865)

* Created New App named Index

* created model

* Refactor: Change admin file

* admin

* added serializer and viewsets for list

* fixed typing error for permission_classes

* Started on the create serializer for feedback

* Made tests for create feedback

* Implemented update serializer for feedback

* made destroy method and testing create method as member

* Made destroy method and tests

* Fixed linting

* Fixed linting

---------

Co-authored-by: Tam Le <[email protected]>
Co-authored-by: Josefine Arntsen <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>

* Renaming of index app to feedback (#901)

renamed index app to feedback

* chore(deps): bump django from 4.2.16 to 5.1.1 (#889)

Bumps [django](https://github.com/django/django) from 4.2.16 to 5.1.1.
- [Commits](django/django@4.2.16...5.1.1)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Event registration race condition (#902)

* started on fixing race condition

* fixed race condition

* upadted CHANGELOG.md

* Feat(registration)/filter participants (#895)

* filtering by year and study

* linting fix

* added allergy filter

* added filter by allergies and participants with allergy count to event.

* Lint fix

* Add new fixture for admin user

* Start testing filtering + finished allergy filter test

* Added integration test for participants filtering

* lint fix

* removed unused import

* Update changelog

* merge with dev and more filters

* Fixed has_paid filter and added filter combination test

* ran linting script

---------

Co-authored-by: Harry Linrui XU <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>

* Feat(registration)/filter participants (#915)

* filtering by year and study

* linting fix

* added allergy filter

* added filter by allergies and participants with allergy count to event.

* Lint fix

* Add new fixture for admin user

* Start testing filtering + finished allergy filter test

* Added integration test for participants filtering

* lint fix

* removed unused import

* Update changelog

* merge with dev and more filters

* Fixed has_paid filter and added filter combination test

* ran linting script

* fixed has allergy count bug, and has_paid bug

* post linting

---------

Co-authored-by: Harry Linrui XU <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>

* Fix issue where full error is exposed to external users (#914)

Signed-off-by: Tmpecho <[email protected]>

* chore(deps): Bump sentry-sdk from 2.8.0 to 2.14.0 (#893)

Bumps [sentry-sdk](https://github.com/getsentry/sentry-python) from 2.8.0 to 2.14.0.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](getsentry/sentry-python@2.8.0...2.14.0)

---
updated-dependencies:
- dependency-name: sentry-sdk
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Refactor/minor code cleanup (#884)

* Prefix unused variable names with underscore, remove redundant parenthesis, split long lines into several, rename functions to snake_case,

Signed-off-by: Tmpecho <[email protected]>

* Update CHANGELOG.md

Signed-off-by: Tmpecho <[email protected]>

* Make constant uppercase

Signed-off-by: Tmpecho <[email protected]>

* Empty-Commit

---------

Signed-off-by: Tmpecho <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>

* Add default detail to custom exceptions (#916)

Signed-off-by: Tmpecho <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>

* chore(deps): bump uvicorn from 0.30.6 to 0.32.0 (#908)

Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.30.6 to 0.32.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](encode/uvicorn@0.30.6...0.32.0)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* chore(deps): Bump pre-commit from 3.8.0 to 4.0.1 (#899)

Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.8.0 to 4.0.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](pre-commit/pre-commit@v3.8.0...v4.0.1)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mads Nylund <[email protected]>

* Feat(registration)/filter participants (#917)


Fixed bugs introduced in an earlier pr

---------

Co-authored-by: Harry Linrui XU <[email protected]>
Co-authored-by: Mads Nylund <[email protected]>
Co-authored-by: haruixu <[email protected]>

---------

Signed-off-by: Tmpecho <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Erik Skjellevik <[email protected]>
Co-authored-by: haruixu <[email protected]>
Co-authored-by: Ester2109 <[email protected]>
Co-authored-by: Tam Le <[email protected]>
Co-authored-by: martcl <[email protected]>
Co-authored-by: Frikk Balder <[email protected]>
Co-authored-by: Emil Johnsen <[email protected]>
Co-authored-by: Johannes Aamot-Skeidsvoll <[email protected]>
Co-authored-by: 1Cezzo <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Josefine Arntsen <[email protected]>
Co-authored-by: Josefine Arntsen <[email protected]>
Co-authored-by: Yazan Zarka <[email protected]>
Co-authored-by: Harry Linrui XU <[email protected]>
  • Loading branch information
16 people authored Nov 4, 2024
1 parent 8c8199a commit 78bed9b
Show file tree
Hide file tree
Showing 69 changed files with 444 additions and 217 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@

## Neste versjon

## Versjon 2024.11.04
- 🎨**Overordnet**. Endret variabel og funksjonsnavn til å følge konvensjoner og andre små endringer.
-**Filtrering**. Admin kan nå filtere deltakere av et arrangement på studie, studieår, om deltakere har allergier, (om deltakere godtar å bli tatt bilde av, om deltakere har ankommet), i tillegg til søk på fornavn og etternavn.

## Versjon 2024.10.11
-**Tilbakemelding-funksjon**. Man kan nå opprette tilbakemeldinger for bugs og idé.
- 🦟 **Påmelding**. Det vil nå ikke være mulig med flere påmeldinger på et arrangement enn maksgrensen.
Expand Down
1 change: 1 addition & 0 deletions app/authentication/serializers/change_password.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class ChangePasswordSerializer(serializers.Serializer):
set_password_form_class = SetPasswordForm

def __init__(self, *args, **kwargs):
self.set_password_form = None
self.old_password_field_enabled = getattr(
settings, "OLD_PASSWORD_FIELD_ENABLED", True
)
Expand Down
5 changes: 5 additions & 0 deletions app/authentication/serializers/reset_password.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from django.contrib.auth.forms import PasswordResetForm
from rest_framework import serializers
from rest_framework.fields import empty

from sentry_sdk import capture_exception

Expand All @@ -16,6 +17,10 @@ class PasswordResetSerializer(serializers.Serializer):
email = serializers.EmailField()
password_reset_form_class = PasswordResetForm

def __init__(self, instance=None, data=empty, **kwargs):
super().__init__(instance, data, kwargs)
self.reset_form = None

def validate_email(self, value):
# Create PasswordResetForm with the serializer
try:
Expand Down
10 changes: 5 additions & 5 deletions app/badge/filters/badge.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ class UserWithBadgesFilter(FilterSet):
queryset=BadgeCategory.objects.all(),
)

def filter_category(self, queryset, name, value):
def filter_category(self, queryset, _name, value):
return queryset.filter(user_badges__badge__badge_category=value)

def filter_is_in_study(self, queryset, name, value):
def filter_is_in_study(self, queryset, _name, value):
return queryset.filter(
memberships__group__slug=value, memberships__group__type=GroupType.STUDY
)

def filter_is_in_studyyear(self, queryset, name, value):
def filter_is_in_studyyear(self, queryset, _name, value):
return queryset.filter(
memberships__group__slug=value, memberships__group__type=GroupType.STUDYYEAR
)
Expand All @@ -49,7 +49,7 @@ class UserWithSpecificBadgeFilter(FilterSet):
study = filters.NumberFilter(method="filter_study")
studyyear = filters.NumberFilter(method="filter_studyyear")

def filter_study(self, queryset, name, value):
def filter_study(self, queryset, _name, value):
return queryset.filter(
Exists(
Membership.objects.filter(
Expand All @@ -60,7 +60,7 @@ def filter_study(self, queryset, name, value):
)
)

def filter_studyyear(self, queryset, name, value):
def filter_studyyear(self, queryset, _name, value):
return queryset.filter(
Exists(
Membership.objects.filter(
Expand Down
4 changes: 2 additions & 2 deletions app/career/filters/job_post.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ class Meta:
model: JobPost
fields = ["expired", "job_type"]

def filter_expired(self, queryset, name, value):
def filter_expired(self, queryset, _name, value):
if value:
return queryset.filter(deadline__lt=yesterday()).order_by("-deadline")
return queryset.filter(deadline__gte=yesterday()).order_by("deadline")

def filter_classes(self, queryset, name, value):
def filter_classes(self, queryset, _name, value):
query = Q()
for year in value:
query |= Q(class_start__lte=year, class_end__gte=year)
Expand Down
13 changes: 7 additions & 6 deletions app/career/views/weekly_business.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@


class WeeklyBusinessViewSet(BaseViewSet):

queryset = WeeklyBusiness.objects.none()
serializer_class = WeeklyBusinessSerializer
permission_classes = [BasicViewPermission]
Expand All @@ -30,7 +29,7 @@ def get_queryset(self):
in_future_this_year_filter = Q(year=now().year) & Q(week__gte=week_nr(now()))
next_year_filter = Q(year__gt=now().year)
return WeeklyBusiness.objects.filter(
(in_future_this_year_filter) | next_year_filter
in_future_this_year_filter | next_year_filter
).order_by("year", "week")

def list(self, request, *args, **kwargs):
Expand All @@ -57,9 +56,10 @@ def create(self, request, *args, **kwargs):
return Response(
{"detail": serializer.errors}, status=status.HTTP_400_BAD_REQUEST
)
except ValueError as value_error:
except ValueError:
return Response(
{"detail": str(value_error)}, status=status.HTTP_400_BAD_REQUEST
{"detail": "En feil oppstod under behandlingen av forespørselen."},
status=status.HTTP_400_BAD_REQUEST,
)

def update(self, request, pk):
Expand All @@ -78,9 +78,10 @@ def update(self, request, pk):
return Response(
{"detail": serializer.errors}, status=status.HTTP_400_BAD_REQUEST
)
except ValueError as value_error:
except ValueError:
return Response(
{"detail": str(value_error)}, status=status.HTTP_400_BAD_REQUEST
{"detail": "En feil oppstod under behandlingen av forespørselen."},
status=status.HTTP_400_BAD_REQUEST,
)

def destroy(self, request, *args, **kwargs):
Expand Down
8 changes: 6 additions & 2 deletions app/codex/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@ class APICodexEventEndRegistrationDateBeforeStartRegistrationDate(APIException):


class CodexEventEndRegistrationDateAfterStartDate(ValueError):
pass
default_detail = (
"Sluttdatoen for påmelding kan ikke være etter startdatoen for kurset"
)


class CodexEventEndRegistrationDateBeforeStartRegistrationDate(ValueError):
pass
default_detail = (
"Sluttdatoen for påmelding kan ikke være før startdatoen for påmelding"
)
8 changes: 2 additions & 6 deletions app/codex/util/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@

def validate_event_dates(data: dict):
if data["end_registration_at"] > data["start_date"]:
raise CodexEventEndRegistrationDateAfterStartDate(
"Påmeldingsslutt kan ikke være etter kursstart"
)
raise CodexEventEndRegistrationDateAfterStartDate()

if data["end_registration_at"] < data["start_registration_at"]:
raise CodexEventEndRegistrationDateBeforeStartRegistrationDate(
"Påmeldingsslutt kan ikke være før påmeldingsstart"
)
raise CodexEventEndRegistrationDateBeforeStartRegistrationDate()
22 changes: 11 additions & 11 deletions app/common/azure_file_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def __init__(self, blob=None, url=None):
self.blob = blob
self.url = url
if url:
data = self.getContainerAndNameFromUrl()
data = self.get_container_and_name_from_url()
self.containerName = data[0]
self.blobName = data[1]

Expand All @@ -29,24 +29,24 @@ def get_or_create_container(self, name="default"):
container = blob_service_client.create_container(name, public_access="blob")
return container

def getContainerAndNameFromUrl(self):
def get_container_and_name_from_url(self):
import urllib.parse

url = urllib.parse.unquote(self.url)
# fmt: off
return re.sub("\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*/", "", url).split("/") # noqa: W605
return re.sub("\w+:/{2}[\d\w-]+(\.[\d\w-]+)*/", "", url).split("/") # noqa: W605
# fmt: on

def uploadBlob(self):
"Uploads the given blob to Azure and returns a url to the blob"
def upload_blob(self):
"""Uploads the given blob to Azure and returns a url to the blob"""
if not self.blob:
raise ValueError("Du må sende med en blob for som skal lastes opp")

self.checkBlobSize()
containerName = self.getContainerNameFromBlob()
container = self.get_or_create_container(containerName)
self.check_blob_size()
container_name = self.get_container_name_from_blob()
container = self.get_or_create_container(container_name)

blob_name = f"{uuid.uuid4()}{self.getBlobName()}"
blob_name = f"{uuid.uuid4()}{self.get_blob_name()}"

content_settings = ContentSettings(
content_type=self.blob.content_type if self.blob.content_type else None,
Expand All @@ -62,8 +62,8 @@ def uploadBlob(self):
return blob_client.url
raise ValueError("Noe gikk galt under filopplastningen")

def deleteBlob(self):
"Delete a blob by it's url"
def delete_blob(self):
"""Delete a blob by it's url"""
if not self.blobName and not self.containerName:
raise ValueError("Du kan ikke slette en blob uten en url")

Expand Down
4 changes: 2 additions & 2 deletions app/common/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,11 @@ class AdminGroup(models.TextChoices):

@classmethod
def all(cls):
return (cls.HS, cls.INDEX, cls.NOK, cls.PROMO, cls.SOSIALEN, cls.KOK)
return cls.HS, cls.INDEX, cls.NOK, cls.PROMO, cls.SOSIALEN, cls.KOK

@classmethod
def admin(cls):
return (cls.HS, cls.INDEX)
return cls.HS, cls.INDEX


class Groups(models.TextChoices):
Expand Down
10 changes: 5 additions & 5 deletions app/common/file_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@ def __init__(self, blob=None):
def get_or_create_container(self, name="default"):
pass

def getBlobName(self):
def get_blob_name(self):
return self.blob.name if self.blob.name else ""

def getContainerNameFromBlob(self):
def get_container_name_from_blob(self):
return (
"".join(e for e in self.blob.content_type if e.isalnum())
if self.blob.content_type
else "default"
)

def checkBlobSize(self):
def check_blob_size(self):
if self.blob.size > self.SIZE_50_MB:
raise ValueError("Filen kan ikke være større enn 50 MB")

@abstractmethod
def uploadBlob(self):
def upload_blob(self):
pass


Expand All @@ -43,6 +43,6 @@ def replace_file(instance_image, validated_data_image):
if instance_image and instance_image != validated_data_image:
if settings.AZURE_BLOB_STORAGE_NAME in instance_image:
try:
AzureFileHandler(url=instance_image).deleteBlob()
AzureFileHandler(url=instance_image).delete_blob()
except Exception as e:
capture_exception(e)
2 changes: 1 addition & 1 deletion app/common/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@


@app.task(bind=True, base=BaseTask)
def delete_old_log_entries(self, *args, **kwargs):
def delete_old_log_entries(self, *_args, **_kwargs):
from datetime import timedelta

from django.contrib.admin.models import LogEntry
Expand Down
2 changes: 1 addition & 1 deletion app/common/tests/test_azure_filehandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ def test_get_getContainerAndNameFromUrl():
handler = AzureFileHandler(
url=f"https://{settings.AZURE_BLOB_STORAGE_NAME}/{container_name}/{file_name}"
)
data = handler.getContainerAndNameFromUrl()
data = handler.get_container_and_name_from_url()
assert data[0] == container_name
assert data[1] == file_name
12 changes: 6 additions & 6 deletions app/communication/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ class APIAnotherVisibleBannerException(APIException):
default_detail = "Det finnes allerede et banner som er synlig i samme tidsrom"


class AnotherVisibleBannerError(ValidationError):
default_detail = "Det finnes allerede et banner som er synlig i samme tidsrom"


class APIDatesMixedException(APIException):
status_code = status.HTTP_400_BAD_REQUEST
default_detail = "Datoen banneret er synlig til er satt etter datoen banneret for synlig fra. Bytt om disse to"


class AnotherVisibleBannerError(ValidationError):
pass


class DatesMixedError(ValidationError):
pass
default_detail = "Datoen banneret er synlig til er satt etter datoen banneret for synlig fra. Bytt om disse to"


class APIAllChannelsUnselected(APIException):
Expand All @@ -27,4 +27,4 @@ class APIAllChannelsUnselected(APIException):


class AllChannelsUnselected(ValueError):
pass
default_detail = "Du må velge minst en kommunikasjonsmetode"
2 changes: 1 addition & 1 deletion app/communication/factories/mail_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Meta:
body = factory.Faker("paragraph", nb_sentences=10)

@factory.post_generation
def users(self, create, extracted, **kwargs):
def users(self, create, extracted, **_kwargs):
"""Add users to the mail: `MailFactory.create(users=(user1, user2, user3))`"""
if not create or not extracted:
# Simple build, or nothing to add, do nothing.
Expand Down
2 changes: 1 addition & 1 deletion app/communication/models/banner.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,5 @@ def is_visible(self):
return self.visible_from <= now() <= self.visible_until

@classmethod
def has_visible_permission(cls, request):
def has_visible_permission(cls, _request):
return True
5 changes: 3 additions & 2 deletions app/communication/models/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class Meta:
def send(self, connection):
from app.communication.notifier import send_html_email

emails = (user.email for user in self.users.all())
emails = [user.email for user in self.users.all()]
is_success = send_html_email(
to_mails=emails,
html=self.body,
Expand All @@ -40,4 +40,5 @@ def send(self, connection):
return is_success

def __str__(self):
return f"\"{self.subject}\", to {self.users.all()[0] if self.users.count() == 1 else f'{self.users.count()} users'}, {'sent' if self.sent else 'eta'} {self.eta}"
return (f"\"{self.subject}\", to {self.users.all()[0] if self.users.count() == 1 else f'{self.users.count()} users'}, "
f"{'sent' if self.sent else 'eta'} {self.eta}")
2 changes: 1 addition & 1 deletion app/communication/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


@app.task(bind=True, base=BaseTask)
def send_due_mails(self, *args, **kwargs):
def send_due_mails(self, *_args, **_kwargs):
from django.core.mail import get_connection

from app.communication.models.mail import Mail
Expand Down
6 changes: 3 additions & 3 deletions app/communication/tests/test_banner_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
DatesMixedError,
)
from app.communication.factories.banner_factory import BannerFactory
from app.util.utils import getTimezone, now
from app.util.utils import get_timezone, now


@pytest.mark.parametrize(
Expand All @@ -27,8 +27,8 @@ def test_two_banners_can_not_be_visible_simultaneously_in_any_period(
This test uses timedelta and parameterize to switch visible_from
and visible_until between 5 days earlier or later."""
existing_banner = BannerFactory(
visible_from=datetime(2020, 1, 1, tzinfo=getTimezone()),
visible_until=datetime(2021, 1, 1, tzinfo=getTimezone()),
visible_from=datetime(2020, 1, 1, tzinfo=get_timezone()),
visible_until=datetime(2021, 1, 1, tzinfo=get_timezone()),
)

with pytest.raises(AnotherVisibleBannerError):
Expand Down
4 changes: 2 additions & 2 deletions app/communication/views/banner.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ class Meta:
model = Banner
fields = ["is_visible", "is_expired"]

def filter_is_visible(self, queryset, name, value):
def filter_is_visible(self, queryset, _name, value):
if value:
return queryset.filter(visible_from__lte=now(), visible_until__gte=now())
return queryset

def filter_is_expired(self, queryset, name, value):
def filter_is_expired(self, queryset, _name, value):
if value:
return queryset.filter(visible_until__lt=now())
return queryset
Expand Down
2 changes: 1 addition & 1 deletion app/communication/views/notification.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,6 @@ def update(self, request, pk):
status=status.HTTP_200_OK,
)
return Response(
{"detail": ("Kunne ikke oppdatere varslet")},
{"detail": "Kunne ikke oppdatere varslet"},
status=status.HTTP_403_FORBIDDEN,
)
Loading

0 comments on commit 78bed9b

Please sign in to comment.