Skip to content

Commit

Permalink
optional fields
Browse files Browse the repository at this point in the history
  • Loading branch information
BinamB authored and BinamB committed Jun 19, 2020
1 parent 426a957 commit 9c16bc8
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 7 deletions.
31 changes: 27 additions & 4 deletions indexd/drs/blueprint.py
Expand Up @@ -103,7 +103,13 @@ def indexd_to_drs(record, expand=False, list_drs=False):
record["created_date"] if "created_date" in record else record["created_time"]
)

version = record["rev"] if "rev" in record else ""
version = (
record["rev"]
if "rev" in record
else record["version"]
if "version" in record
else ""
)

updated_date = (
record["updated_date"] if "updated_date" in record else record["updated_time"]
Expand All @@ -113,7 +119,13 @@ def indexd_to_drs(record, expand=False, list_drs=False):

description = record["description"] if "description" in record else None

alias = record["alias"] if "alias" in record else []
alias = (
record["alias"]
if "alias" in record
else eval(record["aliases"])
if "aliases" in record
else []
)

drs_object = {
"id": did,
Expand All @@ -123,14 +135,13 @@ def indexd_to_drs(record, expand=False, list_drs=False):
"created_time": created_time,
"updated_time": updated_date,
"size": record["size"],
"aliases": [],
"aliases": alias,
"contents": [],
"self_uri": self_uri,
"version": version,
"form": form,
"checksums": [],
"description": description,
"aliases": alias,
}

if "description" in record:
Expand Down Expand Up @@ -202,6 +213,15 @@ def bundle_to_drs(record, expand=False, is_content=False):

if not is_content:
# Show these only if its the leading bundle
description = record["description"] if "description" in record else ""
aliases = (
record["alias"]
if "alias" in record
else eval(record["aliases"])
if "aliases" in record
else []
)
version = record["version"] if "version" in record else ""
drs_object["checksums"] = []
parse_checksums(record, drs_object)

Expand All @@ -219,6 +239,9 @@ def bundle_to_drs(record, expand=False, is_content=False):
drs_object["created_time"] = created_time
drs_object["updated_time"] = updated_time
drs_object["size"] = record["size"]
drs_object["aliases"] = aliases
drs_object["description"] = description
drs_object["version"] = version

return drs_object

Expand Down
17 changes: 16 additions & 1 deletion indexd/index/blueprint.py
Expand Up @@ -640,6 +640,17 @@ def post_bundle():
bundles = flask.request.json.get("bundles")
bundle_id = flask.request.json.get("bundle_id")
size = flask.request.json.get("size") if flask.request.json.get("size") else 0
description = (
flask.request.json.get("description")
if flask.request.json.get("description")
else ""
)
version = (
flask.request.json.get("version") if flask.request.json.get("version") else ""
)
aliases = (
flask.request.json.get("aliases") if flask.request.json.get("aliases") else []
)

if len(bundles) == 0:
raise UserError("Bundle data required.")
Expand All @@ -652,6 +663,8 @@ def post_bundle():

bundle_data = []
checksums = []

# get bundles/records that already exists and add it to bundle_data
for bundle in bundles:
data = get_index_record(bundle)[0]
data = data.json
Expand All @@ -671,6 +684,9 @@ def post_bundle():
size=size,
bundle_data=json.dumps(bundle_data),
checksum=checksum,
description=description,
version=version,
aliases=json.dumps(aliases),
)

return flask.jsonify({"bundle_id": ret[0], "name": ret[1], "contents": ret[2]}), 200
Expand All @@ -694,7 +710,6 @@ def get_bundle_record_with_id(bundle_id):
"""
Returns a record given bundle_id
"""
from indexd.drs.blueprint import indexd_to_drs, bundle_to_drs

expand = True if flask.request.args.get("expand") == "true" else False

Expand Down
17 changes: 16 additions & 1 deletion indexd/index/drivers/alchemy.py
Expand Up @@ -1522,7 +1522,15 @@ def len(self):
).scalar()

def add_bundle(
self, bundle_id=None, name=None, checksum=None, size=None, bundle_data=None
self,
bundle_id=None,
name=None,
checksum=None,
size=None,
bundle_data=None,
description=None,
version=None,
aliases=None,
):
"""
Add a bundle record
Expand All @@ -1546,6 +1554,12 @@ def add_bundle(

record.bundle_data = bundle_data

record.description = description

record.version = version

record.aliases = aliases

try:
session.add(record)
session.commit()
Expand Down Expand Up @@ -1591,6 +1605,7 @@ def get_bundle(self, bundle_id, expand=False):
raise NoRecordFound("No bundle found")

doc = record.to_document_dict(expand)

return doc

def get_bundle_and_object_list(
Expand Down
2 changes: 1 addition & 1 deletion indexd/index/schema.py
Expand Up @@ -122,7 +122,7 @@
"description": "optional version string of the object",
"type": "string",
},
"aliases": {"type": "array"},
"aliases": {"description": "Optional", "type": "array",},
},
}

Expand Down
50 changes: 50 additions & 0 deletions tests/test_bundles.py
Expand Up @@ -59,6 +59,56 @@ def test_bundle_post(client, user):
assert res2.status_code == 200


def test_bundle_get_post_with_optional_fields(client, user):
"""
Bundle 1
+-object1
Bundel 2
+-Bundle 1
+-object1
+-object1
"""
did_list, _ = create_index(client, user)

data = get_bundle_doc(bundles=did_list)
data["description"] = "This is a cool bundle."
data["version"] = "v13cde"
data["aliases"] = ["123", "456"]

res2 = client.post("/bundle/", json=data, headers=user)
rec2 = res2.json
did = rec2["bundle_id"]
assert res2.status_code == 200

res3 = client.get("/ga4gh/drs/v1/objects/" + did)
rec3 = res3.json
assert res3.status_code == 200
assert rec3["description"] == data["description"]
assert rec3["version"] == data["version"]
assert rec3["aliases"] == data["aliases"]

res4 = client.get("/bundle/" + did)
rec4 = res4.json
assert res4.status_code == 200
assert rec4["description"] == data["description"]
assert rec4["version"] == data["version"]
assert rec4["aliases"] == data["aliases"]

# Nested bundle shouldn't contain optional fields
data2 = get_bundle_doc(bundles=[did, did_list[0]])
res5 = client.post("/bundle/", json=data2, headers=user)
did2 = res5.json["bundle_id"]
assert res5.status_code == 200
res6 = client.get("/bundle/" + did2 + "?expand=true")
rec6 = res6.json
contents = rec6["contents"]
for content in contents:
assert "description" not in content
assert "version" not in content
assert "aliases" not in content


def test_bundle_post_self_reference(client, user):
"""
Make sure this doesnt exist
Expand Down

0 comments on commit 9c16bc8

Please sign in to comment.