Esempio n. 1
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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.")
Esempio n. 5
0
    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
Esempio n. 6
0
    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)
Esempio n. 7
0
 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'
     )
Esempio n. 8
0
    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)
Esempio n. 9
0
# -*- 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(),
Esempio n. 10
0
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',
Esempio n. 11
0
"""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
Esempio n. 12
0
 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
Esempio n. 13
0
 def _delete(self, **kwargs):
     """Internal delete object method."""
     update_hash = {'deleted': datetime_now_nomicrosecond().isoformat()}
     self._update(update_hash, **kwargs)