From c68aec5dc364d7f2ee6f0152c480e0e4610d4952 Mon Sep 17 00:00:00 2001 From: Santiago Lamora Date: Mon, 30 Mar 2020 15:26:01 +0200 Subject: [PATCH 1/2] Handle accounts without billing contact data. Fixes #7 --- musician/models.py | 2 ++ musician/tests.py | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/musician/models.py b/musician/models.py index bccd595..3239829 100644 --- a/musician/models.py +++ b/musician/models.py @@ -34,6 +34,8 @@ class OrchestraModel: Args: data: A JSON dict, as converted from the JSON in the orchestra API. """ + if data is None: + return cls() json_data = data.copy() if kwargs: diff --git a/musician/tests.py b/musician/tests.py index 44118a2..8becf4d 100644 --- a/musician/tests.py +++ b/musician/tests.py @@ -62,6 +62,31 @@ class UserAccountTest(TestCase): account = UserAccount.new_from_json(data) self.assertIsNone(account.last_login) + def test_user_without_billcontact(self): + data = { + 'billcontact': None, + 'date_joined': '2020-03-05T09:49:21Z', + 'full_name': 'David Rock', + 'id': 2, + 'is_active': True, + 'language': 'CA', + 'last_login': '2020-03-19T10:21:49.504266Z', + 'resources': [{'allocated': None, + 'name': 'disk', + 'unit': 'GiB', + 'used': '0.000'}, + {'allocated': None, + 'name': 'traffic', + 'unit': 'GiB', + 'used': '0.000'}], + 'short_name': '', + 'type': 'STAFF', + 'url': 'https://example.org/api/accounts/2/', + 'username': 'drock' + } + account = UserAccount.new_from_json(data) + self.assertIsNotNone(account.billing) + class GetBootstrapedPercentTest(TestCase): BS_WIDTH = [0, 25, 50, 100] From 1d5d3a5ed3852ff801967ca0b8cb5a41d092c4ba Mon Sep 17 00:00:00 2001 From: Santiago Lamora Date: Thu, 2 Apr 2020 08:15:36 +0200 Subject: [PATCH 2/2] Provide default value to ALLOWED_RESOURCES. --- musician/settings.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/musician/settings.py b/musician/settings.py index 1fafdd2..6ef7f86 100644 --- a/musician/settings.py +++ b/musician/settings.py @@ -1,3 +1,4 @@ +from collections import defaultdict from django.conf import settings @@ -5,22 +6,28 @@ def getsetting(name): value = getattr(settings, name, None) return value or DEFAULTS.get(name) +# provide a default value allowing to overwrite it for each type of account +def allowed_resources_default_factory(): + return {'mailbox': 2} DEFAULTS = { # allowed resources limit hardcoded because cannot be retrieved from the API. - "ALLOWED_RESOURCES": { - 'INDIVIDUAL': + "ALLOWED_RESOURCES": defaultdict( + allowed_resources_default_factory, { - # 'disk': 1024, - # 'traffic': 2048, - 'mailbox': 2, - }, - 'ASSOCIATION': { - # 'disk': 5 * 1024, - # 'traffic': 20 * 1024, - 'mailbox': 10, + 'INDIVIDUAL': + { + # 'disk': 1024, + # 'traffic': 2048, + 'mailbox': 2, + }, + 'ASSOCIATION': { + # 'disk': 5 * 1024, + # 'traffic': 20 * 1024, + 'mailbox': 10, + } } - }, + ), "URL_DB_PHPMYADMIN": "https://phpmyadmin.pangea.org/", "URL_MAILTRAIN": "https://mailtrain.org/", "URL_SAAS_GITLAB": "https://gitlab.pangea.org/",