js7-client-python 2.0.12__py3-none-any.whl → 2.0.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- js7/api/joc/http/v_2_6_5/note/note.py +30 -0
- js7/api/joc/http/v_2_6_5/note/post/add.py +30 -0
- js7/api/joc/http/v_2_6_5/order/log.py +30 -0
- js7/api/joc/http/v_2_6_5/orders/overview/summary.py +30 -0
- js7/api/joc/http/v_2_6_5/workflows/search.py +30 -0
- js7/client/action/note/get_note_action.py +50 -0
- js7/client/action/note/post_to_note_action.py +80 -0
- js7/client/action/order/get_order_log_action.py +48 -0
- js7/client/action/order/get_orders_overview_action.py +54 -0
- js7/client/action/workflow/search_workflows_action.py +50 -0
- js7/client/client.py +5 -0
- js7/client/feature/note/manage.py +92 -0
- js7/client/feature/note/note.py +13 -0
- js7/client/feature/order/manage.py +87 -2
- js7/client/feature/workflow/manage.py +32 -3
- js7/model/private/http/joc/joc_v_2_6_5.py +295 -2
- js7/util/version_to_tuple.py +3 -3
- {js7_client_python-2.0.12.dist-info → js7_client_python-2.0.13.dist-info}/METADATA +1 -1
- {js7_client_python-2.0.12.dist-info → js7_client_python-2.0.13.dist-info}/RECORD +22 -10
- {js7_client_python-2.0.12.dist-info → js7_client_python-2.0.13.dist-info}/WHEEL +0 -0
- {js7_client_python-2.0.12.dist-info → js7_client_python-2.0.13.dist-info}/licenses/LICENSE +0 -0
- {js7_client_python-2.0.12.dist-info → js7_client_python-2.0.13.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from ......service.http_service import HTTPService
|
|
4
|
+
from ......model.private.http.joc.joc_v_2_6_5 import NoteIdentifier, NoteResponse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class EndpointCall:
|
|
9
|
+
http_service: HTTPService
|
|
10
|
+
access_token: str
|
|
11
|
+
payload: NoteIdentifier
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def note(call: EndpointCall) -> NoteResponse:
|
|
15
|
+
if not call.access_token:
|
|
16
|
+
raise ValueError("'access_token' is required in function call.")
|
|
17
|
+
|
|
18
|
+
body = call.payload.model_dump_json(by_alias=True, exclude_none=True)
|
|
19
|
+
|
|
20
|
+
with call.http_service as http:
|
|
21
|
+
resp = http.post(
|
|
22
|
+
path="/joc/api/note",
|
|
23
|
+
body=body,
|
|
24
|
+
headers={
|
|
25
|
+
"X-Access-Token": call.access_token,
|
|
26
|
+
"Accept": "application/json"
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return NoteResponse.model_validate_json(resp)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from .......service.http_service import HTTPService
|
|
4
|
+
from .......model.private.http.joc.joc_v_2_6_5 import AddPost, NoteResponse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class EndpointCall:
|
|
9
|
+
http_service: HTTPService
|
|
10
|
+
access_token: str
|
|
11
|
+
payload: AddPost
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def add(call: EndpointCall) -> NoteResponse:
|
|
15
|
+
if not call.access_token:
|
|
16
|
+
raise ValueError("'access_token' is required in function call.")
|
|
17
|
+
|
|
18
|
+
body = call.payload.model_dump_json(by_alias=True, exclude_none=True)
|
|
19
|
+
|
|
20
|
+
with call.http_service as http:
|
|
21
|
+
resp = http.post(
|
|
22
|
+
path="/joc/api/note/post/add",
|
|
23
|
+
body=body,
|
|
24
|
+
headers={
|
|
25
|
+
"X-Access-Token": call.access_token,
|
|
26
|
+
"Accept": "application/json"
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return NoteResponse.model_validate_json(resp)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from ......service.http_service import HTTPService
|
|
4
|
+
from ......model.private.http.joc.joc_v_2_6_5 import OrderHistoryFilter, OrderLog
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class EndpointCall:
|
|
9
|
+
http_service: HTTPService
|
|
10
|
+
access_token: str
|
|
11
|
+
payload: OrderHistoryFilter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def log(call: EndpointCall) -> OrderLog:
|
|
15
|
+
if not call.access_token:
|
|
16
|
+
raise ValueError("'access_token' is required in function call.")
|
|
17
|
+
|
|
18
|
+
body = call.payload.model_dump_json(by_alias=True, exclude_none=True)
|
|
19
|
+
|
|
20
|
+
with call.http_service as http:
|
|
21
|
+
resp = http.post(
|
|
22
|
+
path="/joc/api/order/log",
|
|
23
|
+
body=body,
|
|
24
|
+
headers={
|
|
25
|
+
"X-Access-Token": call.access_token,
|
|
26
|
+
"Accept": "application/json"
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return OrderLog.model_validate_json(resp)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from .......service.http_service import HTTPService
|
|
4
|
+
from .......model.private.http.joc.joc_v_2_6_5 import OrdersFilter, OrdersOverView
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class EndpointCall:
|
|
9
|
+
http_service: HTTPService
|
|
10
|
+
access_token: str
|
|
11
|
+
payload: OrdersFilter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def summary(call: EndpointCall) -> OrdersOverView:
|
|
15
|
+
if not call.access_token:
|
|
16
|
+
raise ValueError("'access_token' is required in function call.")
|
|
17
|
+
|
|
18
|
+
body = call.payload.model_dump_json(by_alias=True, exclude_none=True)
|
|
19
|
+
|
|
20
|
+
with call.http_service as http:
|
|
21
|
+
resp = http.post(
|
|
22
|
+
path="/joc/api/orders/overview/summary",
|
|
23
|
+
body=body,
|
|
24
|
+
headers={
|
|
25
|
+
"X-Access-Token": call.access_token,
|
|
26
|
+
"Accept": "application/json"
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return OrdersOverView.model_validate_json(resp)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from ......service.http_service import HTTPService
|
|
4
|
+
from ......model.private.http.joc.joc_v_2_6_5 import WorkflowSearchFilter, ResponseSearch
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class EndpointCall:
|
|
9
|
+
http_service: HTTPService
|
|
10
|
+
access_token: str
|
|
11
|
+
payload: WorkflowSearchFilter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def search(call: EndpointCall) -> ResponseSearch:
|
|
15
|
+
if not call.access_token:
|
|
16
|
+
raise ValueError("'access_token' is required in function call.")
|
|
17
|
+
|
|
18
|
+
body = call.payload.model_dump_json(by_alias=True, exclude_none=True)
|
|
19
|
+
|
|
20
|
+
with call.http_service as http:
|
|
21
|
+
resp = http.post(
|
|
22
|
+
path="/joc/api/workflows/search",
|
|
23
|
+
body=body,
|
|
24
|
+
headers={
|
|
25
|
+
"X-Access-Token": call.access_token,
|
|
26
|
+
"Accept": "application/json"
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
return ResponseSearch.model_validate_json(resp)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....api.joc.http.v_2_6_5.note.note import note, EndpointCall
|
|
5
|
+
from ....util.version_to_tuple import version_to_tuple
|
|
6
|
+
from ....model.public.client.enum.object_types import ObjectType
|
|
7
|
+
from ....model.private.http.joc.joc_v_2_6_5 import (
|
|
8
|
+
NoteIdentifier as NoteIdentifier_V_2_6_5,
|
|
9
|
+
CommonConfigurationType as CommonConfigurationType_V_2_6_5
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_note_action(
|
|
14
|
+
*,
|
|
15
|
+
context: Context,
|
|
16
|
+
name: str,
|
|
17
|
+
object_type: ObjectType
|
|
18
|
+
) -> Dict[str, Any]:
|
|
19
|
+
|
|
20
|
+
if version_to_tuple(context.version) >= version_to_tuple("2.6.5"):
|
|
21
|
+
request_data = _build_v_2_6_5_request(
|
|
22
|
+
name=name,
|
|
23
|
+
object_type=object_type
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
result = note(EndpointCall(
|
|
27
|
+
http_service=context.http_service,
|
|
28
|
+
access_token=context.auth_provider.login(),
|
|
29
|
+
payload=request_data,
|
|
30
|
+
))
|
|
31
|
+
|
|
32
|
+
return result.model_dump(mode="json").get("posts") or {}
|
|
33
|
+
|
|
34
|
+
raise RuntimeError(f"JOC Cockpit version {context.version} is not supported. Minimum required version is 2.6.5.")
|
|
35
|
+
|
|
36
|
+
def _build_v_2_6_5_request(
|
|
37
|
+
*,
|
|
38
|
+
name: str,
|
|
39
|
+
object_type: ObjectType
|
|
40
|
+
) -> NoteIdentifier_V_2_6_5:
|
|
41
|
+
|
|
42
|
+
# Validate: controller_id
|
|
43
|
+
if not name:
|
|
44
|
+
raise ValueError("'name' is required.")
|
|
45
|
+
|
|
46
|
+
# Result
|
|
47
|
+
return NoteIdentifier_V_2_6_5(
|
|
48
|
+
name=name,
|
|
49
|
+
object_type=CommonConfigurationType_V_2_6_5(object_type.value) # Raises ValueError() if invalid.
|
|
50
|
+
)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
from typing import Any, Dict, Literal, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....api.joc.http.v_2_6_5.note.post.add import add, EndpointCall
|
|
5
|
+
from ....util.version_to_tuple import version_to_tuple
|
|
6
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
7
|
+
from ....model.public.client.enum.object_types import ObjectType
|
|
8
|
+
from ....model.private.http.joc.joc_v_2_6_5 import (
|
|
9
|
+
CommonConfigurationType as CommonConfigurationType_V_2_6_5,
|
|
10
|
+
AddPost as AddPost_V_2_6_5,
|
|
11
|
+
AuditParams as AuditParams_V_2_6_5,
|
|
12
|
+
Severity as Severity_V_2_6_5
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def post_to_note_action(
|
|
17
|
+
*,
|
|
18
|
+
context: Context,
|
|
19
|
+
name: str,
|
|
20
|
+
object_type: ObjectType,
|
|
21
|
+
content: str,
|
|
22
|
+
severity: Literal["INFO", "LOW", "NORMAL", "HIGH", "CRITICAL"],
|
|
23
|
+
audit_log: Optional[AuditLog]
|
|
24
|
+
) -> Dict[str, Any]:
|
|
25
|
+
|
|
26
|
+
if version_to_tuple(context.version) >= version_to_tuple("2.6.5"):
|
|
27
|
+
request_data = _build_v_2_6_5_request(
|
|
28
|
+
name=name,
|
|
29
|
+
object_type=object_type,
|
|
30
|
+
content=content,
|
|
31
|
+
severity=severity,
|
|
32
|
+
audit_log=audit_log
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
result = add(EndpointCall(
|
|
36
|
+
http_service=context.http_service,
|
|
37
|
+
access_token=context.auth_provider.login(),
|
|
38
|
+
payload=request_data,
|
|
39
|
+
))
|
|
40
|
+
|
|
41
|
+
return result.model_dump(mode="json").get("posts") or {}
|
|
42
|
+
|
|
43
|
+
raise RuntimeError(f"JOC Cockpit version {context.version} is not supported. Minimum required version is 2.6.5.")
|
|
44
|
+
|
|
45
|
+
def _build_v_2_6_5_request(
|
|
46
|
+
*,
|
|
47
|
+
name: str,
|
|
48
|
+
object_type: ObjectType,
|
|
49
|
+
content: str,
|
|
50
|
+
severity: Literal["INFO", "LOW", "NORMAL", "HIGH", "CRITICAL"],
|
|
51
|
+
audit_log: Optional[AuditLog]
|
|
52
|
+
) -> AddPost_V_2_6_5:
|
|
53
|
+
|
|
54
|
+
# Validate: name
|
|
55
|
+
if not name:
|
|
56
|
+
raise ValueError("'name' is required.")
|
|
57
|
+
|
|
58
|
+
# Validate: content
|
|
59
|
+
if not content:
|
|
60
|
+
raise ValueError("'content' is required.")
|
|
61
|
+
|
|
62
|
+
# Validate: severity
|
|
63
|
+
if severity not in ("INFO", "LOW", "NORMAL", "HIGH", "CRITICAL"):
|
|
64
|
+
raise ValueError("'severity' must be 'INFO', 'LOW', 'NORMAL', 'HIGH' or 'CRITICAL'.")
|
|
65
|
+
|
|
66
|
+
# Build: audit_log
|
|
67
|
+
res_audit_log = AuditParams_V_2_6_5(
|
|
68
|
+
ticket_link=audit_log.ticket_link,
|
|
69
|
+
comment=audit_log.comment,
|
|
70
|
+
time_spent=audit_log.time_spent
|
|
71
|
+
) if audit_log else None
|
|
72
|
+
|
|
73
|
+
# Result
|
|
74
|
+
return AddPost_V_2_6_5(
|
|
75
|
+
name=name,
|
|
76
|
+
object_type=CommonConfigurationType_V_2_6_5(object_type.value), # Raises ValueError() if invalid.
|
|
77
|
+
content=content,
|
|
78
|
+
severity=Severity_V_2_6_5(severity), # Raises ValueError() if invalid.
|
|
79
|
+
audit_log=res_audit_log
|
|
80
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....api.joc.http.v_2_6_5.order.log import log, EndpointCall
|
|
5
|
+
from ....util.version_to_tuple import version_to_tuple
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_6_5 import (
|
|
7
|
+
OrderHistoryFilter as OrderHistoryFilter_V_2_6_5
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_order_log_action(
|
|
12
|
+
*,
|
|
13
|
+
context: Context,
|
|
14
|
+
controller_id: str,
|
|
15
|
+
history_id: int
|
|
16
|
+
) -> Dict[str, Any]:
|
|
17
|
+
|
|
18
|
+
if version_to_tuple(context.version) >= version_to_tuple("2.6.5"):
|
|
19
|
+
request_data = _build_v_2_6_5_request(
|
|
20
|
+
controller_id=controller_id,
|
|
21
|
+
history_id=history_id
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
result = log(EndpointCall(
|
|
25
|
+
http_service=context.http_service,
|
|
26
|
+
access_token=context.auth_provider.login(),
|
|
27
|
+
payload=request_data,
|
|
28
|
+
))
|
|
29
|
+
|
|
30
|
+
return result.model_dump(mode="json").get("log_events") or {}
|
|
31
|
+
|
|
32
|
+
raise RuntimeError(f"JOC Cockpit version {context.version} is not supported. Minimum required version is 2.6.5.")
|
|
33
|
+
|
|
34
|
+
def _build_v_2_6_5_request(
|
|
35
|
+
*,
|
|
36
|
+
controller_id: str,
|
|
37
|
+
history_id: int
|
|
38
|
+
) -> OrderHistoryFilter_V_2_6_5:
|
|
39
|
+
|
|
40
|
+
# Validate: controller_id
|
|
41
|
+
if not controller_id:
|
|
42
|
+
raise ValueError("'controller_id' is required.")
|
|
43
|
+
|
|
44
|
+
# Result
|
|
45
|
+
return OrderHistoryFilter_V_2_6_5(
|
|
46
|
+
controller_id=controller_id,
|
|
47
|
+
history_id=history_id
|
|
48
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from typing import Optional, Tuple
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....api.joc.http.v_2_6_5.orders.overview.summary import summary, EndpointCall
|
|
5
|
+
from ....util.version_to_tuple import version_to_tuple
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_6_5 import (
|
|
7
|
+
OrdersFilter as OrdersFilter_V_2_6_5
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_orders_overview_action(
|
|
12
|
+
*,
|
|
13
|
+
context: Context,
|
|
14
|
+
controller_id: Optional[str],
|
|
15
|
+
date_from: Optional[str],
|
|
16
|
+
date_to: Optional[str]
|
|
17
|
+
) -> Tuple[int, int]:
|
|
18
|
+
|
|
19
|
+
if version_to_tuple(context.version) >= version_to_tuple("2.6.5"):
|
|
20
|
+
request_data = _build_v_2_6_5_request(
|
|
21
|
+
controller_id=controller_id,
|
|
22
|
+
date_from=date_from,
|
|
23
|
+
date_to=date_to,
|
|
24
|
+
timezone=context.client_config.timezone
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
result = summary(EndpointCall(
|
|
28
|
+
http_service=context.http_service,
|
|
29
|
+
access_token=context.auth_provider.login(),
|
|
30
|
+
payload=request_data,
|
|
31
|
+
))
|
|
32
|
+
|
|
33
|
+
successful = result.orders.successful or 0 if result.orders else 0
|
|
34
|
+
failed = result.orders.failed or 0 if result.orders else 0
|
|
35
|
+
|
|
36
|
+
return (successful, failed)
|
|
37
|
+
|
|
38
|
+
raise RuntimeError(f"JOC Cockpit version {context.version} is not supported. Minimum required version is 2.6.5.")
|
|
39
|
+
|
|
40
|
+
def _build_v_2_6_5_request(
|
|
41
|
+
*,
|
|
42
|
+
controller_id: Optional[str],
|
|
43
|
+
date_from: Optional[str],
|
|
44
|
+
date_to: Optional[str],
|
|
45
|
+
timezone: Optional[str]
|
|
46
|
+
) -> OrdersFilter_V_2_6_5:
|
|
47
|
+
|
|
48
|
+
# Result
|
|
49
|
+
return OrdersFilter_V_2_6_5(
|
|
50
|
+
controller_id=controller_id,
|
|
51
|
+
date_from=date_from,
|
|
52
|
+
date_to=date_to,
|
|
53
|
+
time_zone=timezone
|
|
54
|
+
)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....api.joc.http.v_2_6_5.workflows.search import search as api_search, EndpointCall
|
|
5
|
+
from ....util.version_to_tuple import version_to_tuple
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_6_5 import (
|
|
7
|
+
WorkflowSearchFilter as WorkflowSearchFilter_V_2_6_5,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Returns: [Workflow Paths]
|
|
12
|
+
def search_workflows_action(*, context: Context, controller_id: str, search: str) -> List[str]:
|
|
13
|
+
|
|
14
|
+
if version_to_tuple(context.version) >= version_to_tuple("2.6.5"):
|
|
15
|
+
request_data = _build_v_2_6_5_request(
|
|
16
|
+
controller_id=controller_id,
|
|
17
|
+
search=search
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
result = api_search(EndpointCall(
|
|
21
|
+
http_service=context.http_service,
|
|
22
|
+
access_token=context.auth_provider.login(),
|
|
23
|
+
payload=request_data,
|
|
24
|
+
))
|
|
25
|
+
|
|
26
|
+
wf_paths: List[str] = []
|
|
27
|
+
|
|
28
|
+
if result.results:
|
|
29
|
+
for r in result.results:
|
|
30
|
+
if r.path:
|
|
31
|
+
wf_paths.append(r.path)
|
|
32
|
+
|
|
33
|
+
return wf_paths
|
|
34
|
+
|
|
35
|
+
raise RuntimeError(f"JOC Cockpit version {context.version} is not supported. Minimum required version is 2.6.5.")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _build_v_2_6_5_request(*, controller_id: str, search: str) -> WorkflowSearchFilter_V_2_6_5:
|
|
39
|
+
# Validate: controller_id
|
|
40
|
+
if not controller_id:
|
|
41
|
+
raise ValueError("'controller_id' is required.")
|
|
42
|
+
|
|
43
|
+
# Validate: search
|
|
44
|
+
if not search:
|
|
45
|
+
raise ValueError("'search' is required.")
|
|
46
|
+
|
|
47
|
+
return WorkflowSearchFilter_V_2_6_5(
|
|
48
|
+
controller_id=controller_id,
|
|
49
|
+
search=search
|
|
50
|
+
)
|
js7/client/client.py
CHANGED
|
@@ -16,6 +16,7 @@ from .feature.workflow.workflow import Workflow
|
|
|
16
16
|
from .feature.controller.controller import Controller
|
|
17
17
|
from .feature.iam.iam import IAM
|
|
18
18
|
from .feature.daily_plan.daily_plan import DailyPlan
|
|
19
|
+
from .feature.note.note import Note
|
|
19
20
|
|
|
20
21
|
from .action.helper.encrypt_action import encrypt_action
|
|
21
22
|
from .action.helper.decrypt_action import decrypt_action
|
|
@@ -90,6 +91,10 @@ class Client:
|
|
|
90
91
|
@cached_property
|
|
91
92
|
def daily_plan(self) -> DailyPlan:
|
|
92
93
|
return DailyPlan(context=self._ctx)
|
|
94
|
+
|
|
95
|
+
@cached_property
|
|
96
|
+
def note(self) -> Note:
|
|
97
|
+
return Note(context=self._ctx)
|
|
93
98
|
|
|
94
99
|
def login(self, auth_config: Optional[AuthConfiguration] = None, force_server_login: bool = False) -> str:
|
|
95
100
|
"""
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
from typing import Any, Dict, Literal, Optional
|
|
2
|
+
|
|
3
|
+
from js7.model.public.client.common.audit_log import AuditLog
|
|
4
|
+
|
|
5
|
+
from ....model.public.client.enum.object_types import ObjectType
|
|
6
|
+
|
|
7
|
+
from ...context import Context
|
|
8
|
+
|
|
9
|
+
from ...action.note.get_note_action import get_note_action
|
|
10
|
+
from ...action.note.post_to_note_action import post_to_note_action
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Manage:
|
|
14
|
+
def __init__(self, context: Context):
|
|
15
|
+
self._ctx = context
|
|
16
|
+
|
|
17
|
+
def get_note(
|
|
18
|
+
self,
|
|
19
|
+
name: str,
|
|
20
|
+
object_type: ObjectType
|
|
21
|
+
) -> Dict[str, Any]:
|
|
22
|
+
"""
|
|
23
|
+
Gets a note.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
name (str):
|
|
27
|
+
Object name of the configuration item.
|
|
28
|
+
|
|
29
|
+
object_type (ObjectType):
|
|
30
|
+
Object type of the configuration item.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
Dict[str, Any]:
|
|
34
|
+
A list of posts.
|
|
35
|
+
|
|
36
|
+
Raises:
|
|
37
|
+
ValueError:
|
|
38
|
+
If required arguments are missing or invalid.
|
|
39
|
+
|
|
40
|
+
RuntimeError:
|
|
41
|
+
If the operation fails or the server version is incompatible.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
return get_note_action(context=self._ctx, name=name, object_type=object_type)
|
|
45
|
+
|
|
46
|
+
def post_to_note(
|
|
47
|
+
self,
|
|
48
|
+
name: str,
|
|
49
|
+
object_type: ObjectType,
|
|
50
|
+
content: str,
|
|
51
|
+
severity: Literal["INFO", "LOW", "NORMAL", "HIGH", "CRITICAL"] = "NORMAL",
|
|
52
|
+
audit_log: Optional[AuditLog] = None
|
|
53
|
+
) -> Dict[str, Any]:
|
|
54
|
+
"""
|
|
55
|
+
Adds a post to a note and returns the updated note.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
name (str):
|
|
59
|
+
Object name of the configuration item.
|
|
60
|
+
|
|
61
|
+
object_type (ObjectType):
|
|
62
|
+
Object type of the configuration item.
|
|
63
|
+
|
|
64
|
+
content (str):
|
|
65
|
+
Content of a post in markdown format.
|
|
66
|
+
|
|
67
|
+
severity (Literal["INFO", "LOW", "NORMAL", "HIGH", "CRITICAL"]):
|
|
68
|
+
Severity of a post.
|
|
69
|
+
|
|
70
|
+
audit_log (Optional[AuditLog]):
|
|
71
|
+
Creates an audit log entry for this operation.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Dict[str, Any]:
|
|
75
|
+
A list of posts.
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
ValueError:
|
|
79
|
+
If required arguments are missing or invalid.
|
|
80
|
+
|
|
81
|
+
RuntimeError:
|
|
82
|
+
If the operation fails or the server version is incompatible.
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
return post_to_note_action(
|
|
86
|
+
context=self._ctx,
|
|
87
|
+
name=name,
|
|
88
|
+
object_type=object_type,
|
|
89
|
+
content=content,
|
|
90
|
+
severity=severity,
|
|
91
|
+
audit_log=audit_log
|
|
92
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from functools import cached_property
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from .manage import Manage
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Note:
|
|
8
|
+
def __init__(self, context: Context):
|
|
9
|
+
self._ctx = context
|
|
10
|
+
|
|
11
|
+
@cached_property
|
|
12
|
+
def manage(self) -> Manage:
|
|
13
|
+
return Manage(context=self._ctx)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict, List
|
|
1
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
2
2
|
|
|
3
3
|
from ...context import Context
|
|
4
4
|
from ....model.public.client.filter.order_history_filter import OrderHistoryFilter
|
|
@@ -7,6 +7,8 @@ from ....model.public.client.input.add_order import Order
|
|
|
7
7
|
|
|
8
8
|
from ...action.order.get_order_history_action import get_order_history_action
|
|
9
9
|
from ...action.order.get_orders_action import get_orders_action
|
|
10
|
+
from ...action.order.get_orders_overview_action import get_orders_overview_action
|
|
11
|
+
from ...action.order.get_order_log_action import get_order_log_action
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class Manage:
|
|
@@ -76,4 +78,87 @@ class Manage:
|
|
|
76
78
|
filter=filter
|
|
77
79
|
)
|
|
78
80
|
|
|
79
|
-
|
|
81
|
+
def get_orders_overview(
|
|
82
|
+
self,
|
|
83
|
+
controller_id: Optional[str] = None,
|
|
84
|
+
date_from: Optional[str] = None,
|
|
85
|
+
date_to: Optional[str] = None
|
|
86
|
+
) -> Tuple[int, int]:
|
|
87
|
+
"""
|
|
88
|
+
Summary with number of successful and failed orders.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
controller_id (Optional[str]):
|
|
92
|
+
The ID of the controller from which the orders should be retrieved.
|
|
93
|
+
|
|
94
|
+
date_from (Optional[str]):
|
|
95
|
+
The value has multiple formats
|
|
96
|
+
Filters items starting from a date.
|
|
97
|
+
an ISO 8601 date format with the time offset and milliseconds being optional, e.g.
|
|
98
|
+
- YYYY-MM-DDThh:mm:ss[.s][Z (Z means +00)]
|
|
99
|
+
- YYYY-MM-DDThh:mm:ss[.s][+01:00]
|
|
100
|
+
- YYYY-MM-DDThh:mm:ss[.s][+0100]
|
|
101
|
+
- YYYY-MM-DDThh:mm:ss[.s][+01]
|
|
102
|
+
- a format for a period relative to the current time, e.g. 6h, 12h, 1d, 1w that specifies the quantity followed by a qualifier:
|
|
103
|
+
- s (seconds)
|
|
104
|
+
- m (minutes)
|
|
105
|
+
- h (hours)
|
|
106
|
+
- d (days)
|
|
107
|
+
- w (weeks)
|
|
108
|
+
- M (months)
|
|
109
|
+
- y (years)
|
|
110
|
+
- a time offset is optional (e.g. 2d+02:00)
|
|
111
|
+
- the value 0 indicates the current time
|
|
112
|
+
|
|
113
|
+
date_to (Optional[str]):
|
|
114
|
+
The value has multiple formats similiar to the dateFrom parameter
|
|
115
|
+
- Filters items ending before a date.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Tuple[int, int]:
|
|
119
|
+
Position 1: Successfull Orders, Position 2: Failed orders
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
RuntimeError:
|
|
123
|
+
If the operation fails or the server version is incompatible.
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
return get_orders_overview_action(
|
|
127
|
+
context=self._ctx,
|
|
128
|
+
controller_id=controller_id,
|
|
129
|
+
date_from=date_from,
|
|
130
|
+
date_to=date_to
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def get_order_log(
|
|
134
|
+
self,
|
|
135
|
+
controller_id: str,
|
|
136
|
+
history_id: int
|
|
137
|
+
) -> Dict[str, Any]:
|
|
138
|
+
"""
|
|
139
|
+
Returns the log of an executed order.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
controller_id (str):
|
|
143
|
+
The ID of the controller from which the order log should be retrieved.
|
|
144
|
+
|
|
145
|
+
history_id (int):
|
|
146
|
+
The history id of an order.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Dict[str, Any]:
|
|
150
|
+
Array of logEvents.
|
|
151
|
+
|
|
152
|
+
Raises:
|
|
153
|
+
ValueError:
|
|
154
|
+
If required arguments are missing or invalid.
|
|
155
|
+
|
|
156
|
+
RuntimeError:
|
|
157
|
+
If the operation fails or the server version is incompatible.
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
return get_order_log_action(
|
|
161
|
+
context=self._ctx,
|
|
162
|
+
controller_id=controller_id,
|
|
163
|
+
history_id=history_id
|
|
164
|
+
)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import Dict, Optional
|
|
1
|
+
from typing import Dict, List, Optional
|
|
2
2
|
|
|
3
3
|
from ....client.context import Context
|
|
4
|
-
|
|
5
4
|
from ....model.public.client.common.audit_log import AuditLog
|
|
6
5
|
|
|
6
|
+
from ...action.workflow.search_workflows_action import search_workflows_action
|
|
7
7
|
from ...action.workflow.get_workflow_versions_action import get_workflow_versions_action
|
|
8
8
|
from ...action.workflow.set_workflow_version_as_current_action import set_workflow_version_as_current_action
|
|
9
9
|
|
|
@@ -99,4 +99,33 @@ class Manage:
|
|
|
99
99
|
audit_log=audit_log
|
|
100
100
|
)
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
def search_workflows(self, controller_id: str, search: str) -> List[str]:
|
|
103
|
+
"""
|
|
104
|
+
Searches deployed workflows.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
controller_id (str):
|
|
108
|
+
The ID of the controller on which the operation should be executed.
|
|
109
|
+
|
|
110
|
+
search (str):
|
|
111
|
+
Limits result to a specified glob pattern that supports `*` and `?` as wildcards
|
|
112
|
+
where `*` match zero or more characters and `?` match any single character.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
List[str]:
|
|
116
|
+
Returns a list of workflow paths.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
ValueError:
|
|
120
|
+
If required arguments such as `controller_id` or `search` are missing or invalid.
|
|
121
|
+
|
|
122
|
+
RuntimeError:
|
|
123
|
+
If the server version is not compatible or if an
|
|
124
|
+
unexpected response is returned.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
return search_workflows_action(
|
|
128
|
+
context=self._ctx,
|
|
129
|
+
controller_id=controller_id,
|
|
130
|
+
search=search
|
|
131
|
+
)
|
|
@@ -2217,7 +2217,7 @@ class DeploySubagentClusters(BaseModel):
|
|
|
2217
2217
|
controller_id: Optional[str] = None
|
|
2218
2218
|
subagent_cluster_ids: Optional[List[str]] = None
|
|
2219
2219
|
|
|
2220
|
-
|
|
2220
|
+
|
|
2221
2221
|
class OrdersFilterV(BaseModel):
|
|
2222
2222
|
compact: Optional[bool] = None
|
|
2223
2223
|
"""controls if the object's data is compact or detailed"""
|
|
@@ -3657,4 +3657,297 @@ class DeleteNotices(ModifyNotice):
|
|
|
3657
3657
|
|
|
3658
3658
|
notice_board_path: Optional[str] = None
|
|
3659
3659
|
notice_ids: Optional[List[str]] = None
|
|
3660
|
-
notices: Optional[List[Notice]] = None
|
|
3660
|
+
notices: Optional[List[Notice]] = None
|
|
3661
|
+
|
|
3662
|
+
|
|
3663
|
+
class Advanced(BaseModel):
|
|
3664
|
+
"""com.sos.joc.model.inventory.search.RequestSearchAdvancedItem"""
|
|
3665
|
+
|
|
3666
|
+
agent_name: Optional[str] = None
|
|
3667
|
+
argument_name: Optional[str] = None
|
|
3668
|
+
argument_value: Optional[str] = None
|
|
3669
|
+
calendar: Optional[str] = None
|
|
3670
|
+
env_name: Optional[str] = None
|
|
3671
|
+
env_value: Optional[str] = None
|
|
3672
|
+
file_order_source: Optional[str] = None
|
|
3673
|
+
include_script: Optional[str] = None
|
|
3674
|
+
job_count_from: Optional[int] = None
|
|
3675
|
+
job_count_to: Optional[int] = None
|
|
3676
|
+
job_criticality: Optional[JobCriticality] = None
|
|
3677
|
+
job_name: Optional[str] = None
|
|
3678
|
+
job_name_exact_match: Optional[bool] = None
|
|
3679
|
+
job_resource: Optional[str] = None
|
|
3680
|
+
job_script: Optional[str] = None
|
|
3681
|
+
job_template: Optional[str] = None
|
|
3682
|
+
lock: Optional[str] = None
|
|
3683
|
+
notice_board: Optional[str] = None
|
|
3684
|
+
schedule: Optional[str] = None
|
|
3685
|
+
workflow: Optional[str] = None
|
|
3686
|
+
|
|
3687
|
+
|
|
3688
|
+
class RequestBaseSearchFilter(BaseModel):
|
|
3689
|
+
"""com.sos.joc.model.inventory.search.RequestBaseSearchFilter"""
|
|
3690
|
+
|
|
3691
|
+
advanced: Optional[Advanced] = None
|
|
3692
|
+
folders: Optional[List[str]] = None
|
|
3693
|
+
search: Optional[str] = None
|
|
3694
|
+
"""pattern with wildcards '*' and '?' where '*' match zero or more characters and '?' match
|
|
3695
|
+
any single character
|
|
3696
|
+
"""
|
|
3697
|
+
tags: Optional[List[str]] = None
|
|
3698
|
+
|
|
3699
|
+
|
|
3700
|
+
class WorkflowSearchFilter(RequestBaseSearchFilter):
|
|
3701
|
+
"""com.sos.joc.model.workflow.search.WorkflowSearchFilter"""
|
|
3702
|
+
|
|
3703
|
+
controller_id: Optional[str] = None
|
|
3704
|
+
instruction_states: Optional[List[SearchInstructionStateText]] = None
|
|
3705
|
+
states: Optional[List[SyncStateText]] = None
|
|
3706
|
+
|
|
3707
|
+
|
|
3708
|
+
class ResponseBaseSearchItem(BaseModel):
|
|
3709
|
+
"""com.sos.joc.model.inventory.search.ResponseBaseSearchItem"""
|
|
3710
|
+
|
|
3711
|
+
group: Optional[str] = None
|
|
3712
|
+
name: Optional[str] = None
|
|
3713
|
+
object_type: Optional[CommonConfigurationType] = None
|
|
3714
|
+
ordering: Optional[int] = None
|
|
3715
|
+
path: Optional[str] = None
|
|
3716
|
+
"""absolute path of an object."""
|
|
3717
|
+
|
|
3718
|
+
|
|
3719
|
+
class ResponseSearchItem(ResponseBaseSearchItem):
|
|
3720
|
+
"""com.sos.joc.model.inventory.search.ResponseSearchItem"""
|
|
3721
|
+
|
|
3722
|
+
controller_id: Optional[str] = None
|
|
3723
|
+
deleted: Optional[bool] = None
|
|
3724
|
+
deployed: Optional[bool] = None
|
|
3725
|
+
has_deployments: Optional[bool] = None
|
|
3726
|
+
has_releases: Optional[bool] = None
|
|
3727
|
+
id: Optional[float] = None
|
|
3728
|
+
permitted: Optional[bool] = None
|
|
3729
|
+
released: Optional[bool] = None
|
|
3730
|
+
title: Optional[str] = None
|
|
3731
|
+
valid: Optional[bool] = None
|
|
3732
|
+
|
|
3733
|
+
|
|
3734
|
+
class ResponseSearch(BaseModel):
|
|
3735
|
+
"""com.sos.joc.model.inventory.search.ResponseSearch"""
|
|
3736
|
+
|
|
3737
|
+
delivery_date: Optional[datetime] = None
|
|
3738
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3739
|
+
|
|
3740
|
+
results: Optional[List[ResponseSearchItem]] = None
|
|
3741
|
+
|
|
3742
|
+
|
|
3743
|
+
class OrdersHistoricSummary(BaseModel):
|
|
3744
|
+
"""com.sos.joc.model.order.OrdersHistoricSummary"""
|
|
3745
|
+
|
|
3746
|
+
failed: Optional[int] = None
|
|
3747
|
+
successful: Optional[int] = None
|
|
3748
|
+
|
|
3749
|
+
|
|
3750
|
+
class OrdersOverView(BaseModel):
|
|
3751
|
+
"""com.sos.joc.model.order.OrdersOverView"""
|
|
3752
|
+
|
|
3753
|
+
delivery_date: Optional[datetime] = None
|
|
3754
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3755
|
+
|
|
3756
|
+
orders: Optional[OrdersHistoricSummary] = None
|
|
3757
|
+
survey_date: Optional[datetime] = None
|
|
3758
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3759
|
+
|
|
3760
|
+
|
|
3761
|
+
class NoteIdentifier(BaseModel):
|
|
3762
|
+
"""com.sos.joc.model.note.common.NoteIdentifier"""
|
|
3763
|
+
|
|
3764
|
+
name: Optional[str] = None
|
|
3765
|
+
object_type: Optional[CommonConfigurationType] = None
|
|
3766
|
+
|
|
3767
|
+
|
|
3768
|
+
class CreatedBy(BaseModel):
|
|
3769
|
+
user_name: Optional[str] = None
|
|
3770
|
+
|
|
3771
|
+
|
|
3772
|
+
class DisplayPreferences(BaseModel):
|
|
3773
|
+
"""com.sos.joc.model.note.common.DisplayPreferences"""
|
|
3774
|
+
|
|
3775
|
+
height: Optional[int] = None
|
|
3776
|
+
width: Optional[int] = None
|
|
3777
|
+
|
|
3778
|
+
|
|
3779
|
+
class ModifiedBy(BaseModel):
|
|
3780
|
+
user_name: Optional[str] = None
|
|
3781
|
+
|
|
3782
|
+
|
|
3783
|
+
class Metadata(BaseModel):
|
|
3784
|
+
"""com.sos.joc.model.note.common.Metadata"""
|
|
3785
|
+
|
|
3786
|
+
created: Optional[datetime] = None
|
|
3787
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3788
|
+
|
|
3789
|
+
created_by: Optional[CreatedBy] = None
|
|
3790
|
+
display_preferences: Optional[DisplayPreferences] = None
|
|
3791
|
+
modified: Optional[datetime] = None
|
|
3792
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3793
|
+
|
|
3794
|
+
modified_by: Optional[ModifiedBy] = None
|
|
3795
|
+
participant_count: Optional[int] = None
|
|
3796
|
+
post_count: Optional[int] = None
|
|
3797
|
+
severity: Optional[Severity] = None
|
|
3798
|
+
|
|
3799
|
+
|
|
3800
|
+
class Participant(BaseModel):
|
|
3801
|
+
modified: Optional[datetime] = None
|
|
3802
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3803
|
+
|
|
3804
|
+
post_count: Optional[int] = None
|
|
3805
|
+
|
|
3806
|
+
|
|
3807
|
+
class Author(BaseModel):
|
|
3808
|
+
user_name: Optional[str] = None
|
|
3809
|
+
|
|
3810
|
+
|
|
3811
|
+
class Post(BaseModel):
|
|
3812
|
+
"""com.sos.joc.model.note.common.Post"""
|
|
3813
|
+
|
|
3814
|
+
author: Optional[Author] = None
|
|
3815
|
+
content: Optional[str] = None
|
|
3816
|
+
posted: Optional[datetime] = None
|
|
3817
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3818
|
+
|
|
3819
|
+
post_id: Optional[int] = None
|
|
3820
|
+
severity: Optional[Severity] = None
|
|
3821
|
+
|
|
3822
|
+
|
|
3823
|
+
class Note(NoteIdentifier):
|
|
3824
|
+
"""com.sos.joc.model.note.common.Note"""
|
|
3825
|
+
|
|
3826
|
+
metadata: Optional[Metadata] = None
|
|
3827
|
+
note_id: Optional[float] = None
|
|
3828
|
+
participants: Optional[List[Participant]] = None
|
|
3829
|
+
path: Optional[str] = None
|
|
3830
|
+
"""absolute path of an object."""
|
|
3831
|
+
|
|
3832
|
+
posts: Optional[List[Post]] = None
|
|
3833
|
+
|
|
3834
|
+
|
|
3835
|
+
class NoteResponse(Note):
|
|
3836
|
+
"""com.sos.joc.model.note.NoteResponse"""
|
|
3837
|
+
|
|
3838
|
+
delivery_date: Optional[datetime] = None
|
|
3839
|
+
"""Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty"""
|
|
3840
|
+
|
|
3841
|
+
|
|
3842
|
+
class ModifyRequest(NoteIdentifier):
|
|
3843
|
+
"""com.sos.joc.model.note.common.ModifyRequest"""
|
|
3844
|
+
|
|
3845
|
+
audit_log: Optional[AuditParams] = None
|
|
3846
|
+
|
|
3847
|
+
|
|
3848
|
+
class AddPost(ModifyRequest):
|
|
3849
|
+
"""com.sos.joc.model.note.AddPost"""
|
|
3850
|
+
|
|
3851
|
+
content: Optional[str] = None
|
|
3852
|
+
severity: Optional[Severity] = None
|
|
3853
|
+
|
|
3854
|
+
|
|
3855
|
+
class OrderHistoryFilter(BaseModel):
|
|
3856
|
+
"""com.sos.joc.model.order.OrderHistoryFilter"""
|
|
3857
|
+
|
|
3858
|
+
controller_id: Optional[str] = None
|
|
3859
|
+
history_id: Optional[int] = None
|
|
3860
|
+
order_id: Optional[str] = None
|
|
3861
|
+
|
|
3862
|
+
|
|
3863
|
+
class EventType(str, Enum):
|
|
3864
|
+
"""com.sos.controller.model.event.EventType"""
|
|
3865
|
+
|
|
3866
|
+
VERSION_ADDED = "VersionAdded"
|
|
3867
|
+
FILE_BASED_CHANGED = "FileBasedChanged"
|
|
3868
|
+
CONTROLLER_READY = "ControllerReady"
|
|
3869
|
+
AGENT_READY = "AgentReady"
|
|
3870
|
+
ORDER_ADDED = "OrderAdded"
|
|
3871
|
+
ORDER_ATTACHABLE = "OrderAttachable"
|
|
3872
|
+
ORDER_STARTED = "OrderStarted"
|
|
3873
|
+
ORDER_TRANSFERRED_TO_AGENT = "OrderTransferredToAgent"
|
|
3874
|
+
ORDER_PROCESSING_STARTED = "OrderProcessingStarted"
|
|
3875
|
+
ORDER_STDOUT_WRITTEN = "OrderStdoutWritten"
|
|
3876
|
+
ORDER_STDERR_WRITTEN = "OrderStderrWritten"
|
|
3877
|
+
ORDER_PROCESSED = "OrderProcessed"
|
|
3878
|
+
ORDER_RESUMED = "OrderResumed"
|
|
3879
|
+
ORDER_RESUME_MARKED = "OrderResumeMarked"
|
|
3880
|
+
ORDER_FORKED = "OrderForked"
|
|
3881
|
+
ORDER_JOINED = "OrderJoined"
|
|
3882
|
+
ORDER_OFFERED = "OrderOffered"
|
|
3883
|
+
ORDER_RETRYING = "OrderRetrying"
|
|
3884
|
+
ORDER_AWAITING = "OrderAwaiting"
|
|
3885
|
+
ORDER_MOVED = "OrderMoved"
|
|
3886
|
+
ORDER_DETACHABLE = "OrderDetachable"
|
|
3887
|
+
ORDER_DETACHED = "OrderDetached"
|
|
3888
|
+
ORDER_FAILED = "OrderFailed"
|
|
3889
|
+
ORDER_CATCHED = "OrderCatched"
|
|
3890
|
+
ORDER_AWOKE = "OrderAwoke"
|
|
3891
|
+
ORDER_FAILED_IN_FORK = "OrderFailedinFork"
|
|
3892
|
+
ORDER_SUSPENDED = "OrderSuspended"
|
|
3893
|
+
ORDER_SUSPEND_MARKED = "OrderSuspendMarked"
|
|
3894
|
+
ORDER_BROKEN = "OrderBroken"
|
|
3895
|
+
ORDER_CANCELLED = "OrderCancelled"
|
|
3896
|
+
ORDER_FINISHED = "OrderFinished"
|
|
3897
|
+
ORDER_LOCK_ACQUIRED = "OrderLockAcquired"
|
|
3898
|
+
ORDER_LOCK_QUEUED = "OrderLockQueued"
|
|
3899
|
+
ORDER_LOCK_RELEASED = "OrderLockReleased"
|
|
3900
|
+
|
|
3901
|
+
|
|
3902
|
+
class OrderLogEntryError(BaseModel):
|
|
3903
|
+
"""com.sos.joc.model.history.order.OrderLogEntryError"""
|
|
3904
|
+
|
|
3905
|
+
error_state: Optional[str] = None
|
|
3906
|
+
error_reason: Optional[str] = None
|
|
3907
|
+
error_code: Optional[str] = None
|
|
3908
|
+
error_text: Optional[str] = None
|
|
3909
|
+
|
|
3910
|
+
|
|
3911
|
+
class LockState(BaseModel):
|
|
3912
|
+
"""com.sos.joc.model.history.order.LockState"""
|
|
3913
|
+
|
|
3914
|
+
order_ids: Optional[str] = None
|
|
3915
|
+
queued_order_ids: Optional[str] = None
|
|
3916
|
+
|
|
3917
|
+
|
|
3918
|
+
class Lock(BaseModel):
|
|
3919
|
+
"""com.sos.joc.model.history.order.Lock"""
|
|
3920
|
+
|
|
3921
|
+
lock_name: Optional[str] = None
|
|
3922
|
+
limit: Optional[int] = None
|
|
3923
|
+
count: Optional[int] = None
|
|
3924
|
+
lock_state: Optional[LockState] = None
|
|
3925
|
+
|
|
3926
|
+
|
|
3927
|
+
class OrderLogEntry(BaseModel):
|
|
3928
|
+
"""com.sos.joc.model.history.order.OrderLogEntry"""
|
|
3929
|
+
|
|
3930
|
+
controller_datetime: Optional[str] = None
|
|
3931
|
+
agent_datetime: Optional[str] = None
|
|
3932
|
+
order_id: Optional[str] = None
|
|
3933
|
+
log_level: Optional[str] = None
|
|
3934
|
+
log_event: Optional[EventType] = None
|
|
3935
|
+
position: Optional[str] = None
|
|
3936
|
+
agent_id: Optional[str] = None
|
|
3937
|
+
agent_name: Optional[str] = None
|
|
3938
|
+
agent_url: Optional[str] = None
|
|
3939
|
+
subagent_cluster_id: Optional[str] = None
|
|
3940
|
+
job: Optional[str] = None
|
|
3941
|
+
task_id: Optional[float] = None
|
|
3942
|
+
return_code: Optional[float] = None
|
|
3943
|
+
error: Optional[OrderLogEntryError] = None
|
|
3944
|
+
lock: Optional[Lock] = None
|
|
3945
|
+
|
|
3946
|
+
|
|
3947
|
+
class OrderLog(BaseModel):
|
|
3948
|
+
"""com.sos.joc.model.order.OrderLog"""
|
|
3949
|
+
|
|
3950
|
+
complete: Optional[bool] = None
|
|
3951
|
+
event_id: Optional[float] = None
|
|
3952
|
+
history_id: Optional[float] = None
|
|
3953
|
+
log_events: Optional[List[OrderLogEntry]] = None
|
js7/util/version_to_tuple.py
CHANGED
|
@@ -3,10 +3,10 @@ from typing import Tuple
|
|
|
3
3
|
|
|
4
4
|
def version_to_tuple(input: str) -> Tuple[int, int, int]:
|
|
5
5
|
try:
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
version = input.split("-", 1)[0]
|
|
7
|
+
version = ".".join(version.split(".")[:3])
|
|
8
8
|
|
|
9
|
-
ep_major, ep_minor, ep_patch =
|
|
9
|
+
ep_major, ep_minor, ep_patch = version.split(".")
|
|
10
10
|
return int(ep_major), int(ep_minor), int(ep_patch)
|
|
11
11
|
except Exception as e:
|
|
12
12
|
raise ValueError(f"Invalid version string '{input}'. Error: {e}")
|
|
@@ -123,6 +123,9 @@ js7/api/joc/http/v_2_6_5/joc/cluster/restart.py,sha256=tH9ZtM-9Hwb6HSk29g2pVcChF
|
|
|
123
123
|
js7/api/joc/http/v_2_6_5/joc/cluster/run.py,sha256=Ey0uqnERoxZkEhNeKix35OxkNA3Fi3ubZDKAIKONcGA,880
|
|
124
124
|
js7/api/joc/http/v_2_6_5/joc/cluster/switch_member.py,sha256=azx0tcsWo1P2OIBwh1TgSRlTVKMFAWKH7Q6XQNHLZcs,904
|
|
125
125
|
js7/api/joc/http/v_2_6_5/joc/proxies/restart.py,sha256=7caLRS08KAMasIYdFueKAKV2mzZtQVkguCOoA4d0l38,843
|
|
126
|
+
js7/api/joc/http/v_2_6_5/note/note.py,sha256=6u0Wo4DNVoBAK7xue8dOv_qXdEc8OU3jacbP44xX0AA,851
|
|
127
|
+
js7/api/joc/http/v_2_6_5/note/post/add.py,sha256=H7yTVHIQM5chP0LH5Fcym4inzJSGajUTCd2XiossxP8,847
|
|
128
|
+
js7/api/joc/http/v_2_6_5/order/log.py,sha256=64yEuKdlIRLVU_KkAhUGiioNjmpaesO9rthKAtwp6fU,839
|
|
126
129
|
js7/api/joc/http/v_2_6_5/orders/add.py,sha256=2a-kMylkPhPpw3QnP6wRs6L25zY3ZDSR7y6WL2fYy9g,834
|
|
127
130
|
js7/api/joc/http/v_2_6_5/orders/cancel.py,sha256=P9wfBiLibv1GbqZbsZdtw5P_pe7Y2fO_ju1ylNyenz0,832
|
|
128
131
|
js7/api/joc/http/v_2_6_5/orders/confirm.py,sha256=vDv17-8dX3jIeDdr3dRZeyZoflAs-UFxOVIttgDFAWE,836
|
|
@@ -132,19 +135,21 @@ js7/api/joc/http/v_2_6_5/orders/orders.py,sha256=0q5tEyuHOqNkK3X3gbf4ljPw-eEpC8t
|
|
|
132
135
|
js7/api/joc/http/v_2_6_5/orders/remove_when_terminated.py,sha256=QZiBKZT7f6iUm4uo--NDrkPYtCDyYLUOXV8QQUo-ooc,872
|
|
133
136
|
js7/api/joc/http/v_2_6_5/orders/resume.py,sha256=ur-UzOp02KV5I9bswpLlq1pJg7zyTQRX9hvYlyA_or0,830
|
|
134
137
|
js7/api/joc/http/v_2_6_5/orders/suspend.py,sha256=ZqPKZ-BIXhpGsH3_LcucjKroTwVJdBrsHGV67VII72E,838
|
|
138
|
+
js7/api/joc/http/v_2_6_5/orders/overview/summary.py,sha256=-8RvrB7EMhkz0ik32fXsrm4aL5Jc5ICi4QqiyMXew_E,877
|
|
135
139
|
js7/api/joc/http/v_2_6_5/settings/settings.py,sha256=nINVNzDomFEs28iyyIR6dgs6S0fbFMDVHTz-yafOy2M,745
|
|
136
140
|
js7/api/joc/http/v_2_6_5/settings/store.py,sha256=OjZ--sutdkgmLkkgRt3wTtSX5YzRrWr3b5k9hvr4LXI,839
|
|
137
141
|
js7/api/joc/http/v_2_6_5/tasks/history.py,sha256=Z5-VmzDJlusltGs-AqvSMrPfrUps94GBUaXTy7YlL94,854
|
|
138
142
|
js7/api/joc/http/v_2_6_5/workflow/transition.py,sha256=-AL_8tLXkmCqldFeVmVriIMn1H0oQPzVhn9xat-yLEY,845
|
|
139
143
|
js7/api/joc/http/v_2_6_5/workflow/workflow.py,sha256=lWOlKBRHL6PycROWa1Bm2UheBrV0MqGsjzK1qUau1n8,850
|
|
140
144
|
js7/api/joc/http/v_2_6_5/workflows/resume.py,sha256=FcwSYCOyLyj4jAdv9wvQ-8ddRn4wR_Gr5CSdpjGCtJc,838
|
|
145
|
+
js7/api/joc/http/v_2_6_5/workflows/search.py,sha256=4DjC9RBIvc4o3tlIFW_CdxdhGnlTFmjjjxdibTHOsqg,880
|
|
141
146
|
js7/api/joc/http/v_2_6_5/workflows/skip.py,sha256=L2AzRfD1lFbPzjavgOFrjyA9R9ptbeLKzP4a8PTctM0,844
|
|
142
147
|
js7/api/joc/http/v_2_6_5/workflows/stop.py,sha256=1KZZTe9wZEsyB0pQkm6RXAthY-_opfb8RA7aiR8tRhI,850
|
|
143
148
|
js7/api/joc/http/v_2_6_5/workflows/suspend.py,sha256=tJza-y10p-QWOqXNtGYekhrHGrNMbOI2xu2llVsFccQ,840
|
|
144
149
|
js7/api/joc/http/v_2_6_5/workflows/unskip.py,sha256=hGPAPAMjekg31zUGST5tX6WTetICsq_DgtzSlORFNZI,848
|
|
145
150
|
js7/api/joc/http/v_2_6_5/workflows/unstop.py,sha256=4z5GQjKLg69JZerTkYQSv7dOQ1GHs8K0oo1ouIWBb7M,854
|
|
146
151
|
js7/api/joc/http/v_2_6_5/workflows/workflows.py,sha256=zxCZgU2JQ8ywgSvcQWyEfrAVRlrpZdfmuibmZNs6KtU,856
|
|
147
|
-
js7/client/client.py,sha256=
|
|
152
|
+
js7/client/client.py,sha256=jkZKoGXHDqxzmlPzeJIXWGusQYSrsjHyRMRiywlmZrs,8777
|
|
148
153
|
js7/client/context.py,sha256=aGdVHPDAiAm9Tbic2M1qOEJAs6t240yVO_lVlgIn1yE,1363
|
|
149
154
|
js7/client/action/agent/confirm_node_loss_agent_action.py,sha256=GVdT0VD0k7ti5wC_QNXiYCv6YzYMZe5686IPbewNZeY,1894
|
|
150
155
|
js7/client/action/agent/delete_subagent_action.py,sha256=O3mEjMaj-iZDK24GYfRRxQQ7xXz4FC1qoHMiVLtW_Kk,1943
|
|
@@ -266,18 +271,23 @@ js7/client/action/joc/restart_service_action.py,sha256=DelYWUzHf4jHkwB1rJ40T_Ry-
|
|
|
266
271
|
js7/client/action/joc/run_service_action.py,sha256=3MCTHCXn8aTzN8z3VY_z2N9oE5GBB-9V3C-7fMo4kew,2292
|
|
267
272
|
js7/client/action/joc/store_settings_action.py,sha256=Y9AVxbPTJoG2hYwVunKbCp3idPTt356Z8NmxdFzZVHI,1662
|
|
268
273
|
js7/client/action/joc/switch_over_action.py,sha256=UEw4b0i4TiM1zvyEHE-3FrKvD6lFyFc3mOTpTEhaEKw,2523
|
|
274
|
+
js7/client/action/note/get_note_action.py,sha256=xmsuDCN5GRj7QpD56UcIo0xDBdf7JIDP5MGLq0uJ1n0,1484
|
|
275
|
+
js7/client/action/note/post_to_note_action.py,sha256=mMQT6TsbjzRsQUVo2ZBdMqtcXWY2Tyi79q0RKyPFyXc,2590
|
|
269
276
|
js7/client/action/order/add_orders_action.py,sha256=HbSSy7hKqANT2QvAnJBbTYsKgNdaOGQM55uW0xPjavk,3381
|
|
270
277
|
js7/client/action/order/cancel_orders_action.py,sha256=-bXqqabOm2Pqd3c4uaNKYDA-227NcK81BSMeuBGHlIY,2658
|
|
271
278
|
js7/client/action/order/confirm_orders_action.py,sha256=5fVDjSYvKsxvMKrYU554SdwQnp46DF1ZkpNyJiodC2U,2386
|
|
272
279
|
js7/client/action/order/continue_orders_action.py,sha256=8OWESo1QGqa1xvlfLYNiFXQLgxwat4WuqOp2kFlCOVk,2378
|
|
273
280
|
js7/client/action/order/get_order_history_action.py,sha256=d7mY5KEPmI_04b5Jc0J_53ODJRl4TzTkqtvrsP5WeiA,2446
|
|
281
|
+
js7/client/action/order/get_order_log_action.py,sha256=A42PA1fRbVS5WMbromQzeyWz4nWCLUNQfZQBV00rL8M,1359
|
|
274
282
|
js7/client/action/order/get_orders_action.py,sha256=bMJTeVpOyfHOQtLtG3EaWsiuePdmDVuU8rI3-cifLMM,2967
|
|
283
|
+
js7/client/action/order/get_orders_overview_action.py,sha256=6664h63y-zeBrCMC5XFCcQ5CIvcnwFsq8G5MY4IIpx0,1628
|
|
275
284
|
js7/client/action/order/remove_terminated_orders_action.py,sha256=Zg8437q8X16LdMTs18aoZGVMqKLIDpVSEVHeLB4oBUE,2425
|
|
276
285
|
js7/client/action/order/resume_orders_action.py,sha256=MpCfQaHfAdRQERaLl2fnCYuqfzE7_hT8qKHhlMa9LSw,2785
|
|
277
286
|
js7/client/action/order/suspend_orders_action.py,sha256=m_gREeCkKKcimm2PispX5AUkRMgwzyTEg5DBhIE4tVs,2782
|
|
278
287
|
js7/client/action/task/get_task_history_info_action.py,sha256=1hDRGCn5QHkhmXizf2sYFAR1OOM18EYKrW39ZCy1DAo,2841
|
|
279
288
|
js7/client/action/workflow/get_workflow_versions_action.py,sha256=ig0ExrOQEBhYmPr2z6LN25STV0l9lowo2Coi1UrQxCo,3452
|
|
280
289
|
js7/client/action/workflow/resume_workflows_action.py,sha256=Kq5pQuuLDHfqzlpiX-efpyOtUcOI9cKeM55-4z7VTr4,1982
|
|
290
|
+
js7/client/action/workflow/search_workflows_action.py,sha256=bxoZ-19ZzaAk7dMc6nXhzCl1SL_flGOwUxeM5XYRo-8,1592
|
|
281
291
|
js7/client/action/workflow/set_workflow_version_as_current_action.py,sha256=dmBxfvNnE582WcEykobnVXa9fO474fCJslCLQjyKppg,2300
|
|
282
292
|
js7/client/action/workflow/skip_job_instructions_action.py,sha256=a0VCWaMuKXJno3Es6c2TqO6fMt0UYijCW5GRl4LIv6Y,2146
|
|
283
293
|
js7/client/action/workflow/stop_job_instructions_action.py,sha256=H9NZ3amiqj0y_mEJHUYwTNVPIKiSctMeYS9PraJurRY,2316
|
|
@@ -306,11 +316,13 @@ js7/client/feature/inventory/manage_repository.py,sha256=DMbrRcQ5hMNJ_-JNZ_hpe3k
|
|
|
306
316
|
js7/client/feature/joc/joc.py,sha256=kO4J5lb2GK4okmSedO4TFL_9_mx-olKswmDDipgdaNs,417
|
|
307
317
|
js7/client/feature/joc/manage.py,sha256=MsUkFkds1TltZhQJu29nSXKuWl4CpZG1nsbxr8lQrvk,4231
|
|
308
318
|
js7/client/feature/joc/operate.py,sha256=NAqcGD-0q-if3uUm59-N7C3VKc_-0Je9-ZNJ4KiNuMs,4416
|
|
309
|
-
js7/client/feature/
|
|
319
|
+
js7/client/feature/note/manage.py,sha256=ZAzLJ5XE8OEwBRKoQxHro_zoJSmYZZDwTIlwITXCf_8,2678
|
|
320
|
+
js7/client/feature/note/note.py,sha256=YI7v7NYGFPUtVlvudwOrZpilXxqKs-UelSXzMv20rWQ,288
|
|
321
|
+
js7/client/feature/order/manage.py,sha256=p9zEBa_gJ-R5jjeiqInr1YEx_0V04Y_7IC6VUzo-uBI,5464
|
|
310
322
|
js7/client/feature/order/operate.py,sha256=3xqTAVVQ-xEvFAu6BdpN74oz_itRcRmCuhmoc5gdtqY,11070
|
|
311
323
|
js7/client/feature/order/order.py,sha256=NgRKZvFI_PLm4VDXbyTmSqSWpFDn6ZU9nXaurWTM_Sc,420
|
|
312
324
|
js7/client/feature/task/task.py,sha256=5cyCcrqsjyFejLNK-u5ycOTOXccFbWo5ebI6NBwJPQQ,1450
|
|
313
|
-
js7/client/feature/workflow/manage.py,sha256=
|
|
325
|
+
js7/client/feature/workflow/manage.py,sha256=h8iu8h2HQRQ62HQlFuxTwSz6k8XYOv2QyANIILIL18Q,4499
|
|
314
326
|
js7/client/feature/workflow/operate.py,sha256=pHz-WARh8HlIn9LL2FSGQqEct_OkY6FjHTRnvqwPrYA,9279
|
|
315
327
|
js7/client/feature/workflow/workflow.py,sha256=hWp3VfPuJpnxR95pmcImSPkgWnHsTWoexrwiXgnICi4,427
|
|
316
328
|
js7/java/lib/3rd-party/bcpg-jdk15to18-1.78.1.jar,sha256=Xh5JK2j6Y_tri2Tc_q3BSz6U0tt7WvR1_RD6kk_7TjI,494219
|
|
@@ -340,7 +352,7 @@ js7/model/configuration/auth_configuration.py,sha256=PkTW-Iz_Ass6U9k2oG-ohkfp75t
|
|
|
340
352
|
js7/model/configuration/client_configuration.py,sha256=cGSsUee0Gws1ZR-3YvzpmadRyWztIM4YERD0CIqSpr0,176
|
|
341
353
|
js7/model/configuration/http_configuration.py,sha256=NJOL8vNWok-uFbEl8xcCHDLi1S35Th1RD5_oZMnHMHk,230
|
|
342
354
|
js7/model/error/http/joc_exceptions.py,sha256=VX4LTZHAlHEHFnOVJ3bNdbAouye0ns2GTmrMDGwyZsc,3605
|
|
343
|
-
js7/model/private/http/joc/joc_v_2_6_5.py,sha256=
|
|
355
|
+
js7/model/private/http/joc/joc_v_2_6_5.py,sha256=CJcCK02jlSRuBQPi3l4u-eYnXgHBd1HkZq-u3BoF5ZE,120254
|
|
344
356
|
js7/model/public/client/common/__init__.py,sha256=-DE3i42ya-kFv7vs43z0IYaL-VB2rUg1fmuB56Z-W_Q,823
|
|
345
357
|
js7/model/public/client/common/accounts.py,sha256=EuRXwRPYk05-3vlsXqxJaKmrpg-btuohTe8X-cnjDa4,574
|
|
346
358
|
js7/model/public/client/common/audit_log.py,sha256=kd5LXYGwjkRnOGzHXYIVjFN52a0-iV-UYkBzQWN3azI,201
|
|
@@ -372,7 +384,7 @@ js7/model/public/client/input/__init__.py,sha256=OCHWnjdXgRWu88YcSAdROxCZXCQMSrE
|
|
|
372
384
|
js7/model/public/client/input/add_order.py,sha256=06Xz4VlLO9KD8fvIosfs8ZemhqaZC7ukBshPidnvQb4,1865
|
|
373
385
|
js7/service/http_service.py,sha256=WLt4f68z55QZnTDzKQJXixk31C8gVYU4BlVBqMMtQT4,7238
|
|
374
386
|
js7/util/detect_archive_type.py,sha256=hbuFJ_7Rn-S1XZ9rT3fncQZ5GPDcNyIJjRE--m0a3Fo,933
|
|
375
|
-
js7/util/version_to_tuple.py,sha256
|
|
387
|
+
js7/util/version_to_tuple.py,sha256=-1gzXgbjDz21Ka47hcENefOb7oak_zIwywuC7f7sqPs,408
|
|
376
388
|
js7/util/bytes_converter/bytes_to_archive_bytes.py,sha256=wSzAyl-gdTPXP-jnvyIGawaZHmoMPOwOJnmz9OB47E4,1509
|
|
377
389
|
js7/util/bytes_converter/bytes_to_file.py,sha256=49fZ_HtbBujTZnQIk0Wv4t5hHA8V-JauMj7ncQqzIpk,287
|
|
378
390
|
js7/util/bytes_converter/files_to_bytes.py,sha256=TI9RM17E_7AMWElMPFOTfKJpVXs4Xfb4vRUtt7tMnPU,1421
|
|
@@ -380,8 +392,8 @@ js7/util/bytes_converter/read_bytes_archive_files_to_bytes.py,sha256=I_l3aNwSQEI
|
|
|
380
392
|
js7/util/bytes_converter/sign_to_bytes.py,sha256=0YviV01F5GkuA51tJegP5F015qNjtu_IVo-vBYUhI7M,3165
|
|
381
393
|
js7/util/str_converter/order_id_to_order_name.py,sha256=dt8yCGvvWrYZQwfvo0cS6xGxRoTPcMDCoRFP4nUqrWU,170
|
|
382
394
|
js7/validator/http/joc_http_status_validator.py,sha256=sSaSrN-mKHpqL2E_FHcDHaWfIjsGOUvgchAnTbZT6HE,4292
|
|
383
|
-
js7_client_python-2.0.
|
|
384
|
-
js7_client_python-2.0.
|
|
385
|
-
js7_client_python-2.0.
|
|
386
|
-
js7_client_python-2.0.
|
|
387
|
-
js7_client_python-2.0.
|
|
395
|
+
js7_client_python-2.0.13.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
396
|
+
js7_client_python-2.0.13.dist-info/METADATA,sha256=I8m-Tt3Q7J_4hZx_U2eDjNHYSzGjLuPjoUy7Fn1hal0,44068
|
|
397
|
+
js7_client_python-2.0.13.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
398
|
+
js7_client_python-2.0.13.dist-info/top_level.txt,sha256=tnksxOjnJy3n300w-75S3QPBW3CKJJ-jKZmzG2pioXU,4
|
|
399
|
+
js7_client_python-2.0.13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|