Skip to content

Commit

Permalink
feat(GP-13): relax update constraint
Browse files Browse the repository at this point in the history
  • Loading branch information
khan08 committed Jan 31, 2019
1 parent 95274d4 commit 04498d7
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
8 changes: 7 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,12 @@ def update(self, did, rev, changing_fields):
)
for m_key, m_value in changing_fields['metadata'].items()]

if 'hashes' in changing_fields:
for hash_key in record.hashes:
session.delete(hash_key)
for k, v in iteritems(changing_fields['hashes']):
session.add(IndexRecordHash(hash_type=k, hash_value=v, did=record.did))

if 'urls_metadata' in changing_fields:
for url in record.urls:
for url_metadata in url.url_metadata:
Expand Down
64 changes: 64 additions & 0 deletions indexd/index/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@
"file_name": {
"type": ["string", "null"],
},
"size": {
"type": "integer",
},
"version": {
"type": ["string", "null"],
},
Expand All @@ -159,5 +162,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: 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 04498d7

Please sign in to comment.