Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 133 doidatasets primary key #136

Merged
merged 18 commits into from
May 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions metadata/rest/test/test_transactioninfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,21 +154,21 @@ 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),
data='[{}, {}]'.format(str_transaction_id, 68),
headers={'content-type': 'application/json'}
)
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(
'{0}/transactioninfo/release_state/{1}'.format(self.url, str_transaction_id))
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)
74 changes: 62 additions & 12 deletions metadata/rest/transaction_queries/transaction_release_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -15,30 +15,80 @@ class TransactionReleaseState(QueryBase):

@staticmethod
def _get_release_state(transaction_list):
output_results = {}
# pylint: disable=no-member
releases = (TransactionRelease
.select(
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(
release['authorized_person'], 'simple')
release['person_info'] = user_lookup_cache[release['authorized_person']]
release.update({
'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'])
})
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_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 = 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
})
return output_results

@staticmethod
def _get_citation_release(release_id):
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(
{
'citation_id': citation_entry.citation.id,
'title': citation_entry.citation.article_title,
'doi_reference': citation_entry.citation.doi_reference
}
)
return output_results

# Cherrypy requires these named methods.
Expand Down