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

Commit 7e971df

Browse files
author
mpastorek
authored
Bp api (#117)
Signed-off-by: Marek <marek.pastorek@elisapolystar.com> * Added blueprints-provider --------- Signed-off-by: Marek <marek.pastorek@elisapolystar.com>
1 parent c84130f commit 7e971df

File tree

10 files changed

+849
-0
lines changed

10 files changed

+849
-0
lines changed

.github/workflows/pr-check.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ jobs:
4242
- 'topology-discovery/python/**'
4343
performance-monitor/python:
4444
- 'performance-monitor/python/**'
45+
blueprints-provider/python:
46+
- 'blueprints-provider/python/**'
4547
uniconfig/python:
4648
- 'uniconfig/python/**'
4749
utils/graphql-pydantic-converter:

.github/workflows/publish-package.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
- 'topology-discovery/python/RELEASE.md'
3030
uniconfig/python:
3131
- 'uniconfig/python/RELEASE.md'
32+
blueprints-provider/python:
33+
- 'blueprints-provider/python/RELEASE.md'
3234
3335
build-n-publish-pypi:
3436
needs: changes
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# 0.0.1
2+
- Init
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Blueprints Provider Api in Python
2+
3+
4+
Blueprints Provider Graphql Schema transformed to Pydantic basemodel.
5+
This package has been tested with Python 3.10.
6+
7+
8+
## Getting started
9+
10+
```python
11+
12+
```
13+
14+
### Prerequisites
15+
16+
- Python 3.10+ is required to use this package.
17+
- Usage with grapqhl-pydantic-converter
18+
19+
### Install the package
20+
21+
```bash
22+
poetry add git+https://github.com/FRINXio/frinx-services-python-api.git@main#subdirectory=blueprints-provider/python
23+
```
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Release matrix
2+
3+
| Docker Image Tag | Python Library Version |
4+
|------------------|------------------------|
5+
| 0.0.1 | 0.0.1 |
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
services:
2+
postgres:
3+
image: postgres:16.4-alpine3.20
4+
user: postgres
5+
volumes:
6+
- /var/lib/postgresql/data
7+
command: postgres -N 300
8+
environment:
9+
- POSTGRES_USER=postgres
10+
- POSTGRES_PASSWORD=postgres
11+
- POSTGRES_DB=blueprints
12+
ports:
13+
- "5432:5432"
14+
healthcheck:
15+
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
16+
interval: 10s
17+
timeout: 5s
18+
retries: 5
19+
start_period: 10s
20+
networks:
21+
- backend
22+
23+
networks:
24+
backend:

blueprints-provider/python/frinx_api/__init__.py

Whitespace-only changes.
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
from __future__ import annotations
2+
3+
import typing
4+
5+
from graphql_pydantic_converter.graphql_types import ENUM
6+
from graphql_pydantic_converter.graphql_types import Input
7+
from graphql_pydantic_converter.graphql_types import Interface
8+
from graphql_pydantic_converter.graphql_types import Mutation
9+
from graphql_pydantic_converter.graphql_types import Payload
10+
from graphql_pydantic_converter.graphql_types import Query
11+
from pydantic import BaseModel
12+
from pydantic import Field
13+
from pydantic import PrivateAttr
14+
15+
Boolean: typing.TypeAlias = bool
16+
DateTime: typing.TypeAlias = typing.Any
17+
ID: typing.TypeAlias = str
18+
Int: typing.TypeAlias = int
19+
JSON: typing.TypeAlias = typing.Any
20+
String: typing.TypeAlias = str
21+
22+
23+
class BlueprintType(ENUM):
24+
INSTALL = 'INSTALL'
25+
STREAM = 'STREAM'
26+
TOPOLOGY_LLDP = 'TOPOLOGY_LLDP'
27+
TOPOLOGY_PTP = 'TOPOLOGY_PTP'
28+
TOPOLOGY_SYNCE = 'TOPOLOGY_SYNCE'
29+
TOPOLOGY_MPLS = 'TOPOLOGY_MPLS'
30+
PERFORMANCE = 'PERFORMANCE'
31+
32+
33+
class ConnectionType(ENUM):
34+
NETCONF = 'NETCONF'
35+
GNMI = 'GNMI'
36+
CLI = 'CLI'
37+
SNMP = 'SNMP'
38+
39+
40+
class Connection(Interface):
41+
edges: typing.Optional[Edge] = Field(default=None)
42+
page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo')
43+
44+
45+
class Edge(Interface):
46+
cursor: typing.Optional[Boolean] = Field(default=None)
47+
node: typing.Optional[Node] = Field(default=None)
48+
49+
50+
class Node(Interface):
51+
name: typing.Optional[Boolean] = Field(default=None)
52+
53+
54+
class BlueprintNodeInput(Input):
55+
blueprint_type: BlueprintType = Field(alias='blueprintType')
56+
connection_type: ConnectionType = Field(alias='connectionType')
57+
model_pattern: typing.Optional[String] = Field(default=None, alias='modelPattern')
58+
name: String
59+
template: String
60+
vendor_pattern: typing.Optional[String] = Field(default=None, alias='vendorPattern')
61+
version_pattern: typing.Optional[String] = Field(default=None, alias='versionPattern')
62+
63+
64+
class BlueprintConnection(Payload):
65+
edges: typing.Optional[BlueprintEdge] = Field(default=None)
66+
page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo')
67+
68+
69+
class BlueprintConnectionPayload(BaseModel):
70+
edges: typing.Optional[typing.Optional[list[BlueprintEdgePayload]]] = Field(default=None)
71+
page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo')
72+
73+
74+
class BlueprintEdge(Payload):
75+
cursor: typing.Optional[Boolean] = Field(default=False)
76+
node: typing.Optional[BlueprintNode] = Field(default=None)
77+
78+
79+
class BlueprintEdgePayload(BaseModel):
80+
cursor: typing.Optional[typing.Optional[String]] = Field(default=None)
81+
node: typing.Optional[BlueprintNodePayload] = Field(default=None)
82+
83+
84+
class BlueprintMetadata(Payload):
85+
created_at: typing.Optional[Boolean] = Field(default=False, alias='createdAt')
86+
updated_at: typing.Optional[Boolean] = Field(default=False, alias='updatedAt')
87+
88+
89+
class BlueprintMetadataPayload(BaseModel):
90+
created_at: typing.Optional[typing.Optional[DateTime]] = Field(default=None, alias='createdAt')
91+
updated_at: typing.Optional[typing.Optional[DateTime]] = Field(default=None, alias='updatedAt')
92+
93+
94+
class BlueprintNode(Payload):
95+
blueprint_type: typing.Optional[Boolean] = Field(default=False, alias='blueprintType')
96+
connection_type: typing.Optional[Boolean] = Field(default=False, alias='connectionType')
97+
model_pattern: typing.Optional[Boolean] = Field(default=False, alias='modelPattern')
98+
name: typing.Optional[Boolean] = Field(default=False)
99+
template: typing.Optional[Boolean] = Field(default=False)
100+
vendor_pattern: typing.Optional[Boolean] = Field(default=False, alias='vendorPattern')
101+
version_pattern: typing.Optional[Boolean] = Field(default=False, alias='versionPattern')
102+
103+
104+
class BlueprintNodePayload(BaseModel):
105+
blueprint_type: typing.Optional[typing.Optional[BlueprintType]] = Field(default=None, alias='blueprintType')
106+
connection_type: typing.Optional[typing.Optional[ConnectionType]] = Field(default=None, alias='connectionType')
107+
model_pattern: typing.Optional[typing.Optional[String]] = Field(default=None, alias='modelPattern')
108+
name: typing.Optional[typing.Optional[String]] = Field(default=None)
109+
template: typing.Optional[typing.Optional[String]] = Field(default=None)
110+
vendor_pattern: typing.Optional[typing.Optional[String]] = Field(default=None, alias='vendorPattern')
111+
version_pattern: typing.Optional[typing.Optional[String]] = Field(default=None, alias='versionPattern')
112+
113+
114+
class BlueprintOutput(Payload):
115+
id: typing.Optional[Boolean] = Field(default=False)
116+
metadata: typing.Optional[BlueprintMetadata] = Field(default=None)
117+
node: typing.Optional[BlueprintNode] = Field(default=None)
118+
119+
120+
class BlueprintOutputPayload(BaseModel):
121+
id: typing.Optional[typing.Optional[ID]] = Field(default=None)
122+
metadata: typing.Optional[BlueprintMetadataPayload] = Field(default=None)
123+
node: typing.Optional[BlueprintNodePayload] = Field(default=None)
124+
125+
126+
class CreateBlueprintMutation(Mutation):
127+
_name: str = PrivateAttr('createBlueprint')
128+
node: BlueprintNodeInput = Field(json_schema_extra={'type': 'BlueprintNodeInput!'})
129+
payload: BlueprintOutput
130+
131+
132+
class DeleteBlueprintMutation(Mutation):
133+
_name: str = PrivateAttr('deleteBlueprint')
134+
id: ID = Field(json_schema_extra={'type': 'ID!'})
135+
payload: BlueprintOutput
136+
137+
138+
class UpdateBlueprintMutation(Mutation):
139+
_name: str = PrivateAttr('updateBlueprint')
140+
id: ID = Field(json_schema_extra={'type': 'ID!'})
141+
node: BlueprintNodeInput = Field(json_schema_extra={'type': 'BlueprintNodeInput!'})
142+
payload: BlueprintOutput
143+
144+
145+
class CreateBlueprintMutationResponse(BaseModel):
146+
data: typing.Optional[CreateBlueprintData] = Field(default=None)
147+
errors: typing.Optional[typing.Any] = Field(default=None)
148+
149+
150+
class CreateBlueprintData(BaseModel):
151+
create_blueprint: BlueprintOutputPayload = Field(alias='createBlueprint')
152+
153+
154+
class DeleteBlueprintMutationResponse(BaseModel):
155+
data: typing.Optional[DeleteBlueprintData] = Field(default=None)
156+
errors: typing.Optional[typing.Any] = Field(default=None)
157+
158+
159+
class DeleteBlueprintData(BaseModel):
160+
delete_blueprint: BlueprintOutputPayload = Field(alias='deleteBlueprint')
161+
162+
163+
class UpdateBlueprintMutationResponse(BaseModel):
164+
data: typing.Optional[UpdateBlueprintData] = Field(default=None)
165+
errors: typing.Optional[typing.Any] = Field(default=None)
166+
167+
168+
class UpdateBlueprintData(BaseModel):
169+
update_blueprint: BlueprintOutputPayload = Field(alias='updateBlueprint')
170+
171+
172+
class PageInfo(Payload):
173+
end_cursor: typing.Optional[Boolean] = Field(default=False, alias='endCursor')
174+
has_next_page: typing.Optional[Boolean] = Field(default=False, alias='hasNextPage')
175+
176+
177+
class PageInfoPayload(BaseModel):
178+
end_cursor: typing.Optional[typing.Optional[String]] = Field(default=None, alias='endCursor')
179+
has_next_page: typing.Optional[typing.Optional[Boolean]] = Field(default=None, alias='hasNextPage')
180+
181+
182+
class BlueprintsQuery(Query):
183+
_name: str = PrivateAttr('blueprints')
184+
connection_type: typing.Optional[ConnectionType] = Field(default=None, alias='connectionType', json_schema_extra={'type': 'ConnectionType'})
185+
blueprint_type: typing.Optional[BlueprintType] = Field(default=None, alias='blueprintType', json_schema_extra={'type': 'BlueprintType'})
186+
vendor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'})
187+
model: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'})
188+
version: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'})
189+
first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'})
190+
after: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'})
191+
template_variables: typing.Optional[JSON] = Field(default=None, alias='templateVariables', json_schema_extra={'type': 'JSON'})
192+
payload: BlueprintConnection
193+
194+
195+
class BlueprintsQueryResponse(BaseModel):
196+
data: typing.Optional[BlueprintsData] = Field(default=None)
197+
errors: typing.Optional[typing.Any] = Field(default=None)
198+
199+
200+
class BlueprintsData(BaseModel):
201+
blueprints: BlueprintConnectionPayload
202+
203+
204+
Connection.model_rebuild()
205+
Edge.model_rebuild()
206+
Node.model_rebuild()
207+
BlueprintNodeInput.model_rebuild()
208+
BlueprintConnection.model_rebuild()
209+
BlueprintConnectionPayload.model_rebuild()
210+
BlueprintEdge.model_rebuild()
211+
BlueprintEdgePayload.model_rebuild()
212+
BlueprintMetadata.model_rebuild()
213+
BlueprintMetadataPayload.model_rebuild()
214+
BlueprintNode.model_rebuild()
215+
BlueprintNodePayload.model_rebuild()
216+
BlueprintOutput.model_rebuild()
217+
BlueprintOutputPayload.model_rebuild()
218+
CreateBlueprintMutation.model_rebuild()
219+
DeleteBlueprintMutation.model_rebuild()
220+
UpdateBlueprintMutation.model_rebuild()
221+
CreateBlueprintMutationResponse.model_rebuild()
222+
CreateBlueprintData.model_rebuild()
223+
DeleteBlueprintMutationResponse.model_rebuild()
224+
DeleteBlueprintData.model_rebuild()
225+
UpdateBlueprintMutationResponse.model_rebuild()
226+
UpdateBlueprintData.model_rebuild()
227+
PageInfo.model_rebuild()
228+
PageInfoPayload.model_rebuild()
229+
BlueprintsQuery.model_rebuild()
230+
BlueprintsQueryResponse.model_rebuild()
231+
BlueprintsData.model_rebuild()

0 commit comments

Comments
 (0)