Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#1549 | Source Auto id attributes editable
Browse files Browse the repository at this point in the history
  • Loading branch information
snyaggarwal committed May 22, 2023
1 parent 25afc5a commit 6088782
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 18 deletions.
46 changes: 28 additions & 18 deletions core/sources/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,32 +308,42 @@ def save(
self.__update_sequences(dirty_fields)

def __update_sequences(self, dirty_fields=[]): # pylint: disable=dangerous-default-value
def should_update(is_seq, field, start_from):
def should_update(is_seq, field):
start_from = get(self, 'field')
return field in dirty_fields and is_seq and start_from and start_from > 0

def should_create(is_seq, field):
return field in dirty_fields and dirty_fields.get(field) != AUTO_ID_SEQUENTIAL and is_seq

def to_seq(start_from):
return int(start_from) - 1

if should_update(
self.is_sequential_mapping_mnemonic, 'autoid_mapping_mnemonic_start_from',
self.autoid_mapping_mnemonic_start_from
):
if should_create(self.is_sequential_concept_mnemonic, 'autoid_concept_mnemonic'):
PostgresQL.create_seq(
self.concepts_mnemonic_seq_name, 'sources.uri', 0, self.autoid_concept_mnemonic_start_from)
elif should_update(self.is_sequential_concept_mnemonic, 'autoid_concept_mnemonic_start_from'):
PostgresQL.update_seq(self.concepts_mnemonic_seq_name, to_seq(self.autoid_concept_mnemonic_start_from))

if should_create(self.is_sequential_mapping_mnemonic, 'autoid_mapping_mnemonic'):
PostgresQL.create_seq(
self.mappings_mnemonic_seq_name, 'sources.uri', 0, self.autoid_mapping_mnemonic_start_from
)
elif should_update(self.is_sequential_mapping_mnemonic, 'autoid_mapping_mnemonic_start_from'):
PostgresQL.update_seq(self.mappings_mnemonic_seq_name, to_seq(self.autoid_mapping_mnemonic_start_from))
if should_update(
self.is_sequential_mapping_external_id, 'autoid_mapping_external_id_start_from',
self.autoid_mapping_external_id_start_from
):

if should_create(self.is_sequential_mapping_external_id, 'autoid_mapping_external_id'):
PostgresQL.create_seq(
self.mappings_external_id_seq_name, 'sources.uri', 0, self.autoid_mapping_external_id_start_from
)
elif should_update(self.is_sequential_mapping_external_id, 'autoid_mapping_external_id_start_from'):
PostgresQL.update_seq(
self.mappings_external_id_seq_name, to_seq(self.autoid_mapping_external_id_start_from))
if should_update(
self.is_sequential_concept_mnemonic, 'autoid_concept_mnemonic_start_from',
self.autoid_concept_mnemonic_start_from
):
PostgresQL.update_seq(self.concepts_mnemonic_seq_name, to_seq(self.autoid_concept_mnemonic_start_from))
if should_update(
self.is_sequential_concept_external_id, 'autoid_concept_external_id_start_from',
self.autoid_concept_external_id_start_from
):

if should_create(self.is_sequential_concept_external_id, 'autoid_concept_external_id'):
PostgresQL.create_seq(
self.concepts_external_id_seq_name, 'sources.uri', 0, self.autoid_concept_external_id_start_from
)
elif should_update(self.is_sequential_concept_external_id, 'autoid_concept_external_id_start_from'):
PostgresQL.update_seq(
self.concepts_external_id_seq_name, to_seq(self.autoid_concept_external_id_start_from))

Expand Down
16 changes: 16 additions & 0 deletions core/sources/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,22 @@ def test_autoid_start_from_validate_non_negative(self):
]:
Source(**{field: 1}, mnemonic='foo', version='HEAD', name='foo').full_clean()

@patch('core.common.services.PostgresQL.create_seq')
def test_autoid_field_changes(self, create_seq):
org = OrganizationFactory(mnemonic='org')
source = OrganizationSourceFactory(mnemonic='sequence', organization=org)
self.assertEqual(source.autoid_concept_mnemonic, None)

source.autoid_concept_mnemonic = 'sequential'
source.autoid_concept_mnemonic_start_from = 100
source.save()

self.assertEqual(source.autoid_concept_mnemonic, 'sequential')
self.assertEqual(source.autoid_concept_mnemonic_start_from, 100)
create_seq.assert_called_once_with(
'_orgs_org_sources_sequence__concepts_mnemonic_seq', 'sources.uri', 0, 100
)

def test_get_mapped_sources(self):
source = OrganizationSourceFactory(mnemonic='subject')
source1 = OrganizationSourceFactory(mnemonic='source1')
Expand Down

0 comments on commit 6088782

Please sign in to comment.