diff --git a/katka/admin.py b/katka/admin.py index 3cb869d..6fbf6de 100644 --- a/katka/admin.py +++ b/katka/admin.py @@ -58,8 +58,8 @@ class SCMPipelineRunAdmin(WithUsernameAdminModel): @admin.register(SCMStepRun) class SCMStepRunAdmin(WithUsernameAdminModel): - fields = ('slug', 'name', 'stage', 'status', 'output', 'started', 'ended', 'scm_pipeline_run') - list_display = ('pk', 'scm_pipeline_run', 'name', 'stage', 'status', 'started', 'ended') + fields = ('slug', 'name', 'stage', 'status', 'output', 'started_at', 'ended_at', 'scm_pipeline_run') + list_display = ('pk', 'scm_pipeline_run', 'name', 'stage', 'status', 'started_at', 'ended_at') list_filter = ('scm_pipeline_run__application__name',) @@ -71,5 +71,5 @@ class ApplicationMetadataAdmin(WithUsernameAdminModel): @admin.register(SCMRelease) class SCMReleaseAdmin(WithUsernameAdminModel): - fields = ('name', 'status', 'started', 'ended', 'scm_pipeline_runs') + fields = ('name', 'status', 'started_at', 'ended_at', 'scm_pipeline_runs') list_display = ('pk', 'name') diff --git a/katka/auditedmodel.py b/katka/auditedmodel.py index fac460f..26612e1 100644 --- a/katka/auditedmodel.py +++ b/katka/auditedmodel.py @@ -7,8 +7,8 @@ class AuditedModel(models.Model): class Meta: abstract = True - created = models.DateTimeField(auto_now_add=True, editable=False) + created_at = models.DateTimeField(auto_now_add=True, editable=False) created_username = AutoUsernameField(only_on_create=True) - modified = models.DateTimeField(auto_now=True, editable=False) + modified_at = models.DateTimeField(auto_now=True, editable=False) modified_username = AutoUsernameField() deleted = models.BooleanField(default=False) diff --git a/katka/migrations/0025_datetime_field_names.py b/katka/migrations/0025_datetime_field_names.py new file mode 100644 index 0000000..9a106d2 --- /dev/null +++ b/katka/migrations/0025_datetime_field_names.py @@ -0,0 +1,143 @@ +# Generated by Django 2.2.7 on 2019-11-05 10:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('katka', '0024_scmsteprun_started_ended'), + ] + + operations = [ + migrations.RenameField( + model_name='application', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='application', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='applicationmetadata', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='applicationmetadata', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='credential', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='credential', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='credentialsecret', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='credentialsecret', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='project', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='project', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmpipelinerun', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='scmpipelinerun', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmrelease', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='scmrelease', + old_name='ended', + new_name='ended_at', + ), + migrations.RenameField( + model_name='scmrelease', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmrelease', + old_name='started', + new_name='started_at', + ), + migrations.RenameField( + model_name='scmrepository', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='scmrepository', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmservice', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='scmservice', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmsteprun', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='scmsteprun', + old_name='ended', + new_name='ended_at', + ), + migrations.RenameField( + model_name='scmsteprun', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='team', + old_name='created', + new_name='created_at', + ), + migrations.RenameField( + model_name='team', + old_name='modified', + new_name='modified_at', + ), + migrations.RenameField( + model_name='scmsteprun', + old_name='started', + new_name='started_at', + ), + ] diff --git a/katka/models.py b/katka/models.py index 209fe51..b91266d 100644 --- a/katka/models.py +++ b/katka/models.py @@ -139,8 +139,8 @@ class Meta: # This allows easy sorting for e.g. frontends. scm_pipeline_run = models.ForeignKey(SCMPipelineRun, on_delete=models.PROTECT) tags = models.TextField(blank=True) - started = models.DateTimeField(blank=True, null=True) - ended = models.DateTimeField(blank=True, null=True) + started_at = models.DateTimeField(blank=True, null=True) + ended_at = models.DateTimeField(blank=True, null=True) # SCM Releases, comprises a range of commits that are released @@ -152,8 +152,8 @@ class Meta: public_identifier = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=255) status = models.CharField(max_length=30, choices=RELEASE_STATUS_CHOICES, default=RELEASE_STATUS_IN_PROGRESS) - started = models.DateTimeField(null=True) - ended = models.DateTimeField(null=True) + started_at = models.DateTimeField(null=True) + ended_at = models.DateTimeField(null=True) scm_pipeline_runs = models.ManyToManyField(SCMPipelineRun) diff --git a/katka/releases.py b/katka/releases.py index b3f800a..a7d0f95 100644 --- a/katka/releases.py +++ b/katka/releases.py @@ -62,8 +62,8 @@ def close_release_if_pipeline_finished(pipeline: SCMPipelineRun): with username_on_model(SCMRelease, pipeline.modified_username): if release: release.name = pre_conditions.version_number - release.started = pre_conditions.prod_change_start_date - release.ended = pre_conditions.prod_change_end_date + release.started_at = pre_conditions.prod_change_start_date + release.ended_at = pre_conditions.prod_change_end_date release.save() return release.status if release else None @@ -80,13 +80,13 @@ def _gather_steps_pre_conditions(pipeline): continue _add_output(pipeline_output=pipeline_output, step_output=step.output) if constants.TAG_PRODUCTION_CHANGE_STARTED in step.tags.split(" "): - prod_start_date = step.started + prod_start_date = step.started_at if prod_start_date is not None: success_status_between_start_end.append(step.status == constants.STEP_STATUS_SUCCESS) if constants.TAG_PRODUCTION_CHANGE_ENDED in step.tags.split(" "): - prod_end_date = step.ended + prod_end_date = step.ended_at break return StepsPreConditions(pipeline_output.get("release.version"), @@ -113,7 +113,7 @@ def _get_current_release(pipeline): log.error(f'No open releases found for application {pipeline.application.pk}') elif len(releases) > 1: log.error(f'Multiple open releases found for application {pipeline.application.pk}, picking newest') - release = releases.order_by('-created').first() + release = releases.order_by('-created_at').first() else: release = releases[0] return release diff --git a/katka/serializers.py b/katka/serializers.py index 9903506..4076260 100644 --- a/katka/serializers.py +++ b/katka/serializers.py @@ -107,7 +107,7 @@ class Meta: model = SCMStepRun fields = ( 'public_identifier', 'slug', 'name', 'stage', 'status', 'output', 'sequence_id', 'scm_pipeline_run', - 'tags', 'started', 'ended' + 'tags', 'started_at', 'ended_at' ) @@ -132,8 +132,8 @@ class SCMReleaseSerializer(KatkaSerializer): class Meta: model = SCMRelease - fields = ('public_identifier', 'name', 'started', 'ended', 'scm_pipeline_runs', 'status') - read_only_fields = ('started', 'ended', 'scm_pipeline_runs') + fields = ('public_identifier', 'name', 'started_at', 'ended_at', 'scm_pipeline_runs', 'status') + read_only_fields = ('started_at', 'ended_at', 'scm_pipeline_runs') class SCMReleaseCreateSerializer(KatkaSerializer): diff --git a/tests/conftest.py b/tests/conftest.py index 0abf35c..48ddac4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -349,7 +349,7 @@ def deactivated_scm_pipeline_run(scm_pipeline_run): def scm_step_run(scm_pipeline_run): scm_step_run = models.SCMStepRun(slug='release', name='Release Katka', stage='Production', scm_pipeline_run=scm_pipeline_run, sequence_id='1.1-1', - started='2018-11-11 08:25:30+0000', ended='2018-11-11 09:01:40+0000') + started_at='2018-11-11 08:25:30+0000', ended_at='2018-11-11 09:01:40+0000') with username_on_model(models.SCMStepRun, 'initial'): scm_step_run.save() @@ -451,19 +451,19 @@ def step_data(scm_pipeline_run): version = '{"release.version": "1.0.0"}' steps = [ {"name": "step0", "stage": "prepare", "seq": "1.1-1", "status": "success", "tags": "", "output": version, - "started": "2018-11-11 08:25:30+0000", "ended": "2018-11-11 08:25:41+0000"}, + "started_at": "2018-11-11 08:25:30+0000", "ended_at": "2018-11-11 08:25:41+0000"}, {"name": "step1", "stage": "prepare", "seq": "1.2-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 08:35:30+0000", "ended": "2018-11-11 08:35:41+0000"}, + "started_at": "2018-11-11 08:35:30+0000", "ended_at": "2018-11-11 08:35:41+0000"}, {"name": "step2", "stage": "deploy", "seq": "2.1-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 08:45:30+0000", "ended": "2018-11-11 08:45:41+0000"}, + "started_at": "2018-11-11 08:45:30+0000", "ended_at": "2018-11-11 08:45:41+0000"}, {"name": "step3", "stage": "deploy", "seq": "2.2-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 08:55:30+0000", "ended": "2018-11-11 08:55:41+0000"}, + "started_at": "2018-11-11 08:55:30+0000", "ended_at": "2018-11-11 08:55:41+0000"}, {"name": "step4", "stage": "deploy", "seq": "2.3-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 09:05:30+0000", "ended": "2018-11-11 09:05:41+0000"}, + "started_at": "2018-11-11 09:05:30+0000", "ended_at": "2018-11-11 09:05:41+0000"}, {"name": "step5", "stage": "deploy", "seq": "2.4-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 09:15:30+0000", "ended": "2018-11-11 09:15:41+0000"}, + "started_at": "2018-11-11 09:15:30+0000", "ended_at": "2018-11-11 09:15:41+0000"}, {"name": "step6", "stage": "deploy", "seq": "2.5-1", "status": "success", "tags": "", "output": "", - "started": "2018-11-11 09:25:30+0000", "ended": "2018-11-11 09:25:41+0000"}, + "started_at": "2018-11-11 09:25:30+0000", "ended_at": "2018-11-11 09:25:41+0000"}, ] return steps @@ -474,7 +474,7 @@ def _create_steps_from_dict(scm_pipeline_run, step_data): scm_step_run = models.SCMStepRun(slug=step["name"], name=step["name"], stage=step["stage"], scm_pipeline_run=scm_pipeline_run, sequence_id=step["seq"], status=step["status"], tags=step["tags"], output=step["output"], - started=step["started"], ended=step["ended"]) + started_at=step["started_at"], ended_at=step["ended_at"]) with username_on_model(models.SCMStepRun, 'initial'): scm_step_run.save() diff --git a/tests/integration/test_scmrelease_view.py b/tests/integration/test_scmrelease_view.py index efa3fe4..629cbec 100644 --- a/tests/integration/test_scmrelease_view.py +++ b/tests/integration/test_scmrelease_view.py @@ -57,8 +57,8 @@ def test_list(self, client, logged_in_user, scm_pipeline_run, scm_release): parsed = response.json() assert len(parsed) == 1 assert parsed[0]['name'] == 'Version 0.13.1' - assert parsed[0]['started'] is None - assert parsed[0]['ended'] is None + assert parsed[0]['started_at'] is None + assert parsed[0]['ended_at'] is None assert parsed[0]['status'] == 'in progress' assert len(parsed[0]['scm_pipeline_runs']) == 1 assert UUID(parsed[0]['scm_pipeline_runs'][0]) == scm_pipeline_run.public_identifier @@ -73,8 +73,8 @@ def test_filtered_list(self, client, logged_in_user, scm_pipeline_run, scm_relea parsed = response.json() assert len(parsed) == 1 assert parsed[0]['name'] == 'Version 15.0' - assert parsed[0]['started'] is None - assert parsed[0]['ended'] is None + assert parsed[0]['started_at'] is None + assert parsed[0]['ended_at'] is None assert parsed[0]['status'] == 'in progress' assert len(parsed[0]['scm_pipeline_runs']) == 1 assert UUID(parsed[0]['scm_pipeline_runs'][0]) == another_scm_pipeline_run.public_identifier @@ -98,8 +98,8 @@ def test_get(self, client, logged_in_user, scm_pipeline_run, scm_release): assert response.status_code == 200 parsed = response.json() assert parsed['name'] == 'Version 0.13.1' - assert parsed['started'] is None - assert parsed['ended'] is None + assert parsed['started_at'] is None + assert parsed['ended_at'] is None assert parsed['status'] == 'in progress' assert len(parsed['scm_pipeline_runs']) == 1 assert UUID(parsed['scm_pipeline_runs'][0]) == scm_pipeline_run.public_identifier diff --git a/tests/integration/test_scmsteprun_view.py b/tests/integration/test_scmsteprun_view.py index 124b959..38e6776 100644 --- a/tests/integration/test_scmsteprun_view.py +++ b/tests/integration/test_scmsteprun_view.py @@ -70,8 +70,8 @@ def test_list(self, client, logged_in_user, scm_pipeline_run, scm_step_run): assert parsed[0]['stage'] == 'Production' assert parsed[0]['status'] == 'not started' assert parsed[0]['output'] == '' - assert parsed[0]['started'] == '2018-11-11T08:25:30Z' - assert parsed[0]['ended'] == '2018-11-11T09:01:40Z' + assert parsed[0]['started_at'] == '2018-11-11T08:25:30Z' + assert parsed[0]['ended_at'] == '2018-11-11T09:01:40Z' assert UUID(parsed[0]['scm_pipeline_run']) == scm_pipeline_run.public_identifier UUID(parsed[0]['public_identifier']) # should not raise @@ -87,8 +87,8 @@ def test_filtered_list(self, client, logged_in_user, scm_pipeline_run, scm_step_ assert parsed[0]['stage'] == 'Production' assert parsed[0]['status'] == 'not started' assert parsed[0]['output'] == '' - assert parsed[0]['started'] is None - assert parsed[0]['ended'] is None + assert parsed[0]['started_at'] is None + assert parsed[0]['ended_at'] is None assert UUID(parsed[0]['scm_pipeline_run']) == another_scm_pipeline_run.public_identifier UUID(parsed[0]['public_identifier']) # should not raise @@ -117,8 +117,8 @@ def test_get(self, client, logged_in_user, scm_pipeline_run, scm_step_run): assert parsed['output'] == '' assert parsed['sequence_id'] == '1.1-1' assert parsed['tags'] == '' - assert parsed['started'] == '2018-11-11T08:25:30Z' - assert parsed['ended'] == '2018-11-11T09:01:40Z' + assert parsed['started_at'] == '2018-11-11T08:25:30Z' + assert parsed['ended_at'] == '2018-11-11T09:01:40Z' assert UUID(parsed['scm_pipeline_run']) == scm_pipeline_run.public_identifier UUID(parsed['public_identifier']) # should not raise @@ -141,8 +141,8 @@ def test_update(self, client, logged_in_user, scm_pipeline_run, scm_step_run): 'output': 'Command completed', 'sequence_id': '01.02-03', 'tags': 'tag1 tag2', - 'started': '2019-01-25 01:02:03+0100', - 'ended': '2019-02-13 02:03:04Z', + 'started_at': '2019-01-25 01:02:03+0100', + 'ended_at': '2019-02-13 02:03:04Z', 'scm_pipeline_run': scm_pipeline_run.public_identifier} response = client.put(url, data, content_type='application/json') assert response.status_code == 200 @@ -150,20 +150,20 @@ def test_update(self, client, logged_in_user, scm_pipeline_run, scm_step_run): assert p.name == 'Release product' assert p.sequence_id == '01.02-03' assert p.tags == 'tag1 tag2' - assert p.started == parse_datetime('2019-01-25T01:02:03+0100') - assert p.ended == parse_datetime('2019-02-13T02:03:04Z') + assert p.started_at == parse_datetime('2019-01-25T01:02:03+0100') + assert p.ended_at == parse_datetime('2019-02-13T02:03:04Z') def test_partial_update(self, client, logged_in_user, scm_step_run): url = f'/scm-step-runs/{scm_step_run.public_identifier}/' data = {'output': 'Step executed.', - 'started': '2019-01-25 01:02:03+0200', - 'ended': '2019-02-13 02:03:04Z'} + 'started_at': '2019-01-25 01:02:03+0200', + 'ended_at': '2019-02-13 02:03:04Z'} response = client.patch(url, data, content_type='application/json') assert response.status_code == 200 p = models.SCMStepRun.objects.get(pk=scm_step_run.public_identifier) assert p.output == 'Step executed.' - assert p.started == parse_datetime('2019-01-25T02:02:03+0300') - assert p.ended == parse_datetime('2019-02-13T02:03:04Z') + assert p.started_at == parse_datetime('2019-01-25T02:02:03+0300') + assert p.ended_at == parse_datetime('2019-02-13T02:03:04Z') def test_create(self, client, logged_in_user, scm_pipeline_run, scm_step_run): initial_count = models.SCMStepRun.objects.count() diff --git a/tests/integration/test_signals.py b/tests/integration/test_signals.py index 2352fab..684be74 100644 --- a/tests/integration/test_signals.py +++ b/tests/integration/test_signals.py @@ -183,7 +183,7 @@ def test_pick_newest_on_duplicate_open_releases(self, application, scm_release, open_release_2.scm_pipeline_runs.add(scm_pipeline_run) open_release_2.save() - assert scm_release.created < open_release_2.created + assert scm_release.created_at < open_release_2.created_at with override_settings(**overrides), username_on_model(SCMPipelineRun, 'signal_tester'): pipeline_run = SCMPipelineRun.objects.create(application=application) diff --git a/tests/unit/test_close_release.py b/tests/unit/test_close_release.py index 213b85f..625e070 100644 --- a/tests/unit/test_close_release.py +++ b/tests/unit/test_close_release.py @@ -15,8 +15,8 @@ def _assert_release_success_with_name(name): release = SCMRelease.objects.first() assert release.name == name assert release.status == constants.RELEASE_STATUS_SUCCESS - assert release.started is not None - assert release.ended is not None + assert release.started_at is not None + assert release.ended_at is not None @staticmethod def _assert_release_has_status(status): @@ -25,18 +25,18 @@ def _assert_release_has_status(status): assert release.status == status @staticmethod - def _assert_release_has_start_and_end_date(started=None, ended=None): + def _assert_release_has_start_and_end_date(started_at=None, ended_at=None): assert SCMRelease.objects.count() == 1 release = SCMRelease.objects.first() - if started: - assert release.started == parse_datetime(started) + if started_at: + assert release.started_at == parse_datetime(started_at) else: - assert release.started is None + assert release.started_at is None - if ended: - assert release.ended == parse_datetime(ended) + if ended_at: + assert release.ended_at == parse_datetime(ended_at) else: - assert release.ended is None + assert release.ended_at is None def test_do_nothing_if_pipeline_run_status_not_finished(self, scm_pipeline_run): self._assert_release_has_status(constants.RELEASE_STATUS_IN_PROGRESS)