From a52465a4c92709bfd5bd3d4910d1a063d8432636 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Tue, 1 May 2018 17:12:05 -0700 Subject: [PATCH 01/17] Tweaking the peewee code for generating the DOIDatasets object to use a proper primary key. updating the psycopg2 package in requirements to reflect its new naming (psycopg2-binary) Fixes #133 --- metadata/orm/base.py | 3 +-- metadata/orm/doi_release.py | 2 +- metadata/orm/doidatasets.py | 2 +- requirements-dev.txt | 2 +- requirements.txt | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/metadata/orm/base.py b/metadata/orm/base.py index f6086e06..81d6fd4b 100644 --- a/metadata/orm/base.py +++ b/metadata/orm/base.py @@ -154,7 +154,6 @@ def _build_object(self, attr): @staticmethod def get_append_item(obj_ref, fk_item_name, fk_obj_list): """Generate the proper item to append to the newly built object.""" - # pylint: disable=protected-access if 'key' in fk_obj_list.values() and 'value' in fk_obj_list.values(): append_item = { 'key_id': obj_ref.__data__['key'], @@ -172,7 +171,7 @@ def _generate_fk_obj_list(self, obj_ref): if len(valid_fk_obj_list) == 1: fk_item_name = fk_obj_list[valid_fk_obj_list.pop()] else: - fk_item_name = 'id' + fk_item_name = obj_ref.__class__._meta.__dict__['primary_key'].__dict__['column_name'] return fk_item_name, fk_obj_list def from_hash(self, obj): diff --git a/metadata/orm/doi_release.py b/metadata/orm/doi_release.py index 4b406a21..0aec7f44 100644 --- a/metadata/orm/doi_release.py +++ b/metadata/orm/doi_release.py @@ -24,7 +24,7 @@ class DOIRelease(CherryPyAPI): """ doi = ForeignKeyField( - DOIDataSets, related_name='doi_releases', to_field='doi') + DOIDataSets, related_name='doi_entries', to_field='doi') release = ForeignKeyField(TransactionRelease, related_name='doi_releases') # pylint: disable=too-few-public-methods diff --git a/metadata/orm/doidatasets.py b/metadata/orm/doidatasets.py index d476b4f6..f9fe1e02 100644 --- a/metadata/orm/doidatasets.py +++ b/metadata/orm/doidatasets.py @@ -23,7 +23,7 @@ class DOIDataSets(CherryPyAPI): +-------------------+-------------------------------------+ """ - doi = CharField(unique=True) + doi = CharField(primary_key=True) name = CharField(default='') encoding = CharField(default='UTF8') creator = ForeignKeyField(Users, related_name='dois_created') diff --git a/requirements-dev.txt b/requirements-dev.txt index a7b26476..7ef5a047 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ mock nose peewee>2 pep257 -psycopg2 +psycopg2-binary pylint pytest python-dateutil diff --git a/requirements.txt b/requirements.txt index abd87a6d..21b7abf8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ cherrypy elasticsearch peewee>2 -psycopg2 +psycopg2-binary python-dateutil requests six From f51b1b32986cb0957fb885153cfbf6e6fc641ab8 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Wed, 2 May 2018 01:55:54 -0700 Subject: [PATCH 02/17] syntax fixes --- metadata/orm/base.py | 3 ++- metadata/orm/test/base.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/metadata/orm/base.py b/metadata/orm/base.py index 81d6fd4b..a108fcf7 100644 --- a/metadata/orm/base.py +++ b/metadata/orm/base.py @@ -171,7 +171,8 @@ def _generate_fk_obj_list(self, obj_ref): if len(valid_fk_obj_list) == 1: fk_item_name = fk_obj_list[valid_fk_obj_list.pop()] else: - fk_item_name = obj_ref.__class__._meta.__dict__['primary_key'].__dict__['column_name'] + fk_item_name = obj_ref.__class__._meta.__dict__[ + 'primary_key'].__dict__['column_name'] return fk_item_name, fk_obj_list def from_hash(self, obj): diff --git a/metadata/orm/test/base.py b/metadata/orm/test/base.py index 6b0a58c1..96000fa9 100644 --- a/metadata/orm/test/base.py +++ b/metadata/orm/test/base.py @@ -68,8 +68,10 @@ def base_test_hash(self, obj_hash): check all keys in the new hash from the obj_hash passed """ obj = self.base_create_obj(self.obj_cls, obj_hash) + # pylint: disable=no-member new_obj = self.obj_cls.get( self.obj_id == getattr(obj, self.obj_id.column_name)) + # pylint: enable=no-member chk_obj_hash = new_obj.to_hash() self.assertTrue('_id' in chk_obj_hash) for key in obj_hash.keys(): @@ -91,8 +93,10 @@ def base_test_json(self, json_str): obj = self.obj_cls() obj.from_hash(loads(json_str)) obj.save(force_insert=True) + # pylint: disable=no-member new_obj = self.obj_cls.get( self.obj_id == getattr(obj, self.obj_id.column_name)) + # pylint: enable=no-member chk_obj_json = dumps(new_obj.to_hash()) self.assertEqual(type(chk_obj_json), str) From 5f922600b63010a8756e6f746bb7ffd2463892e9 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Wed, 2 May 2018 02:11:41 -0700 Subject: [PATCH 03/17] pylint fix --- metadata/orm/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/metadata/orm/base.py b/metadata/orm/base.py index a108fcf7..b871e538 100644 --- a/metadata/orm/base.py +++ b/metadata/orm/base.py @@ -168,11 +168,13 @@ def _generate_fk_obj_list(self, obj_ref): fk_obj_list = obj_ref.cls_foreignkey_rel_mods() valid_fk_obj_list = list( set(fk_obj_list) - set([self.__class__])) + # pylint: disable=protected-access if len(valid_fk_obj_list) == 1: fk_item_name = fk_obj_list[valid_fk_obj_list.pop()] else: fk_item_name = obj_ref.__class__._meta.__dict__[ 'primary_key'].__dict__['column_name'] + # pylint: enable=protected-access return fk_item_name, fk_obj_list def from_hash(self, obj): From cbc69c0dc041f2fd385f68c377289fc92364fe01 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Wed, 2 May 2018 10:59:25 -0700 Subject: [PATCH 04/17] Fixing test hash in DOIDataSets object --- metadata/orm/test/test_doidatasets.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/metadata/orm/test/test_doidatasets.py b/metadata/orm/test/test_doidatasets.py index 798c1d42..c9447ca1 100644 --- a/metadata/orm/test/test_doidatasets.py +++ b/metadata/orm/test/test_doidatasets.py @@ -9,7 +9,6 @@ from metadata.orm.users import Users SAMPLE_DOIDATASET_HASH = { - '_id': 142, 'doi': 'halitosis', 'name': 'halitosis', 'encoding': 'UTF8', @@ -19,7 +18,6 @@ # yes a DOI can be unicode.... # https://www.doi.org/doi_handbook/2_Numbering.html#2.2.1 SAMPLE_UNICODE_DOIDATASET_HASH = { - '_id': 143, 'doi': u'blargééééé', 'name': u'blargééééé', 'encoding': 'UTF8', From cb806b1894539a2e36dcca617ef29f8be91de7ba Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Wed, 2 May 2018 11:36:45 -0700 Subject: [PATCH 05/17] more ID fixes --- metadata/orm/test/test_doidatasets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata/orm/test/test_doidatasets.py b/metadata/orm/test/test_doidatasets.py index c9447ca1..5652394a 100644 --- a/metadata/orm/test/test_doidatasets.py +++ b/metadata/orm/test/test_doidatasets.py @@ -29,7 +29,7 @@ class TestDOIDataSets(TestBase): """Test the Keywords ORM object.""" obj_cls = DOIDataSets - obj_id = DOIDataSets.id + obj_id = DOIDataSets.doi @classmethod def base_create_dep_objs(cls): From 4bd9c5c445f93c32dcfe60d368cfd1ee53e3e517 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 16:24:02 -0700 Subject: [PATCH 06/17] Final changes to TransactionReleaseState --- .../transaction_release_state.py | 62 ++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 842a433b..a3a53df1 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -3,7 +3,7 @@ """CherryPy Status Transaction Metadata object class.""" from cherrypy import tools, request from metadata.rest.transaction_queries.query_base import QueryBase -from metadata.orm import TransactionRelease +from metadata.orm import TransactionRelease, DOIRelease, CitationRelease from metadata.rest.user_queries.user_lookup import UserLookup from metadata.orm.base import db_connection_decorator @@ -19,6 +19,7 @@ def _get_release_state(transaction_list): # pylint: disable=no-member releases = (TransactionRelease .select( + TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, TransactionRelease.authorized_person ) @@ -27,18 +28,73 @@ def _get_release_state(transaction_list): user_lookup_cache = {} found_transactions = [] + for release in releases: found_transactions.append(release['transaction']) if release['authorized_person'] not in user_lookup_cache: user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( release['authorized_person'], 'simple') - release['person_info'] = user_lookup_cache[release['authorized_person']] + release['authorized_person'] = user_lookup_cache[release['authorized_person']] + release['release_state'] = 'released' + release['display_state'] = 'Released' + release['release_doi_entries'] = TransactionReleaseState._get_doi_release( + release['release_id']) + # release['release_doi'] = release['doi_releases'].pop() if len(release['doi_releases']) > 0 else None + release['release_citations'] = TransactionReleaseState._get_citation_release( + release['release_id']) output_results[release['transaction']] = release missing_transactions = list( set(transaction_list) - set(found_transactions)) for txn in missing_transactions: - output_results[txn] = {} + output_results[txn] = { + 'authorized_person': None, + 'release_id': None, + 'release_state': 'not_released', + 'display_state': 'Not Released', + 'transaction': txn + } + + return output_results + + @staticmethod + def _get_doi_release(release_id): + output_results = [] + # pylint: disable=no-member + doi_releases = (DOIRelease + .select() + .where(DOIRelease.release_id == release_id)) + # pylint: enable=no-member + if doi_releases.exists(): + for release in doi_releases: + print(release.doi.name) + output_results.append({ + 'doi_name': release.doi.name, + 'doi_reference': release.doi.doi + }) + else: + output_results = None + return output_results + + @staticmethod + def _get_citation_release(release_id): + output_results = [] + # pylint: disable=no-member + citation_releases = (CitationRelease + .select() + .where(CitationRelease.release_id == release_id)) + # pylint: enable=no-member + if citation_releases.exists(): + for citation_entry in citation_releases: + output_results.append( + { + 'citation_id': citation_entry.citation.id, + 'title': citation_entry.citation.article_title, + 'doi_reference': citation_entry.citation.doi_reference + } + ) + else: + output_results = None return output_results # Cherrypy requires these named methods. From 963c86d2387940f092436bcb652ba52e6d572b77 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 16:53:16 -0700 Subject: [PATCH 07/17] Unit test fixes --- metadata/rest/test/test_orm.py | 2 +- metadata/rest/test/test_transactioninfo.py | 4 ++-- .../transaction_release_state.py | 13 ++++--------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/metadata/rest/test/test_orm.py b/metadata/rest/test/test_orm.py index fa5d390d..efaadeb4 100644 --- a/metadata/rest/test/test_orm.py +++ b/metadata/rest/test/test_orm.py @@ -126,7 +126,7 @@ def test_perf_of_large_insert(self): data=txt_trans, headers=self.headers) self.assertEqual(req.status_code, 200) end_time = time() - self.assertTrue(end_time - start_time < 90) + self.assertTrue(end_time - start_time < 150) def test_set_or_create(self): """Test the internal set or create method.""" diff --git a/metadata/rest/test/test_transactioninfo.py b/metadata/rest/test/test_transactioninfo.py index 367195b7..f949b9a2 100644 --- a/metadata/rest/test/test_transactioninfo.py +++ b/metadata/rest/test/test_transactioninfo.py @@ -154,7 +154,7 @@ def test_transaction_release(self): data = loads(req.text) self.assertTrue('69' in data) self.assertEqual(data['69']['transaction'], 69) - self.assertEqual(data['69']['person_info']['first_name'], 'bob') + self.assertEqual(data['69']['authorized_person']['first_name'], 'bob') req = requests.post( '{0}/transactioninfo/release_state'.format(self.url), data='[{}]'.format(str_transaction_id), @@ -163,7 +163,7 @@ def test_transaction_release(self): data = loads(req.text) self.assertTrue('69' in data) self.assertEqual(data['69']['transaction'], 69) - self.assertEqual(data['69']['person_info']['first_name'], 'bob') + self.assertEqual(data['69']['authorized_person']['first_name'], 'bob') str_transaction_id = 4239672 req = requests.get( diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index a3a53df1..80da2812 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -15,17 +15,14 @@ class TransactionReleaseState(QueryBase): @staticmethod def _get_release_state(transaction_list): - output_results = {} # pylint: disable=no-member releases = (TransactionRelease - .select( - TransactionRelease.id.alias('release_id'), - TransactionRelease.transaction, - TransactionRelease.authorized_person - ) - .where(TransactionRelease.transaction << transaction_list).dicts()) + .select(TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, + TransactionRelease.authorized_person + ).where(TransactionRelease.transaction << transaction_list).dicts()) # pylint: enable=no-member + output_results = {} user_lookup_cache = {} found_transactions = [] @@ -39,7 +36,6 @@ def _get_release_state(transaction_list): release['display_state'] = 'Released' release['release_doi_entries'] = TransactionReleaseState._get_doi_release( release['release_id']) - # release['release_doi'] = release['doi_releases'].pop() if len(release['doi_releases']) > 0 else None release['release_citations'] = TransactionReleaseState._get_citation_release( release['release_id']) output_results[release['transaction']] = release @@ -67,7 +63,6 @@ def _get_doi_release(release_id): # pylint: enable=no-member if doi_releases.exists(): for release in doi_releases: - print(release.doi.name) output_results.append({ 'doi_name': release.doi.name, 'doi_reference': release.doi.doi From 0f25494050435a497f0a155e6c6044e350e4bdcc Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 17:06:53 -0700 Subject: [PATCH 08/17] testing and code climate fixes --- metadata/rest/test/test_transactioninfo.py | 2 +- .../transaction_release_state.py | 24 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/metadata/rest/test/test_transactioninfo.py b/metadata/rest/test/test_transactioninfo.py index f949b9a2..1e79a28d 100644 --- a/metadata/rest/test/test_transactioninfo.py +++ b/metadata/rest/test/test_transactioninfo.py @@ -171,4 +171,4 @@ def test_transaction_release(self): self.assertEqual(req.status_code, 200) data = loads(req.text) self.assertTrue('4239672' in data) - self.assertFalse(data['4239672']) + self.assertFalse(data['4239672'] is None) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 80da2812..45b48960 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -19,7 +19,8 @@ def _get_release_state(transaction_list): releases = (TransactionRelease .select(TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, TransactionRelease.authorized_person - ).where(TransactionRelease.transaction << transaction_list).dicts()) + ) + .where(TransactionRelease.transaction << transaction_list).dicts()) # pylint: enable=no-member output_results = {} @@ -31,24 +32,21 @@ def _get_release_state(transaction_list): if release['authorized_person'] not in user_lookup_cache: user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( release['authorized_person'], 'simple') - release['authorized_person'] = user_lookup_cache[release['authorized_person']] - release['release_state'] = 'released' - release['display_state'] = 'Released' - release['release_doi_entries'] = TransactionReleaseState._get_doi_release( - release['release_id']) - release['release_citations'] = TransactionReleaseState._get_citation_release( - release['release_id']) + release_additions = { + 'authorized_person': user_lookup_cache[release['authorized_person']], + 'release_state': 'released', 'display_state': 'Released', + 'release_doi_entries': TransactionReleaseState._get_doi_release(release['release_id']), + 'release_citations': TransactionReleaseState._get_citation_release(release['release_id']) + } + release.update(release_additions) output_results[release['transaction']] = release missing_transactions = list( set(transaction_list) - set(found_transactions)) for txn in missing_transactions: output_results[txn] = { - 'authorized_person': None, - 'release_id': None, - 'release_state': 'not_released', - 'display_state': 'Not Released', - 'transaction': txn + 'authorized_person': None, 'release_id': None, 'release_state': 'not_released', + 'display_state': 'Not Released', 'transaction': txn } return output_results From f522948f189fd31ad4d17780434913f73aff0d8f Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 17:11:56 -0700 Subject: [PATCH 09/17] Does everyone hate CodeClimate, or is it just me? --- .../transaction_release_state.py | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 45b48960..1e226176 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -12,37 +12,29 @@ class TransactionReleaseState(QueryBase): """Retrieves release state for an individual transaction (GET) or set of transactions (POST).""" exposed = True + user_lookup_cache = {} @staticmethod def _get_release_state(transaction_list): - # pylint: disable=no-member - releases = (TransactionRelease - .select(TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, - TransactionRelease.authorized_person - ) - .where(TransactionRelease.transaction << transaction_list).dicts()) - # pylint: enable=no-member + releases = TransactionReleaseState._get_release_info(transaction_list) output_results = {} - user_lookup_cache = {} found_transactions = [] for release in releases: found_transactions.append(release['transaction']) - if release['authorized_person'] not in user_lookup_cache: - user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( + if release['authorized_person'] not in self.user_lookup_cache: + self.user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( release['authorized_person'], 'simple') - release_additions = { - 'authorized_person': user_lookup_cache[release['authorized_person']], + release.update({ + 'authorized_person': self.user_lookup_cache[release['authorized_person']], 'release_state': 'released', 'display_state': 'Released', 'release_doi_entries': TransactionReleaseState._get_doi_release(release['release_id']), 'release_citations': TransactionReleaseState._get_citation_release(release['release_id']) - } - release.update(release_additions) + }) output_results[release['transaction']] = release - missing_transactions = list( - set(transaction_list) - set(found_transactions)) + missing_transactions = list(set(transaction_list) - set(found_transactions)) for txn in missing_transactions: output_results[txn] = { 'authorized_person': None, 'release_id': None, 'release_state': 'not_released', @@ -51,6 +43,17 @@ def _get_release_state(transaction_list): return output_results + @staticmethod + def _get_release_info(transaction_list): + # pylint: disable=no-member + releases = (TransactionRelease + .select(TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, + TransactionRelease.authorized_person + ) + .where(TransactionRelease.transaction << transaction_list).dicts()) + # pylint: enable=no-member + return releases + @staticmethod def _get_doi_release(release_id): output_results = [] From 0a40feda8317865b859ccad7af49822836d01e45 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 17:20:27 -0700 Subject: [PATCH 10/17] more syntax fixes --- .../transaction_queries/transaction_release_state.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 1e226176..e37c676e 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -12,22 +12,22 @@ class TransactionReleaseState(QueryBase): """Retrieves release state for an individual transaction (GET) or set of transactions (POST).""" exposed = True - user_lookup_cache = {} @staticmethod def _get_release_state(transaction_list): releases = TransactionReleaseState._get_release_info(transaction_list) output_results = {} + user_lookup_cache = {} found_transactions = [] for release in releases: found_transactions.append(release['transaction']) - if release['authorized_person'] not in self.user_lookup_cache: - self.user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( + if release['authorized_person'] not in user_lookup_cache: + user_lookup_cache[release['authorized_person']] = UserLookup.get_user_info_block( release['authorized_person'], 'simple') release.update({ - 'authorized_person': self.user_lookup_cache[release['authorized_person']], + 'authorized_person': user_lookup_cache[release['authorized_person']], 'release_state': 'released', 'display_state': 'Released', 'release_doi_entries': TransactionReleaseState._get_doi_release(release['release_id']), 'release_citations': TransactionReleaseState._get_citation_release(release['release_id']) @@ -48,8 +48,7 @@ def _get_release_info(transaction_list): # pylint: disable=no-member releases = (TransactionRelease .select(TransactionRelease.id.alias('release_id'), TransactionRelease.transaction, - TransactionRelease.authorized_person - ) + TransactionRelease.authorized_person) .where(TransactionRelease.transaction << transaction_list).dicts()) # pylint: enable=no-member return releases From 5ed4483222528504772dc57663d3ee485ffef3fa Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 17:34:40 -0700 Subject: [PATCH 11/17] formatting fix --- metadata/rest/transaction_queries/transaction_release_state.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index e37c676e..6efc224d 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -34,7 +34,8 @@ def _get_release_state(transaction_list): }) output_results[release['transaction']] = release - missing_transactions = list(set(transaction_list) - set(found_transactions)) + missing_transactions = list( + set(transaction_list) - set(found_transactions)) for txn in missing_transactions: output_results[txn] = { 'authorized_person': None, 'release_id': None, 'release_state': 'not_released', From 04ae32e4327adae79a4a1485d1d32aa137474654 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 17:46:35 -0700 Subject: [PATCH 12/17] Unit test fixes --- metadata/rest/test/test_transactioninfo.py | 3 ++- .../transaction_queries/transaction_release_state.py | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/metadata/rest/test/test_transactioninfo.py b/metadata/rest/test/test_transactioninfo.py index 1e79a28d..c2cb714a 100644 --- a/metadata/rest/test/test_transactioninfo.py +++ b/metadata/rest/test/test_transactioninfo.py @@ -148,6 +148,7 @@ def test_bad_transactioninfo_api(self): def test_transaction_release(self): """Test the transaction release data.""" str_transaction_id = 69 + nonexistent_release_id = 68 req = requests.get( '{0}/transactioninfo/release_state/{1}'.format(self.url, str_transaction_id)) self.assertEqual(req.status_code, 200) @@ -157,7 +158,7 @@ def test_transaction_release(self): self.assertEqual(data['69']['authorized_person']['first_name'], 'bob') req = requests.post( '{0}/transactioninfo/release_state'.format(self.url), - data='[{}]'.format(str_transaction_id), + data='[{}, {}]'.format(str_transaction_id, nonexistent_release_id), headers={'content-type': 'application/json'} ) data = loads(req.text) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 6efc224d..9cf83be2 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -56,31 +56,31 @@ def _get_release_info(transaction_list): @staticmethod def _get_doi_release(release_id): - output_results = [] + output_results = None # pylint: disable=no-member doi_releases = (DOIRelease .select() .where(DOIRelease.release_id == release_id)) # pylint: enable=no-member if doi_releases.exists(): + output_results = {} for release in doi_releases: output_results.append({ 'doi_name': release.doi.name, 'doi_reference': release.doi.doi }) - else: - output_results = None return output_results @staticmethod def _get_citation_release(release_id): - output_results = [] + output_results = None # pylint: disable=no-member citation_releases = (CitationRelease .select() .where(CitationRelease.release_id == release_id)) # pylint: enable=no-member if citation_releases.exists(): + output_results = {} for citation_entry in citation_releases: output_results.append( { @@ -89,8 +89,6 @@ def _get_citation_release(release_id): 'doi_reference': citation_entry.citation.doi_reference } ) - else: - output_results = None return output_results # Cherrypy requires these named methods. From a4753ff99dad0f188ca61985b612c4f0c3ba91e1 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 18:01:50 -0700 Subject: [PATCH 13/17] more fixes --- metadata/rest/test/test_transactioninfo.py | 3 +-- .../rest/transaction_queries/transaction_release_state.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/metadata/rest/test/test_transactioninfo.py b/metadata/rest/test/test_transactioninfo.py index c2cb714a..80fb1979 100644 --- a/metadata/rest/test/test_transactioninfo.py +++ b/metadata/rest/test/test_transactioninfo.py @@ -148,7 +148,6 @@ def test_bad_transactioninfo_api(self): def test_transaction_release(self): """Test the transaction release data.""" str_transaction_id = 69 - nonexistent_release_id = 68 req = requests.get( '{0}/transactioninfo/release_state/{1}'.format(self.url, str_transaction_id)) self.assertEqual(req.status_code, 200) @@ -158,7 +157,7 @@ def test_transaction_release(self): self.assertEqual(data['69']['authorized_person']['first_name'], 'bob') req = requests.post( '{0}/transactioninfo/release_state'.format(self.url), - data='[{}, {}]'.format(str_transaction_id, nonexistent_release_id), + data='[{}, {}]'.format(str_transaction_id, 68), headers={'content-type': 'application/json'} ) data = loads(req.text) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 9cf83be2..4921059e 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -63,7 +63,7 @@ def _get_doi_release(release_id): .where(DOIRelease.release_id == release_id)) # pylint: enable=no-member if doi_releases.exists(): - output_results = {} + output_results = [] for release in doi_releases: output_results.append({ 'doi_name': release.doi.name, @@ -80,7 +80,7 @@ def _get_citation_release(release_id): .where(CitationRelease.release_id == release_id)) # pylint: enable=no-member if citation_releases.exists(): - output_results = {} + output_results = [] for citation_entry in citation_releases: output_results.append( { From e06f3a7fb811dd5fc74b4ecf91723ad8348b5b36 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Thu, 3 May 2018 19:09:06 -0700 Subject: [PATCH 14/17] Rolling this change back --- metadata/rest/test/test_orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata/rest/test/test_orm.py b/metadata/rest/test/test_orm.py index efaadeb4..fa5d390d 100644 --- a/metadata/rest/test/test_orm.py +++ b/metadata/rest/test/test_orm.py @@ -126,7 +126,7 @@ def test_perf_of_large_insert(self): data=txt_trans, headers=self.headers) self.assertEqual(req.status_code, 200) end_time = time() - self.assertTrue(end_time - start_time < 150) + self.assertTrue(end_time - start_time < 90) def test_set_or_create(self): """Test the internal set or create method.""" From 3ad12dfc3ba44158b09dba5d409a83ceed6766b3 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Fri, 4 May 2018 11:57:43 -0700 Subject: [PATCH 15/17] Rolling back this requirements change --- requirements-dev.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 7ef5a047..a7b26476 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -7,7 +7,7 @@ mock nose peewee>2 pep257 -psycopg2-binary +psycopg2 pylint pytest python-dateutil diff --git a/requirements.txt b/requirements.txt index 21b7abf8..abd87a6d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ cherrypy elasticsearch peewee>2 -psycopg2-binary +psycopg2 python-dateutil requests six From dc15931fe7d21bb66049e6c0a58167a4e575fea5 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Fri, 4 May 2018 12:08:51 -0700 Subject: [PATCH 16/17] Retrying failed travis run --- metadata/rest/transaction_queries/transaction_release_state.py | 1 - 1 file changed, 1 deletion(-) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index 4921059e..ba682f22 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -20,7 +20,6 @@ def _get_release_state(transaction_list): output_results = {} user_lookup_cache = {} found_transactions = [] - for release in releases: found_transactions.append(release['transaction']) if release['authorized_person'] not in user_lookup_cache: From cfb01451cf2c8a38bed8cde503844e9f0305e416 Mon Sep 17 00:00:00 2001 From: Ken Auberry Date: Fri, 4 May 2018 12:24:41 -0700 Subject: [PATCH 17/17] Why the Hell does Travis constantly crash??? --- metadata/rest/transaction_queries/transaction_release_state.py | 1 + 1 file changed, 1 insertion(+) diff --git a/metadata/rest/transaction_queries/transaction_release_state.py b/metadata/rest/transaction_queries/transaction_release_state.py index ba682f22..4921059e 100644 --- a/metadata/rest/transaction_queries/transaction_release_state.py +++ b/metadata/rest/transaction_queries/transaction_release_state.py @@ -20,6 +20,7 @@ def _get_release_state(transaction_list): output_results = {} user_lookup_cache = {} found_transactions = [] + for release in releases: found_transactions.append(release['transaction']) if release['authorized_person'] not in user_lookup_cache: