Skip to content

Commit acf9aad

Browse files
authored
Merge pull request globocom#212 from globocom/add_receive_treshold_emails_on_database
Add receive treshold emails on database
2 parents 293b108 + e5ce410 commit acf9aad

File tree

11 files changed

+397
-149
lines changed

11 files changed

+397
-149
lines changed

dbaas/api/database.py

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@
1616

1717
class DatabaseSerializer(serializers.HyperlinkedModelSerializer):
1818
plan = serializers.HyperlinkedRelatedField(
19-
source='plan', view_name='plan-detail', queryset=Plan.objects.filter(is_active=True))
20-
environment = serializers.HyperlinkedRelatedField(source='environment', view_name='environment-detail',
21-
queryset=Environment.objects)
19+
source='plan', view_name='plan-detail',
20+
queryset=Plan.objects.filter(is_active=True)
21+
)
22+
environment = serializers.HyperlinkedRelatedField(
23+
source='environment', view_name='environment-detail',
24+
queryset=Environment.objects
25+
)
2226
team = serializers.HyperlinkedRelatedField(
23-
source='team', view_name='team-detail', queryset=Team.objects)
27+
source='team', view_name='team-detail', queryset=Team.objects
28+
)
2429
endpoint = serializers.Field(source='endpoint')
2530
quarantine_dt = serializers.Field(source='quarantine_dt')
2631
total_size_in_bytes = serializers.Field(source='total_size')
@@ -30,10 +35,13 @@ class DatabaseSerializer(serializers.HyperlinkedModelSerializer):
3035

3136
class Meta:
3237
model = models.Database
33-
fields = ('url', 'id', 'name', 'endpoint', 'plan', 'environment',
34-
'project', 'team', 'quarantine_dt', 'total_size_in_bytes',
35-
'credentials', 'description', 'contacts', 'status',
36-
'used_size_in_bytes', 'created_at')
38+
fields = (
39+
'url', 'id', 'name', 'endpoint', 'plan', 'environment',
40+
'project', 'team', 'quarantine_dt', 'total_size_in_bytes',
41+
'credentials', 'description', 'contacts', 'status',
42+
'used_size_in_bytes', 'subscribe_to_email_events',
43+
'created_at',
44+
)
3745
read_only = ('credentials', 'status', 'used_size_in_bytes')
3846

3947
def __init__(self, *args, **kwargs):
@@ -43,16 +51,11 @@ def __init__(self, *args, **kwargs):
4351
if request:
4452
creating = request.method == 'POST'
4553

46-
# when database is created, user can't change plan, environment and
47-
# name
4854
self.fields['plan'].read_only = not creating
4955
self.fields['environment'].read_only = not creating
5056
self.fields['name'].read_only = not creating
5157
self.fields['credentials'].read_only = True
5258

53-
# quarantine is always readonly
54-
# self.fields['quarantine_dt'].read_only = True
55-
5659

5760
class DatabaseAPI(viewsets.ModelViewSet):
5861

@@ -68,6 +71,7 @@ class DatabaseAPI(viewsets.ModelViewSet):
6871
"project": "{api_url}/project/{project_id}/",
6972
"team": "{api_url}/team/{team_id}/",
7073
"description": "{description}",
74+
"subscribe_to_email_events": "{subscribe_to_email_events}",
7175
"contacts": "{contacts}"
7276
}
7377
* ### __Show details about a database__
@@ -78,6 +82,8 @@ class DatabaseAPI(viewsets.ModelViewSet):
7882
__PUT__ /api/database/`database_id`/
7983
{
8084
"project": "{api_url}/project/{project_id}/",
85+
"description": "{description}",
86+
"subscribe_to_email_events": "{subscribe_to_email_events}",
8187
"contacts": "{contacts}"
8288
}
8389
"""
@@ -98,22 +104,23 @@ def create(self, request):
98104
task_history.arguments = "Database name: {}".format(data['name'])
99105
task_history.save()
100106

101-
result = create_database.delay(name=data['name'],
102-
plan=data['plan'],
103-
environment=data['environment'],
104-
team=data['team'],
105-
project=data['project'],
106-
description=data['description'],
107-
contacts=data['contacts'],
108-
task_history=task_history,
109-
user=request.user)
107+
result = create_database.delay(
108+
name=data['name'], plan=data['plan'],
109+
environment=data['environment'], team=data['team'],
110+
project=data['project'], description=data['description'],
111+
subscribe_to_email_events=data['subscribe_to_email_events'],
112+
contacts=data['contacts'], task_history=task_history,
113+
user=request.user
114+
)
110115

111116
headers = self.get_success_headers(data)
112117
task_url = Site.objects.get_current().domain + \
113118
'/api/task?task_id=%s' % str(result.id)
114119

115-
return Response({"task": task_url}, status=status.HTTP_201_CREATED,
116-
headers=headers)
120+
return Response(
121+
{"task": task_url}, status=status.HTTP_201_CREATED,
122+
headers=headers
123+
)
117124

118125
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
119126

dbaas/api/tests/test_databaseapi.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ def setUp(self):
2828
self.environment = self.datainfra.environment
2929

3030
def model_new(self):
31-
return factory.DatabaseFactory.build(databaseinfra=self.datainfra, team=self.team, project=self.project, environment=self.environment)
31+
return factory.DatabaseFactory.build(
32+
databaseinfra=self.datainfra, team=self.team, project=self.project,
33+
environment=self.environment
34+
)
3235

3336
def model_create(self):
3437
return factory.DatabaseFactory(databaseinfra=self.datainfra)
@@ -42,7 +45,8 @@ def test_post_create_new(self, mock_delay):
4245

4346
LOG.debug("Response: ".format(response))
4447
LOG.debug("Call args {}, Call count {}".format(
45-
mock_delay.call_args, mock_delay.call_count))
48+
mock_delay.call_args, mock_delay.call_count)
49+
)
4650

4751
self.assertEquals(mock_delay.call_count, 1)
4852
call_args = mock_delay.call_args[1]
@@ -72,9 +76,11 @@ def test_delete(self):
7276
url = self.url_detail(obj.pk)
7377
response = self.client.delete(url)
7478

75-
# assert status code
7679
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
7780

78-
# assert if object gone
79-
self.assertRaises(ObjectDoesNotExist, Database.objects.filter(
80-
is_in_quarantine=False, pk=obj.pk).get)
81+
self.assertRaises(
82+
ObjectDoesNotExist,
83+
Database.objects.filter(
84+
is_in_quarantine=False, pk=obj.pk
85+
).get
86+
)

dbaas/logical/admin/database.py

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,19 @@ class DatabaseAdmin(admin.DjangoServicesAdmin):
8383
(None, {
8484
'fields': (
8585
'name', 'description', 'contacts', 'project', 'engine',
86-
'environment', 'team', 'plan', 'is_in_quarantine',
86+
'environment', 'team', 'subscribe_to_email_events', 'plan',
87+
'is_in_quarantine',
8788
)
8889
}
8990
),
9091
)
9192

9293
fieldsets_change_basic = (
9394
(None, {
94-
'fields': ['name', 'description', 'contacts', 'project', 'team', ]
95+
'fields': [
96+
'name', 'description', 'contacts', 'project', 'team',
97+
'subscribe_to_email_events',
98+
]
9599
}
96100
),
97101
)
@@ -390,13 +394,13 @@ def add_view(self, request, form_url='', extra_context=None):
390394
if not form.is_valid():
391395
return super(DatabaseAdmin, self).add_view(request, form_url, extra_context=extra_context)
392396

393-
LOG.debug(
394-
"call create_database - name=%s, plan=%s, environment=%s, team=%s, project=%s, description=%s, user=%s" % (
395-
form.cleaned_data['name'], form.cleaned_data[
396-
'plan'], form.cleaned_data['environment'],
397-
form.cleaned_data['team'], form.cleaned_data[
398-
'project'], form.cleaned_data['description'],
399-
request.user))
397+
database_creation_message = "call create_database - name={}, plan={}, environment={}, team={}, project={}, description={}, user={}, subscribe_to_email_events {}".format(
398+
form.cleaned_data['name'], form.cleaned_data['plan'],
399+
form.cleaned_data['environment'], form.cleaned_data['team'],
400+
form.cleaned_data['project'], form.cleaned_data['description'],
401+
request.user, form.cleaned_data['subscribe_to_email_events']
402+
)
403+
LOG.debug(database_creation_message)
400404

401405
task_history = TaskHistory()
402406
task_history.task_name = "create_database"
@@ -406,17 +410,18 @@ def add_view(self, request, form_url='', extra_context=None):
406410
task_history.user = request.user
407411
task_history.save()
408412

409-
create_database.delay(name=form.cleaned_data['name'],
410-
plan=form.cleaned_data['plan'],
411-
environment=form.cleaned_data[
412-
'environment'],
413-
team=form.cleaned_data['team'],
414-
project=form.cleaned_data['project'],
415-
description=form.cleaned_data[
416-
'description'],
417-
contacts=form.cleaned_data['contacts'],
418-
task_history=task_history,
419-
user=request.user)
413+
create_database.delay(
414+
name=form.cleaned_data['name'],
415+
plan=form.cleaned_data['plan'],
416+
environment=form.cleaned_data['environment'],
417+
team=form.cleaned_data['team'],
418+
project=form.cleaned_data['project'],
419+
description=form.cleaned_data['description'],
420+
subscribe_to_email_events=form.cleaned_data['subscribe_to_email_events'],
421+
contacts=form.cleaned_data['contacts'],
422+
task_history=task_history,
423+
user=request.user
424+
)
420425

421426
url = reverse('admin:notification_taskhistory_changelist')
422427
# Redirect after POST
@@ -448,7 +453,16 @@ def change_view(self, request, object_id, form_url='', extra_context=None):
448453
else:
449454
extra_context['is_dba'] = False
450455

451-
return super(DatabaseAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context)
456+
if request.method == 'POST':
457+
form = DatabaseForm(request.POST)
458+
if not form.is_valid():
459+
return super(DatabaseAdmin, self).change_view(
460+
request, object_id, form_url, extra_context=extra_context
461+
)
462+
463+
return super(DatabaseAdmin, self).change_view(
464+
request, object_id, form_url, extra_context=extra_context
465+
)
452466

453467
def delete_view(self, request, object_id, extra_context=None):
454468
database = Database.objects.get(id=object_id)
@@ -853,7 +867,6 @@ def database_disk_resize_view(self, request, database_id):
853867
locals(),
854868
context_instance=RequestContext(request))
855869

856-
857870
def restore_snapshot(self, request, database_id):
858871
database = Database.objects.get(id=database_id)
859872

@@ -1068,8 +1081,9 @@ def delete_selected(self, request, queryset):
10681081
raise PermissionDenied
10691082

10701083
n = queryset.count()
1071-
quarantine = any(result[
1072-
'is_in_quarantine'] == True for result in queryset.values('is_in_quarantine'))
1084+
quarantine = any(
1085+
result['is_in_quarantine'] is True for result in queryset.values('is_in_quarantine')
1086+
)
10731087

10741088
if n:
10751089
for obj in queryset:

dbaas/logical/forms/database.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ class DatabaseForm(models.ModelForm):
115115
class Meta:
116116
model = Database
117117
fields = (
118-
'name', 'description', 'contacts', 'project', 'team',
119-
'is_in_quarantine',
118+
'name', 'description', 'contacts', 'subscribe_to_email_events',
119+
'project', 'team', 'is_in_quarantine',
120120
)
121121

122122
def remove_fields_not_in_models(self):

0 commit comments

Comments
 (0)