Skip to content
This repository was archived by the owner on Apr 30, 2025. It is now read-only.

Commit 026a130

Browse files
JozefielJozef Volak
and
Jozef Volak
committed
Patch swagger missing apis (#21)
Co-authored-by: Jozef Volak <[email protected]>
1 parent be55ddf commit 026a130

File tree

5 files changed

+60
-14
lines changed

5 files changed

+60
-14
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ However, here are some straightforward examples of usage with Poetry.
3939

4040
```bash
4141
# inventory package, example with branch usage
42-
poetry add git+ssh://[email protected]/FRINXio/frinx-services-python-api.git.git@main#subdirectory=inventory/python
42+
poetry add git+ssh://[email protected]/FRINXio/frinx-services-python-api.git@main#subdirectory=inventory/python
4343

4444
# inventory package, example with tag usage
45-
poetry add git+ssh://[email protected]/FRINXio/frinx-services-python-api.git.git@v2.0.0#subdirectory=inventory/python
45+
poetry add git+ssh://[email protected]/FRINXio/[email protected]#subdirectory=inventory/python
4646
```
4747

4848
## Usage

uniconfig/python/frinx_api/uniconfig/rest_api.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from pydantic import BaseModel
3+
from typing import Any
44

55
from . import OperationsAddKeystoreEntryPostRequest
66
from . import OperationsAddPrivateKeyPostRequest
@@ -126,40 +126,40 @@
126126
class UniconfigRest:
127127
uri: str
128128
method: str
129-
request: BaseModel | None
130-
response: BaseModel | None
129+
request: Any | None
130+
response: Any | None
131131

132132

133133
class ConfigCoverage(UniconfigRest):
134-
uri = '/operations/network-topology/topology={topology-id}/node={node-id}/yang-ext:mount/config-coverage'
134+
uri = '/operations/network-topology/topology={topology_id}/node={node_id}/yang-ext:mount/config-coverage'
135135
method = 'POST'
136136
request = None
137137
response = None
138138

139139

140140
class Execute(UniconfigRest):
141-
uri = '/operations/network-topology/topology={topology-id}/node={node-id}/yang-ext:mount/execute'
141+
uri = '/operations/network-topology/topology={topology_id}/node={node_id}/yang-ext:mount/execute'
142142
method = 'POST'
143143
request = None
144144
response = None
145145

146146

147147
class ExecuteAndExpect(UniconfigRest):
148-
uri = '/operations/network-topology/topology={topology-id}/node={node-id}/yang-ext:mount/execute-and-expect'
148+
uri = '/operations/network-topology/topology={topology_id}/node={node_id}/yang-ext:mount/execute-and-expect'
149149
method = 'POST'
150150
request = None
151151
response = None
152152

153153

154154
class ExecuteAndRead(UniconfigRest):
155-
uri = '/operations/network-topology/topology={topology-id}/node={node-id}/yang-ext:mount/execute-and-read'
155+
uri = '/operations/network-topology/topology={topology_id}/node={node_id}/yang-ext:mount/execute-and-read'
156156
method = 'POST'
157157
request = None
158158
response = None
159159

160160

161161
class ExecuteAndReadUntil(UniconfigRest):
162-
uri = '/operations/network-topology/topology={topology-id}/node={node-id}/yang-ext:mount/execute-and-read-until'
162+
uri = '/operations/network-topology/topology={topology_id}/node={node_id}/yang-ext:mount/execute-and-read-until'
163163
method = 'POST'
164164
request = None
165165
response = None
@@ -621,7 +621,7 @@ class TransactionMetadata(UniconfigRest):
621621

622622

623623
class TransactionMetadataTransactionId(UniconfigRest):
624-
uri = '/data/transactions-metadata/transaction-metadata={transaction-id}'
624+
uri = '/data/transactions-metadata/transaction-metadata={transaction_id}'
625625
method = 'GET'
626626
request = None
627627
response = None
@@ -730,3 +730,18 @@ class QueryConfig(UniconfigRest):
730730
method = 'POST'
731731
request = OperationsQueryConfigPostRequest
732732
response = OperationsQueryConfigPostResponse
733+
734+
735+
class ReadStructuredData(UniconfigRest):
736+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
737+
method = 'GET'
738+
739+
740+
class WriteStructuredData(UniconfigRest):
741+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
742+
method = 'PUT'
743+
744+
745+
class DeleteStructuredData(UniconfigRest):
746+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
747+
method = 'DELETE'

uniconfig/python/generate.sh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/usr/bin/env bash
22

3+
REST_API_PATH='frinx_api/uniconfig/rest_api.py'
4+
35
# remove obsolete files, because are not cleaned during generations
46
API_PATH='frinx_api/uniconfig/'
57

@@ -27,9 +29,12 @@ poetry run datamodel-codegen \
2729
--custom-file-header "# generated by datamodel-codegen"
2830

2931
# generate rest_api file to map URL, Method and models from datamodel-codegen
30-
poetry run python3 ./generate_rest_api.py --input /swagger/uniconfig.yaml --output frinx_api/uniconfig/rest_api.py
32+
poetry run python3 ./generate_rest_api.py --input /swagger/uniconfig.yaml --output ${REST_API_PATH}
33+
34+
# apply patches
35+
cat ./patches/rest_api.txt >> ${REST_API_PATH}
3136

3237
## use default formatting
3338
poetry run ruff --fix . || true
3439

35-
chown -R "${uid}:${gid}" frinx_api/uniconfig/*
40+
chown -R "${uid}:${gid}" frinx_api/uniconfig/*

uniconfig/python/generate_rest_api.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ def _up_format(s: str, delimiters: list[str]) -> str:
6363
s = s.replace(x, SPACE)
6464
return NAN.join([x.capitalize() for x in s.split(SPACE)])
6565

66+
def _variable_query_to_snake_case(url: str) -> str:
67+
pattern = r'{([^{}]+)}'
68+
matches = re.findall(pattern, url)
69+
modified_string = url
70+
for match in matches:
71+
modified_match = match.replace('-', '_')
72+
modified_string = modified_string.replace(f'{{{match}}}', f'{{{modified_match}}}')
73+
return modified_string
74+
6675
def _get_cls(_endpoint: str, _method: str, *, request: bool = False, response: bool = False) -> str:
6776
base = _up_format(endpoint, ['/', '-']).split('=')[0] + method.capitalize()
6877
return str(base + {request: 'Request', response: 'Response'}.get(True))
@@ -91,7 +100,9 @@ def _get_service_name(_endpoint: str) -> str:
91100
else:
92101
template_input['Cls'] = _get_service_name(endpoint)
93102

94-
template_input['uri'] = endpoint
103+
modified_endpoint = _variable_query_to_snake_case(endpoint)
104+
105+
template_input['uri'] = modified_endpoint
95106
template_input['method'] = method.upper()
96107

97108
req_ref = _get_cls(endpoint, method, request=True)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
3+
class ReadStructuredData(UniconfigRest):
4+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
5+
method = 'GET'
6+
7+
8+
class WriteStructuredData(UniconfigRest):
9+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
10+
method = 'PUT'
11+
12+
13+
class DeleteStructuredData(UniconfigRest):
14+
uri = '/data/network-topology:network-topology/topology={topology_id}/node={node_id}/frinx-uniconfig-topology:configuration{uri}'
15+
method = 'DELETE'

0 commit comments

Comments
 (0)