Skip to content
Snippets Groups Projects
Commit b37bda6c authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'f-assure-datetime' into 'dev'

assure_has_property with datetime objects

See merge request caosdb/caosdb-advanced-user-tools!50
parents 2c63eb59 db249589
No related branches found
No related tags found
1 merge request!22Release 0.3
......@@ -124,7 +124,7 @@ def test_find_functions():
def test_queries():
rec1, rec2, _, _ = insert_entities()
# no explicit functions since only `query` key is used,
# no explicit functions since only `query` key is used,
# so works with BaseTableExporter
export_dict = {
"Test_Property_1": {},
......
......@@ -45,6 +45,7 @@ from abc import ABCMeta, abstractmethod
import caosdb as db
from caosdb.exceptions import AmbiguityException, EntityDoesNotExistError
from datetime import datetime
from .datamodel_problems import DataModelProblems
from .guard import global_guard as guard
......@@ -85,7 +86,7 @@ def get_property(name):
try:
prop = db.execute_query("FIND Property with name='{}'".format(
name),
unique=True)
unique=True)
except (EntityDoesNotExistError, AmbiguityException):
# Property might actually be a RecordTypes
prop = get_recordtype(name)
......@@ -586,6 +587,15 @@ def assure_has_property(entity, name, value, to_be_updated=None,
break
# cover special case of datetimes that are returned as strings
# by pylib.
if isinstance(value, datetime):
if datetime.fromisoformat(el.value) == value:
contained = True
break
if contained:
logger.debug("entity {} has property {} with value {}".format(
entity.id, name, value))
......
......@@ -154,7 +154,8 @@ class BaseTableExporter(object):
except Exception as exc:
# invalid query
logger.debug(exc)
errmssg = "Empty or invalid query '{}' for entry {}".format(q, e)
errmssg = "Empty or invalid query '{}' for entry {}".format(
q, e)
raise TableExportError(errmssg)
if val is not None:
......
......@@ -32,6 +32,9 @@ from caosadvancedtools.cfood import (AbstractCFood, AbstractFileCFood, CMeal,
get_entity_for_path)
from caosadvancedtools.crawler import FileCrawler
from caosadvancedtools.example_cfood import ExampleCFood
from caosdb.common.models import _parse_single_xml_element
from lxml import etree
from datetime import datetime
PATTERN = "h.*"
......@@ -215,6 +218,26 @@ class InsertionTest(unittest.TestCase):
assert "parent" not in ps
assert "other_parent" not in ps
def test_assure_datetime(self):
entity_xml = '<Record id="1234" name="Test_Record"><Property id="1233" name="TestDate" datatype="DATETIME">{}</Property></Record>'
to_be_updated = []
rec = _parse_single_xml_element(
etree.fromstring(entity_xml.format("2020-01-01")))
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1), to_be_updated=to_be_updated)
assert not to_be_updated
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1, 0, 0), to_be_updated=to_be_updated)
assert not to_be_updated
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1, 15, 0), to_be_updated=to_be_updated)
assert len(to_be_updated) == 1
rec = _parse_single_xml_element(etree.fromstring(
entity_xml.format("2020-01-01T00:00:00.000")))
assure_has_property(entity=rec, name="TestDate", value=datetime(
2020, 1, 1), to_be_updated=to_be_updated)
assert len(to_be_updated) == 1
class DependendTest(unittest.TestCase):
def test(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment