Skip to content

Commit

Permalink
feat: delete dt by property
Browse files Browse the repository at this point in the history
  • Loading branch information
cowan-macady committed Jun 6, 2023
1 parent 49c4a7b commit fc76ec9
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 8 deletions.
23 changes: 19 additions & 4 deletions indykite_sdk/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,12 @@ def main():
del_dt_by_token = subparsers.add_parser("del-dt-by-token")
del_dt_by_token.add_argument("user_token", help="JWT bearer token")

# DELETE-DT-BY-PROPERTY
del_dt_by_property = subparsers.add_parser("del-dt-by-property")
del_dt_by_property.add_argument("type", help="property_filter type")
del_dt_by_property.add_argument("value", help="property_filter value")
del_dt_by_property.add_argument("tenant_id", help="property_filter tenant_id")

# ENRICH-TOKEN
enrich_token = subparsers.add_parser("enrich-token")
enrich_token.add_argument("user_token", help="JWT bearer token")
Expand Down Expand Up @@ -762,6 +768,15 @@ def main():
if dt is not None:
print_response({ "digitalTwin": dt })

elif command == "del-dt-by-property":
type = args.type
value = args.value
tenant_id = args.tenant_id
property_filter = client.property_filter(type, value, tenant_id)
dt = client.del_digital_twin_by_property(property_filter)
if dt is not None:
print_response(dt)

elif command == "enrich-token":
user_token = args.user_token
token_claims = args.token_claims
Expand Down Expand Up @@ -1753,7 +1768,7 @@ def main():
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2204@example.com",
email="test2214@example.com",
verified=True
),
value="password"
Expand All @@ -1764,7 +1779,7 @@ def main():
definition=attributes.PropertyDefinition(
context="http://schema.org/",type="Person",property="email"
),
object_value=arg_to_value("testemail@exmple.com")))],
object_value=arg_to_value("testem@example.com")))],
force_delete=False)
),
ImportDigitalTwin(
Expand All @@ -1773,7 +1788,7 @@ def main():
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2205@example.com",
email="test2215@example.com",
verified=True
),
value="password"
Expand All @@ -1785,7 +1800,7 @@ def main():
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2206@example.com",
email="test2216@example.com",
verified=True
),
value="password"
Expand Down
2 changes: 1 addition & 1 deletion indykite_sdk/identity/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def __init__(self, local=False):
from .token_introspect import token_introspect, session_introspect
from .patch_properties import patch_properties_by_token, patch_properties
from .verification import start_digital_twin_email_verification, verify_digital_twin_email
from .delete import del_digital_twin, del_digital_twin_by_token
from .delete import del_digital_twin, del_digital_twin_by_token, del_digital_twin_by_property
from .enrich_token import enrich_token
from .import_digital_twins import import_digital_twins
from .consent import create_consent, list_consents, revoke_consent, check_oauth2_consent_challenge, \
Expand Down
35 changes: 35 additions & 0 deletions indykite_sdk/identity/delete.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@


def del_digital_twin(self, digital_twin_id, tenant_id):
"""
delete DT by id
:param self:
:param digital_twin_id: DT gid id string
:param tenant_id: tenant gid id string
:return: DigitalTwin object
"""
sys.excepthook = logger.handle_excepthook
try:
response = self.stub.DeleteDigitalTwin(
Expand All @@ -28,6 +35,12 @@ def del_digital_twin(self, digital_twin_id, tenant_id):


def del_digital_twin_by_token(self, token):
"""
delete DT by token
:param self:
:param token: user token
:return: DigitalTwin object
"""
sys.excepthook = logger.handle_excepthook
try:
if len(token) < 32:
Expand All @@ -48,3 +61,25 @@ def del_digital_twin_by_token(self, token):
return None

return DigitalTwinCore.deserialize(response.digital_twin)


def del_digital_twin_by_property(self, property_filter):
"""
delete DT by property
:param self:
:param property_filter: PropertyFilter attribute
:return: DigitalTwin object
"""
sys.excepthook = logger.handle_excepthook
try:
response = self.stub.DeleteDigitalTwin(
pb2.DeleteDigitalTwinRequest(
id=model.DigitalTwinIdentifier(property_filter=property_filter)
)
)
if not response:
return None

return DigitalTwinCore.deserialize(response.digital_twin)
except Exception as exception:
return logger.logger_error(exception)
6 changes: 3 additions & 3 deletions indykite_sdk/identity/get_digital_twin.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ def property_filter(self, type, value, tenant_id):
"""
create PropertyFilter object
:param self:
:param type:
:param value:
:param tenant_id:
:param type: string
:param value: Value
:param tenant_id: string gid
:return: PropertyFilter object
"""
sys.excepthook = logger.handle_excepthook
Expand Down
40 changes: 40 additions & 0 deletions tests/test_delete.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from indykite_sdk.model.digital_twin import DigitalTwinCore
from indykite_sdk.indykite.identity.v1beta2 import identity_management_api_pb2 as pb2
from indykite_sdk.indykite.identity.v1beta2 import model_pb2 as model
from indykite_sdk.utils.message_to_value import arg_to_value
from indykite_sdk.indykite.identity.v1beta2 import attributes_pb2 as attributes
from helpers import data


Expand Down Expand Up @@ -110,3 +112,41 @@ def mocked_del_digital_twin_by_token(request: pb2.DeleteDigitalTwinRequest):

assert response is not None
assert isinstance(response, DigitalTwinCore)


def test_del_digital_twin_non_existing_email(capsys):
digital_twin_email = "nonexistingemail@example.com"
tenant_id = data.get_tenant()

client = IdentityClient()
assert client is not None

property_filter = client.property_filter("email", digital_twin_email, tenant_id)
response = client.del_digital_twin_by_property(property_filter)
captured = capsys.readouterr()
assert "StatusCode.NOT_FOUND" in captured.err


def test_del_digital_twin_success(capsys):
digital_twin_email = "gid:AAAAFf_ZpzyM3UpRuG33DJLLNq0"
digital_twin_id = "existingemail@example.com"
tenant_id = data.get_tenant()

client = IdentityClient()
assert client is not None

property_filter = client.property_filter("email", digital_twin_email, tenant_id)

def mocked_del_digital_twin(request: pb2.DeleteDigitalTwinRequest):
assert request.id.property_filter.type == "email"
assert request.id.property_filter.value == arg_to_value(digital_twin_email)
assert request.id.property_filter.tenant_id == tenant_id
return pb2.DeleteDigitalTwinResponse(
digital_twin=model.DigitalTwin(id=digital_twin_id, tenant_id=tenant_id)
)

client.stub.DeleteDigitalTwin = mocked_del_digital_twin
response = client.del_digital_twin_by_property(property_filter)

assert response is not None
assert isinstance(response, DigitalTwinCore)

0 comments on commit fc76ec9

Please sign in to comment.