Skip to content

Commit

Permalink
feat: add import DT and update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cowan-macady committed Jan 12, 2023
1 parent d0d03c5 commit c1c954f
Show file tree
Hide file tree
Showing 36 changed files with 2,103 additions and 55 deletions.
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ omit =
indykite_sdk/model/oauth2_provider_config.py
indykite_sdk/model/auth_flow_config.py
indykite_sdk/model/config_node.py
indykite_sdk/model/import_digital_twin.py

tests/*

Expand Down
17 changes: 14 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

This project serves as a Software Development Kit for developers of Indykite applications.

[![codecov](https://codecov.io/gh/indykite/jarvis-sdk-python/branch/master/graph/badge.svg)](https://codecov.io/gh/indykite/indykite-sdk-python)
[![codecov](https://codecov.io/gh/indykite/indykite-sdk-python/branch/master/graph/badge.svg)](https://codecov.io/gh/indykite/indykite-sdk-python)

## Requirements

* Python 3.8
* Python 3.11
* [Buf](https://github.com/bufbuild/buf)

## Installation
Expand Down Expand Up @@ -1272,7 +1272,7 @@ def update_auth_flow(self, local, location, config_node_id, etag, display_name,

### Get OAuth2 provider information

In an Apppace, you can create OAuth2 providers.
In an Appspace, you can create OAuth2 providers.
An OAuth2 service provider is a named set of configuration options for OAuth2.

#### Read OAuth2 provider
Expand Down Expand Up @@ -1383,3 +1383,14 @@ def delete_oauth2_application(self, local, oauth2_application_id, etag, bookmark
config = client_config.delete_oauth2_application(oauth2_application_id, etag, bookmarks)
print(config)
```

### Import digital twins
```python
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import ImportDigitalTwin
from indykite_sdk.identity import IdentityClient

def import_digital_twins(self, local, entities, hash_algorithm):
client = IdentityClient(local)
response = client.import_digital_twins(entities, hash_algorithm)
print(response)
```
Empty file added __init__.py
Empty file.
1 change: 1 addition & 0 deletions codecov.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ ignore:
- "indykite_sdk/model/oauth2_provider_config.py"
- "indykite_sdk/model/auth_flow_config.py"
- "indykite_sdk/model/config_node.py"
- "indykite_sdk/model/import_digital_twin.py"
- "tests"
2 changes: 1 addition & 1 deletion indykite_sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This project serves as a Software Development Kit for developers of Indykite app

## Requirements

The api.py script runs on python3.8
The api.py script runs on python3.11

## Usage

Expand Down
140 changes: 132 additions & 8 deletions indykite_sdk/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@
from uuid import UUID
from google.protobuf.json_format import MessageToJson

from indykite_sdk.utils.hash_methods import encrypt_bcrypt, encrypt_sha256
from indykite_sdk.identity import IdentityClient
from indykite_sdk.config import ConfigClient
from indykite_sdk.indykite.config.v1beta1.model_pb2 import (SendGridProviderConfig, MailJetProviderConfig, AmazonSESProviderConfig, MailgunProviderConfig)
from indykite_sdk.indykite.config.v1beta1.model_pb2 import (EmailServiceConfig, AuthFlowConfig, OAuth2ClientConfig, IngestMappingConfig)
from indykite_sdk.indykite.config.v1beta1.model_pb2 import OAuth2ProviderConfig, OAuth2ApplicationConfig
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import ImportDigitalTwinsRequest, ImportDigitalTwin
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import PasswordCredential, PasswordHash, Bcrypt
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import PasswordCredential, PasswordHash, Bcrypt, SHA256
from indykite_sdk.indykite.config.v1beta1.model_pb2 import EmailAttachment, Email, EmailMessage, EmailTemplate, EmailDefinition
from indykite_sdk.indykite.config.v1beta1.model_pb2 import google_dot_protobuf_dot_wrappers__pb2 as wrappers
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import Email as EmailIdentity


class ParseKwargs(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None): # pragma: no cover
setattr(namespace, self.dest, dict())
Expand Down Expand Up @@ -438,6 +440,20 @@ def main():

# import_digital_twins
import_digital_twins_parser = subparsers.add_parser("import_digital_twins")
import_digital_twins_parser.add_argument("tenant_id", help="Tenant id (gid)")

# import_digital_twins_hash
import_digital_twins_hash_parser = subparsers.add_parser("import_digital_twins_hash")
import_digital_twins_hash_parser.add_argument("tenant_id", help="Tenant id (gid)")

# import_digital_twins_hash256
import_digital_twins_hash256_parser = subparsers.add_parser("import_digital_twins_hash256")
import_digital_twins_hash256_parser.add_argument("tenant_id", help="Tenant id (gid)")

# import_digital_twins_update
import_digital_twins_update_parser = subparsers.add_parser("import_digital_twins_update")
import_digital_twins_update_parser.add_argument("id", help="Digital Twin id (gid)")
import_digital_twins_update_parser.add_argument("tenant_id", help="Tenant id (gid)")

args = parser.parse_args()
local = args.local
Expand Down Expand Up @@ -1477,25 +1493,133 @@ def main():
elif command == "import_digital_twins":

entities = [ImportDigitalTwin(
tenant_id="696e6479-6b69-4465-8000-030f00000001",
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2000@example.com",
email="test2101@example.com",
verified=True
),
hash=PasswordHash(
password_hash=bytes("$2y$10$k64jP7oqwYfQpzmoqAN5OuhrtWI2wICn0wXUzYxMp.UA1PopI653G", "utf-8")
value="password"
)
),
ImportDigitalTwin(
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2102@example.com",
verified=True
),
value="password"
)
),
ImportDigitalTwin(
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2104@example.com",
verified=True
),
value="password"
)
)
]
hash_algorithm = None

import_digital_twins_config_response = client.import_digital_twins(
entities, hash_algorithm)
if import_digital_twins_config_response:
for response in import_digital_twins_config_response:
print_response(response)
else:
print("Invalid import digital twins response")
return import_digital_twins_config_response

elif command == "import_digital_twins_hash":

password = 'passwordabc'
hash_dict = encrypt_bcrypt(password)
for key in hash_dict:
salt = key
hash_password = hash_dict[key]

entities = [ImportDigitalTwin(
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2002@example.com",
verified=True
),
hash=PasswordHash(password_hash=hash_password,salt=salt)
)
)]
hash_algorithm = {"bcrypt": {}}

import_digital_twins_config_response = client.import_digital_twins(
entities, hash_algorithm)
if import_digital_twins_config_response:
for response in import_digital_twins_config_response:
print_response(response)
else:
print("Invalid import digital twins response")
return import_digital_twins_config_response

elif command == "import_digital_twins_hash256":

password = 'passwordabc'
hash_password = encrypt_sha256(password)

entities = [ImportDigitalTwin(
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2002@example.com",
verified=True
),
hash=PasswordHash(password_hash=hash_password)
)
)]
hash_algorithm = {"sha256": SHA256(rounds=14)}

import_digital_twins_config_response = client.import_digital_twins(
entities, hash_algorithm)
if import_digital_twins_config_response:
for response in import_digital_twins_config_response:
print_response(response)
else:
print("Invalid import digital twins response")
return import_digital_twins_config_response

elif command == "import_digital_twins_update":
entities = [ImportDigitalTwin(
id=args.id,
tenant_id=args.tenant_id,
kind="DIGITAL_TWIN_KIND_PERSON",
state="DIGITAL_TWIN_STATE_ACTIVE",
password=PasswordCredential(
email=EmailIdentity(
email="test2003@example.com",
verified=True
),
value="password"
)
)]
hash_algorithm = Bcrypt()
hash_algorithm = None

import_digital_twins_config_response = client.import_digital_twins(
entities,hash_algorithm)
entities, hash_algorithm)
if import_digital_twins_config_response:
print_response(import_digital_twins_config_response)
for response in import_digital_twins_config_response:
print_response(response)
else:
print("Invalid import digital twins response")
return import_digital_twins_config_response
Expand Down
1 change: 1 addition & 0 deletions indykite_sdk/identity/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,4 @@ def __init__(self, local=False):
from .verification import start_digital_twin_email_verification, verify_digital_twin_email
from .delete import del_digital_twin, del_digital_twin_by_token
from .enrich_token import enrich_token
from .import_digital_twins import import_digital_twins

0 comments on commit c1c954f

Please sign in to comment.