Skip to content

Commit

Permalink
Merge pull request #1 from NCI-GDC/feat/GP-13-relax-update-contraint
Browse files Browse the repository at this point in the history
feat(GP-13): relax update constraint
  • Loading branch information
khan08 authored Feb 27, 2019
2 parents 95274d4 + 23fe680 commit 7d4f866
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 3 deletions.
14 changes: 13 additions & 1 deletion indexd/index/drivers/alchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ def update(self, did, rev, changing_fields):
Updates an existing record with new values.
"""

composite_fields = ['urls', 'acl', 'metadata', 'urls_metadata']
composite_fields = ['urls', 'acl', 'metadata', 'urls_metadata', 'hashes']

with self.session as session:
query = session.query(IndexRecord).filter(IndexRecord.did == did)
Expand Down Expand Up @@ -808,6 +808,18 @@ def update(self, did, rev, changing_fields):
)
for m_key, m_value in changing_fields['metadata'].items()]

if 'hashes' in changing_fields:
for hash_doc in record.hashes:
session.delete(hash_doc)

record.hashes = [
IndexRecordHash(
did=record.did,
hash_type=hash_type,
hash_value=hash_value
)
for hash_type, hash_value in changing_fields['hashes'].items()]

if 'urls_metadata' in changing_fields:
for url in record.urls:
for url_metadata in url.url_metadata:
Expand Down
66 changes: 66 additions & 0 deletions indexd/index/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@
"file_name": {
"type": ["string", "null"],
},
"size": {
"description": "Size of the data being indexed in bytes",
"type": "integer",
"minimum": 0
},
"version": {
"type": ["string", "null"],
},
Expand All @@ -159,5 +164,66 @@
"urls_metadata": {
"type": "object",
},
"hashes": {
"type": "object",
"properties": {
"md5": {
"type": "string",
"pattern": "^[0-9a-f]{32}$"
},
"sha1": {
"type": "string",
"pattern": "^[0-9a-f]{40}$"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"sha512": {
"type": "string",
"pattern": "^[0-9a-f]{128}$"
},
"crc": {
"type": "string",
"pattern": "^[0-9a-f]{8}$"
},
"etag": {
"type": "string",
"pattern": "^[0-9a-f]{32}(-\d+)?$"
}
},
"anyOf": [
{
"required": [
"md5"
]
},
{
"required": [
"sha1"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"sha512"
]
},
{
"required": [
"crc"
]
},
{
"required": [
"etag"
]
}
]
}
}
}
6 changes: 6 additions & 0 deletions openapis/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -984,8 +984,14 @@ definitions:
UpdateInputInfo:
type: object
properties:
hashes:
$ref: '#/definitions/HashInfo'
file_name:
type: string
size:
type: integer
format: int64
description: size in bytes
metadata:
type: object
urls_metadata:
Expand Down
6 changes: 4 additions & 2 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,8 +614,8 @@ def test_index_update(swg_index_client):
assert r.rev
assert swg_index_client.get_entry(r.did).metadata == data['metadata']
dataNew = get_doc()
del dataNew['hashes']
del dataNew['size']
dataNew['hashes']['md5'] = '8b9942cf415384b27cadf1f4d2d682e4'
dataNew['size'] = 321
del dataNew['form']
dataNew['metadata'] = {'test': 'abcd'}
dataNew['version'] = 'ver123'
Expand All @@ -625,6 +625,8 @@ def test_index_update(swg_index_client):
result = swg_index_client.get_entry(r.did)
assert result.metadata == dataNew['metadata']
assert result.acl == dataNew['acl']
assert result.hashes.md5 == dataNew['hashes']['md5']
assert result.size == 321

data = get_doc()
data['did'] = 'cdis:3d313755-cbb4-4b08-899d-7bbac1f6e67d'
Expand Down

0 comments on commit 7d4f866

Please sign in to comment.