Skip to content

Commit

Permalink
Implement basic GET and POST /index/{GUID}/aliases
Browse files Browse the repository at this point in the history
- Basic GET and POST: no validation or error handling, only direct db manipulation
- Reason: basic GET and POST required to bootstrap tests in `tests/test_aliases_endpoints.py`
  • Loading branch information
mpingram committed Oct 9, 2019
1 parent 9184444 commit 39c80b1
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
13 changes: 11 additions & 2 deletions indexd/index/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,15 +376,24 @@ def add_index_record_version(record):

@blueprint.route("/index/<path:record>/aliases", methods=["GET"])
def get_aliases(record):
raise NoRecordFound()
"""
Get all aliases associated with this DID / GUID
"""
ret = blueprint.index_driver.get_aliases_for_did(record)
return flask.jsonify(ret), 200

@blueprint.route("/index/<path:record>/aliases", methods=["POST"])
def append_aliases(record):
raise NoRecordFound()

@blueprint.route("/index/<path:record>/aliases", methods=["PUT"])
def replace_aliases(record):
raise NoRecordFound()
"""
Replace all aliases associated with this DID / GUID
"""
aliases = flask.request.get_json()
ret = blueprint.index_driver.replace_aliases_for_did(aliases, record)
return flask.jsonify(ret), 200

@blueprint.route("/index/<path:record>/aliases", methods=["DELETE"])
def delete_aliases(record):
Expand Down
19 changes: 17 additions & 2 deletions indexd/index/drivers/alchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,22 @@ def get_aliases_for_did(self, did):
"""
with self.session as session:
query = session.query(IndexRecordAlias).filter(IndexRecordAlias.did == did)
return [i.name for i in query]
return [{"value": i.name} for i in query]

def replace_aliases_for_did(self, aliases, did):
"""
Replace all aliases for one DID / GUID with new aliases.
"""
with self.session as session:
# delete this GUID's aliases
session.query(IndexRecordAlias).\
filter(IndexRecordAlias.did == did).\
delete(synchronize_session='evaluate')
# add new aliases
index_record_aliases = [IndexRecordAlias(did=did, name=alias["value"]) for alias in aliases]
session.add_all(index_record_aliases)

return self.get_aliases_for_did(did)

def get(self, did):
"""
Expand All @@ -791,7 +806,7 @@ def update(self, did, rev, changing_fields):
composite_fields = ["urls", "acl", "authz", "metadata", "urls_metadata"]

with self.session as session:
query = session.query(IndexRecord).filter(IndexRecord.did == did)
query = session.query(IndexRecord).filter(IndexRecord.did == did) # FIXME -- add .for_update() to defend against race condition (?)

try:
record = query.one()
Expand Down

0 comments on commit 39c80b1

Please sign in to comment.