Skip to content

Commit

Permalink
Enhance BEL Nanopub validation with caching
Browse files Browse the repository at this point in the history
  • Loading branch information
wshayes committed Apr 3, 2020
1 parent 87b0a79 commit 6dbf4ef
Show file tree
Hide file tree
Showing 3 changed files with 362 additions and 110 deletions.
45 changes: 29 additions & 16 deletions bel/db/arangodb.py
Expand Up @@ -29,6 +29,8 @@
belapi_settings_name = "settings" # BEL API settings and configuration
belapi_statemgmt_name = "state_mgmt" # BEL API state mgmt

bel_validations_name = "validations" # BEL Assertion/Annotation validations


# TODO - update get db and get collections using same pattern as in userstore/common/db.py
# I made the mistake below of edgestore_db = sys_db.create_database()
Expand Down Expand Up @@ -225,29 +227,40 @@ def get_belapi_handle(client, username=None, password=None):
sys_db = client.db("_system", username=username, password=password)

# Create a new database named "belapi"
try:
if sys_db.has_database(belapi_db_name):
if username and password:
belapi_db = client.db(belapi_db_name, username=username, password=password)
else:
belapi_db = client.db(belapi_db_name)
else:
if username and password:
belapi_db = sys_db.create_database(
sys_db.create_database(
name=belapi_db_name,
users=[{"username": username, "password": password, "active": True}],
)
else:
belapi_db = sys_db.create_database(name=belapi_db_name)
except arango.exceptions.DatabaseCreateError:
if username and password:
belapi_db = client.db(belapi_db_name, username=username, password=password)
else:
belapi_db = client.db(belapi_db_name)
sys_db.create_database(name=belapi_db_name)

try:
belapi_db.create_collection(belapi_settings_name)
except Exception:
pass
belapi_db = client.db(belapi_db_name)

try:
belapi_db.create_collection(belapi_statemgmt_name)
except Exception:
pass
if belapi_db.has_collection(belapi_settings_name):
belapi_settings_coll = belapi_db.collection(belapi_settings_name)
else:
belapi_settings_coll = belapi_db.create_collection(
belapi_settings_name, index_bucket_count=64
)

if belapi_db.has_collection(belapi_statemgmt_name):
belapi_statemgmt_coll = belapi_db.collection(belapi_statemgmt_name)
else:
belapi_statemgmt_coll = belapi_db.create_collection(
belapi_statemgmt_name, index_bucket_count=64
)

if belapi_db.has_collection(bel_validations_name):
bel_validations = belapi_db.collection(bel_validations_name)
else:
bel_validations = belapi_db.create_collection(bel_validations_name, index_bucket_count=64)

return belapi_db

Expand Down
5 changes: 4 additions & 1 deletion bel/lang/semantics.py
Expand Up @@ -36,7 +36,10 @@ def validate(bo, error_level: str = "WARNING") -> Tuple[bool, List[Tuple[str, st
bo = validate_arg_values(bo.ast, bo) # validates NSArg and StrArg values

else:
bo.validation_messages.append(("ERROR", "Invalid BEL Statement - cannot parse"))
# Don't show general error if more specific error is already added
errors = [error for error in bo.validation_messages if error[0] == "ERROR"]
if not errors:
bo.validation_messages.append(("ERROR", "Invalid BEL Statement - cannot parse"))

for msg in bo.validation_messages:
if msg[0] == "ERROR":
Expand Down

0 comments on commit 6dbf4ef

Please sign in to comment.