def _delete(self, **kwargs): """Internal delete object method.""" force = kwargs.pop('force', False) if force: return self._force_delete(**kwargs) update_hash = { 'deleted': datetime_now_nomicrosecond().isoformat() } return self._update(update_hash, **kwargs)
def _update_modification_times(doi_list): """Touch a list of DOI Entries to force a modification time update.""" touch_query = DOIEntries.select().where(DOIEntries.doi << doi_list) print(touch_query) update_count = 0 with DB.atomic(): for entry in touch_query: entry.updated = datetime_now_nomicrosecond() entry.save(only=entry.dirty_fields) update_count += 1 return update_count
def __fix_dates(orig_obj, db_obj): """Fix the dates for insert.""" for date_key in ['created', 'updated', 'deleted']: if date_key in orig_obj: db_obj[date_key] = datetime_converts(orig_obj[date_key]) for date_key in ['created', 'updated']: if date_key not in orig_obj: db_obj[date_key] = datetime_converts( datetime_now_nomicrosecond()) if 'deleted' not in orig_obj: db_obj['deleted'] = None
def _update(self, update_hash, **kwargs): """Internal update method for an object.""" update_hash['updated'] = update_hash.get('updated', datetime_now_nomicrosecond()) did_something = False for obj in self.select().where(self.where_clause(kwargs)): did_something = True obj.from_hash(update_hash) obj.save() if not did_something: raise HTTPError(500, "Get args didn't select any objects.")
def change_doi_entry_info(doi_string, doi_info, status='pending', released=False): """Update or create DOI entries.""" doi_entry = DOIEntries.get(DOIEntries.doi == doi_string) insert_item = {'status': status, 'released': released} doi_entry.from_hash(insert_item) doi_entry.updated = datetime_now_nomicrosecond() doi_entry.save(only=doi_entry.dirty_fields) DOIRegistrationBase._update_doi_metadata_info(doi_info, doi_string) return doi_entry
def test_datetime_converts(self): """ The method supports three types of conversions. 1. a parsable string either unicode or str 2. a datetime object 3. an epoch style int """ self.assertEqual(datetime_converts(0), datetime.utcfromtimestamp(0)) now_chk = datetime_now_nomicrosecond() self.assertEqual(datetime_converts(now_chk), now_chk) chk_date = datetime(2016, 7, 5, 9, 22, 12) uni_date = u'2016-07-05T09:22:12' str_date = '2016-07-05T09:22:12' self.assertEqual(datetime_converts(uni_date), chk_date) self.assertEqual(datetime_converts(str_date), chk_date) # error state something it can't deal with self.assertEqual(datetime_converts({}), None)
def _update(self, update_hash, **kwargs): """Internal update method for an object.""" update_hash['updated'] = update_hash.get( 'updated', datetime_now_nomicrosecond()) did_something = False query = self.select().where(self.where_clause(kwargs)) for obj in query: did_something = True obj.from_hash(update_hash) obj.save() if not did_something: raise HTTPError(500, "Get args didn't select any objects.") self._send_orm_event( self.__class__, [ self._primary_keys_as_dict(obj) for obj in query ], 'update' )
def test_methods(self): """Test the PUT (insert) method.""" set_hash = {'name': 'Renamed File', 'updated': None} req = requests.post('{0}/files'.format(self.url), data=dumps(set_hash), headers=self.headers) self.assertEqual(req.status_code, 500) del set_hash['updated'] set_hash['mtime'] = datetime.now().isoformat() req = requests.post('{0}/files'.format(self.url), data=dumps(set_hash), headers=self.headers) self.assertEqual(req.status_code, 200) req = requests.get('{0}/files'.format(self.url)) self.assertEqual(req.status_code, 200) files = req.json() self.assertEqual(len(files), 2) for file_hash in files: self.assertEqual(file_hash['name'], 'Renamed File') req = requests.get('{0}/files'.format(self.url)) self.assertEqual(req.status_code, 200) files = req.json() self.assertEqual(len(files), 2) # update a foreign key to Keys obj that isn't there req = requests.post('{0}/file_key_value?file_id=103'.format(self.url), data='{"key_id": 107}', headers=self.headers) self.assertEqual(req.status_code, 500) req = requests.put( '{0}/file_key_value'.format(self.url), data='{"key_id": 107, "file_id": 103, "value_id": 103}', headers=self.headers) self.assertEqual(req.status_code, 500) # try changing updating something that works req = requests.post( '{0}/file_key_value?file_id=103&key_id=103&value_id=103'.format( self.url), data='{"key_id": 104, "file_id": 103, "value_id": 103}', headers=self.headers) self.assertEqual(req.status_code, 200) # just try invalid json req = requests.post('{0}/keys'.format(self.url), data='{ some bad json}', headers=self.headers) self.assertEqual(req.status_code, 400) req = requests.put('{0}/keys'.format(self.url), data='{ some bad json}', headers=self.headers) self.assertEqual(req.status_code, 400) # insert one item req = requests.put('{0}/keys'.format(self.url), data=dumps({ '_id': 1, 'key': 'blarg', 'created': datetime_now_nomicrosecond().isoformat() }), headers=self.headers) self.assertEqual(req.status_code, 200) # try inserting empty array req = requests.put('{0}/keys'.format(self.url), data=dumps([]), headers=self.headers) self.assertEqual(req.status_code, 200) # try to insert the same item again req = requests.put('{0}/keys'.format(self.url), data=dumps({ '_id': 1, 'key': 'blarg' }), headers=self.headers) self.assertEqual(req.status_code, 400) req = requests.post('{0}/keys?_id=107'.format(self.url), data='{"_id": 142}', headers=self.headers) self.assertEqual(req.status_code, 500) # delete the item I just put in req = requests.delete('{0}/keys?key=blarg'.format(self.url)) self.assertEqual(req.status_code, 200)
# -*- coding: utf-8 -*- """Test the files ORM object.""" from datetime import datetime, timedelta from json import dumps from pacifica.metadata.orm.utils import datetime_now_nomicrosecond from pacifica.metadata.orm.files import Files from pacifica.metadata.orm.transactions import Transactions from .base_test import TestBase from .transactions_test import SAMPLE_TRANSACTION_HASH, TestTransactions SAMPLE_FILE_HASH = { '_id': 127, 'name': 'test.txt', 'subdir': 'a/b', 'mimetype': 'text/plain', 'mtime': datetime_now_nomicrosecond().isoformat(), 'ctime': datetime_now_nomicrosecond().isoformat(), 'hashtype': 'sha1', 'hashsum': 'd8ff327b2f643130b431ae7c1f1b1e191bc419af', 'size': 1234, 'transaction_id': SAMPLE_TRANSACTION_HASH['_id'], 'suspense_date': datetime.utcnow().date().isoformat(), 'encoding': 'UTF8' } SAMPLE_UNICODE_FILE_HASH = { '_id': 127, 'name': u'abcdé.txt', 'subdir': u'abcdé/b', 'mimetype': 'text/plain', 'mtime': datetime_now_nomicrosecond().isoformat(),
from json import dumps from pacifica.metadata.orm.utils import datetime_now_nomicrosecond from pacifica.metadata.orm.proposals import Proposals from .base_test import TestBase SAMPLE_PROPOSAL_HASH = { '_id': '17a', 'title': 'My Proposal Title', 'short_name': 'Short Name for Display', 'abstract': """ This is my proposal that's really cool and you should accept it. ;) """, 'science_theme': 'Nobel Prize Winners', 'proposal_type': 'Blarg!', 'encoding': 'UTF8', 'submitted_date': datetime_now_nomicrosecond().isoformat(), 'accepted_date': datetime.utcnow().date().isoformat(), 'actual_start_date': datetime.utcnow().date().isoformat(), 'actual_end_date': datetime.utcnow().date().isoformat(), 'closed_date': datetime.utcnow().date().isoformat(), 'suspense_date': datetime.utcnow().date().isoformat() } SAMPLE_UNICODE_PROPOSAL_HASH = { '_id': u'17é', 'title': u'My Proposal Titlé', 'short_name': u'Short Namé for Display', 'abstract': u""" This is my proposal that's réally cool and you should accept it. ;) """, 'science_theme': u'Nobél Prize Winners',
"""Base testing module implements the temporary database to be used.""" from datetime import datetime, timedelta from time import mktime from json import dumps from pacifica.metadata.orm.utils import datetime_now_nomicrosecond from pacifica.metadata.orm.base import PacificaModel from .base_test import TestBase SAMPLE_ZERO_ISO_HASH = { 'created': '1969-12-31T16:00:00', 'updated': '1969-12-31T16:00:00', 'deleted': '1969-12-31T16:00:00' } SAMPLE_ZERO_HASH = {'created': 0, 'updated': 0, 'deleted': None} SAMPLE_REP_HASH = { 'created': datetime_now_nomicrosecond().isoformat(), 'updated': datetime_now_nomicrosecond().isoformat(), 'deleted': None } SAMPLE_BAD_HASH = { 'created': 'blarg', 'updated': int(mktime(datetime.utcnow().timetuple())), 'deleted': None } class TestDBDates(TestBase): """Setup the test cases for the base object attributes for the ORM.""" obj_cls = PacificaModel # pylint: disable=no-member
def _check_doi_info_for_change(item_to_check, value): if item_to_check.value != value: item_to_check.value = value item_to_check.updated = datetime_now_nomicrosecond() return item_to_check
def _delete(self, **kwargs): """Internal delete object method.""" update_hash = {'deleted': datetime_now_nomicrosecond().isoformat()} self._update(update_hash, **kwargs)