Skip to content

Commit c1c954f

Browse files
committed
feat: add import DT and update tests
1 parent d0d03c5 commit c1c954f

36 files changed

+2103
-55
lines changed

.coveragerc

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ omit =
2323
indykite_sdk/model/oauth2_provider_config.py
2424
indykite_sdk/model/auth_flow_config.py
2525
indykite_sdk/model/config_node.py
26+
indykite_sdk/model/import_digital_twin.py
2627

2728
tests/*
2829

README.md

+14-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

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

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

77
## Requirements
88

9-
* Python 3.8
9+
* Python 3.11
1010
* [Buf](https://github.com/bufbuild/buf)
1111

1212
## Installation
@@ -1272,7 +1272,7 @@ def update_auth_flow(self, local, location, config_node_id, etag, display_name,
12721272

12731273
### Get OAuth2 provider information
12741274

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

12781278
#### Read OAuth2 provider
@@ -1383,3 +1383,14 @@ def delete_oauth2_application(self, local, oauth2_application_id, etag, bookmark
13831383
config = client_config.delete_oauth2_application(oauth2_application_id, etag, bookmarks)
13841384
print(config)
13851385
```
1386+
1387+
### Import digital twins
1388+
```python
1389+
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import ImportDigitalTwin
1390+
from indykite_sdk.identity import IdentityClient
1391+
1392+
def import_digital_twins(self, local, entities, hash_algorithm):
1393+
client = IdentityClient(local)
1394+
response = client.import_digital_twins(entities, hash_algorithm)
1395+
print(response)
1396+
```

__init__.py

Whitespace-only changes.

codecov.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ ignore:
2929
- "indykite_sdk/model/oauth2_provider_config.py"
3030
- "indykite_sdk/model/auth_flow_config.py"
3131
- "indykite_sdk/model/config_node.py"
32+
- "indykite_sdk/model/import_digital_twin.py"
3233
- "tests"

indykite_sdk/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This project serves as a Software Development Kit for developers of Indykite app
44

55
## Requirements
66

7-
The api.py script runs on python3.8
7+
The api.py script runs on python3.11
88

99
## Usage
1010

indykite_sdk/api.py

+132-8
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@
88
from uuid import UUID
99
from google.protobuf.json_format import MessageToJson
1010

11+
from indykite_sdk.utils.hash_methods import encrypt_bcrypt, encrypt_sha256
1112
from indykite_sdk.identity import IdentityClient
1213
from indykite_sdk.config import ConfigClient
1314
from indykite_sdk.indykite.config.v1beta1.model_pb2 import (SendGridProviderConfig, MailJetProviderConfig, AmazonSESProviderConfig, MailgunProviderConfig)
1415
from indykite_sdk.indykite.config.v1beta1.model_pb2 import (EmailServiceConfig, AuthFlowConfig, OAuth2ClientConfig, IngestMappingConfig)
1516
from indykite_sdk.indykite.config.v1beta1.model_pb2 import OAuth2ProviderConfig, OAuth2ApplicationConfig
1617
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import ImportDigitalTwinsRequest, ImportDigitalTwin
17-
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import PasswordCredential, PasswordHash, Bcrypt
18+
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import PasswordCredential, PasswordHash, Bcrypt, SHA256
1819
from indykite_sdk.indykite.config.v1beta1.model_pb2 import EmailAttachment, Email, EmailMessage, EmailTemplate, EmailDefinition
1920
from indykite_sdk.indykite.config.v1beta1.model_pb2 import google_dot_protobuf_dot_wrappers__pb2 as wrappers
2021
from indykite_sdk.indykite.identity.v1beta2.import_pb2 import Email as EmailIdentity
2122

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

439441
# import_digital_twins
440442
import_digital_twins_parser = subparsers.add_parser("import_digital_twins")
443+
import_digital_twins_parser.add_argument("tenant_id", help="Tenant id (gid)")
444+
445+
# import_digital_twins_hash
446+
import_digital_twins_hash_parser = subparsers.add_parser("import_digital_twins_hash")
447+
import_digital_twins_hash_parser.add_argument("tenant_id", help="Tenant id (gid)")
448+
449+
# import_digital_twins_hash256
450+
import_digital_twins_hash256_parser = subparsers.add_parser("import_digital_twins_hash256")
451+
import_digital_twins_hash256_parser.add_argument("tenant_id", help="Tenant id (gid)")
452+
453+
# import_digital_twins_update
454+
import_digital_twins_update_parser = subparsers.add_parser("import_digital_twins_update")
455+
import_digital_twins_update_parser.add_argument("id", help="Digital Twin id (gid)")
456+
import_digital_twins_update_parser.add_argument("tenant_id", help="Tenant id (gid)")
441457

442458
args = parser.parse_args()
443459
local = args.local
@@ -1477,25 +1493,133 @@ def main():
14771493
elif command == "import_digital_twins":
14781494

14791495
entities = [ImportDigitalTwin(
1480-
tenant_id="696e6479-6b69-4465-8000-030f00000001",
1496+
tenant_id=args.tenant_id,
14811497
kind="DIGITAL_TWIN_KIND_PERSON",
14821498
state="DIGITAL_TWIN_STATE_ACTIVE",
14831499
password=PasswordCredential(
14841500
email=EmailIdentity(
1485-
email="test2000@example.com",
1501+
email="test2101@example.com",
14861502
verified=True
14871503
),
1488-
hash=PasswordHash(
1489-
password_hash=bytes("$2y$10$k64jP7oqwYfQpzmoqAN5OuhrtWI2wICn0wXUzYxMp.UA1PopI653G", "utf-8")
1504+
value="password"
1505+
)
1506+
),
1507+
ImportDigitalTwin(
1508+
tenant_id=args.tenant_id,
1509+
kind="DIGITAL_TWIN_KIND_PERSON",
1510+
state="DIGITAL_TWIN_STATE_ACTIVE",
1511+
password=PasswordCredential(
1512+
email=EmailIdentity(
1513+
1514+
verified=True
1515+
),
1516+
value="password"
1517+
)
1518+
),
1519+
ImportDigitalTwin(
1520+
tenant_id=args.tenant_id,
1521+
kind="DIGITAL_TWIN_KIND_PERSON",
1522+
state="DIGITAL_TWIN_STATE_ACTIVE",
1523+
password=PasswordCredential(
1524+
email=EmailIdentity(
1525+
1526+
verified=True
1527+
),
1528+
value="password"
14901529
)
14911530
)
1531+
]
1532+
hash_algorithm = None
1533+
1534+
import_digital_twins_config_response = client.import_digital_twins(
1535+
entities, hash_algorithm)
1536+
if import_digital_twins_config_response:
1537+
for response in import_digital_twins_config_response:
1538+
print_response(response)
1539+
else:
1540+
print("Invalid import digital twins response")
1541+
return import_digital_twins_config_response
1542+
1543+
elif command == "import_digital_twins_hash":
1544+
1545+
password = 'passwordabc'
1546+
hash_dict = encrypt_bcrypt(password)
1547+
for key in hash_dict:
1548+
salt = key
1549+
hash_password = hash_dict[key]
1550+
1551+
entities = [ImportDigitalTwin(
1552+
tenant_id=args.tenant_id,
1553+
kind="DIGITAL_TWIN_KIND_PERSON",
1554+
state="DIGITAL_TWIN_STATE_ACTIVE",
1555+
password=PasswordCredential(
1556+
email=EmailIdentity(
1557+
1558+
verified=True
1559+
),
1560+
hash=PasswordHash(password_hash=hash_password,salt=salt)
1561+
)
1562+
)]
1563+
hash_algorithm = {"bcrypt": {}}
1564+
1565+
import_digital_twins_config_response = client.import_digital_twins(
1566+
entities, hash_algorithm)
1567+
if import_digital_twins_config_response:
1568+
for response in import_digital_twins_config_response:
1569+
print_response(response)
1570+
else:
1571+
print("Invalid import digital twins response")
1572+
return import_digital_twins_config_response
1573+
1574+
elif command == "import_digital_twins_hash256":
1575+
1576+
password = 'passwordabc'
1577+
hash_password = encrypt_sha256(password)
1578+
1579+
entities = [ImportDigitalTwin(
1580+
tenant_id=args.tenant_id,
1581+
kind="DIGITAL_TWIN_KIND_PERSON",
1582+
state="DIGITAL_TWIN_STATE_ACTIVE",
1583+
password=PasswordCredential(
1584+
email=EmailIdentity(
1585+
1586+
verified=True
1587+
),
1588+
hash=PasswordHash(password_hash=hash_password)
1589+
)
1590+
)]
1591+
hash_algorithm = {"sha256": SHA256(rounds=14)}
1592+
1593+
import_digital_twins_config_response = client.import_digital_twins(
1594+
entities, hash_algorithm)
1595+
if import_digital_twins_config_response:
1596+
for response in import_digital_twins_config_response:
1597+
print_response(response)
1598+
else:
1599+
print("Invalid import digital twins response")
1600+
return import_digital_twins_config_response
1601+
1602+
elif command == "import_digital_twins_update":
1603+
entities = [ImportDigitalTwin(
1604+
id=args.id,
1605+
tenant_id=args.tenant_id,
1606+
kind="DIGITAL_TWIN_KIND_PERSON",
1607+
state="DIGITAL_TWIN_STATE_ACTIVE",
1608+
password=PasswordCredential(
1609+
email=EmailIdentity(
1610+
1611+
verified=True
1612+
),
1613+
value="password"
1614+
)
14921615
)]
1493-
hash_algorithm = Bcrypt()
1616+
hash_algorithm = None
14941617

14951618
import_digital_twins_config_response = client.import_digital_twins(
1496-
entities,hash_algorithm)
1619+
entities, hash_algorithm)
14971620
if import_digital_twins_config_response:
1498-
print_response(import_digital_twins_config_response)
1621+
for response in import_digital_twins_config_response:
1622+
print_response(response)
14991623
else:
15001624
print("Invalid import digital twins response")
15011625
return import_digital_twins_config_response

indykite_sdk/identity/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,4 @@ def __init__(self, local=False):
5555
from .verification import start_digital_twin_email_verification, verify_digital_twin_email
5656
from .delete import del_digital_twin, del_digital_twin_by_token
5757
from .enrich_token import enrich_token
58+
from .import_digital_twins import import_digital_twins

0 commit comments

Comments
 (0)