def create_new_pid(self, pid_value): """ Creates a new row inside the ``Record`` table. If ``pid_value`` is not ``None`` will be use as ``id`` to create this new row. """ if pid_value is not None: record = Record(id=int(pid_value)) else: record = Record() try: db.session.add(record) db.session.commit() except SQLAlchemyError: db.session.rollback() raise ValueError("Duplicate value for %s" % (pid_value, )) return str(record.id)
def create_records(self, rng): """Place records with specific IDs to the database.""" from invenio_records.api import Record as Rec from invenio_records.models import Record for i in rng: rec = Record(id=i) db.session.add(rec) rec = Rec.create({ 'recid': i, 'collections': {'primary': 'HEP'}, 'title': 'Record ' + str(i) }) rec.commit() db.session.flush()
def test_attach_tags_to_record_pass(self): """Successfully attach tags to a record.""" from invenio_records.models import Record # first create a record test_record = Record(creation_date=datetime.now(), modification_date=datetime.now()) test_record_info = dict(name="test_record") test_record.additional_info = test_record_info db.session.add(test_record) db.session.commit() # attach tags to the record tag_data = dict(tags=["ROOT", "PHYSICS"]) answer = self.post( 'recordlisttagresource', user_id=self.user_a.id, data=tag_data, urlargs=dict(record_id=test_record.id), ) # answer.json is a list of TagRepresentation objects ordered_created_tags = [] for tag_representation in answer.json: ordered_tag_repr = OrderedDict( sorted(tag_representation.items(), key=lambda t: t[0])) ordered_created_tags.append(ordered_tag_repr) # now query DB get_answer = self.get( 'recordlisttagresource', user_id=self.user_a.id, urlargs=dict(record_id=test_record.id), ) ordered_retrieved_tags = [] for retrieved_tag_repr in get_answer.json: ordered_retrieved_tag_repr = OrderedDict( sorted(retrieved_tag_repr.items(), key=lambda t: t[0])) ordered_retrieved_tags.append(ordered_retrieved_tag_repr) self.assertEqual(ordered_created_tags, ordered_retrieved_tags) self.delete('taglistresource', user_id=self.user_a.id, code=204) # delete the created record db.session.delete(test_record) db.session.commit()
def test_detach_tags_from_record_pass(self): """Successfully detach tag from record.""" from invenio_records.models import Record # first create a record test_record = Record(creation_date=datetime.now(), modification_date=datetime.now()) db.session.add(test_record) db.session.commit() # create some tags tags_list = ["HighEnergyPhysics", "Higgs", "ROOT"] # attach the tags to the record tags_data = dict(tags=tags_list, ) self.post( 'recordlisttagresource', user_id=self.user_a.id, data=tags_data, urlargs=dict(record_id=test_record.id), ) # detach tags from record and delete them self.delete('taglistresource', user_id=self.user_a.id, code=204) # delete record db.session.delete(test_record) db.session.commit()
def test_detach_tags_from_record_fails(self): """Fail to detach tag from record.""" from invenio_records.models import Record # first create a record test_record = Record(creation_date=datetime.now(), modification_date=datetime.now()) db.session.add(test_record) db.session.commit() # create a tag data = dict(name='HighEnergyPhysics', ) self.post( 'taglistresource', user_id=self.user_a.id, data=data, code=201, ) # try to detach tag that is not attached to record detach_answer = self.delete( 'recordtagresource', urlargs=dict(record_id=test_record.id, tag_name=data[data.keys()[0]]), user_id=self.user_a.id, ) ordered_detach_answer = OrderedDict( sorted(detach_answer.json.items(), key=lambda t: t[0])) expected_result = dict( message=("Tag '{0} is not attached to record with id={1}".format( data[data.keys()[0]], test_record.id)), status=400) ordered_expected_result = OrderedDict( sorted(expected_result.items(), key=lambda t: t[0])) self.assertEqual(ordered_detach_answer, ordered_expected_result) # delete tag self.delete('taglistresource', user_id=self.user_a.id, code=204) # delete record db.session.delete(test_record) db.session.commit()