unitysvc-services 0.1.0__py3-none-any.whl → 0.2.0__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.
- unitysvc_services/format_data.py +2 -7
- unitysvc_services/list.py +14 -43
- unitysvc_services/models/base.py +16 -0
- unitysvc_services/models/listing_v1.py +1 -3
- unitysvc_services/models/provider_v1.py +7 -1
- unitysvc_services/models/seller_v1.py +5 -5
- unitysvc_services/populate.py +2 -6
- unitysvc_services/publisher.py +328 -293
- unitysvc_services/query.py +18 -98
- unitysvc_services/update.py +10 -14
- unitysvc_services/utils.py +105 -7
- unitysvc_services/validator.py +137 -9
- {unitysvc_services-0.1.0.dist-info → unitysvc_services-0.2.0.dist-info}/METADATA +38 -38
- unitysvc_services-0.2.0.dist-info/RECORD +23 -0
- unitysvc_services-0.1.0.dist-info/RECORD +0 -23
- {unitysvc_services-0.1.0.dist-info → unitysvc_services-0.2.0.dist-info}/WHEEL +0 -0
- {unitysvc_services-0.1.0.dist-info → unitysvc_services-0.2.0.dist-info}/entry_points.txt +0 -0
- {unitysvc_services-0.1.0.dist-info → unitysvc_services-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {unitysvc_services-0.1.0.dist-info → unitysvc_services-0.2.0.dist-info}/top_level.txt +0 -0
unitysvc_services/format_data.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
"""Format command - format data files."""
|
2
2
|
|
3
|
-
import os
|
4
3
|
from pathlib import Path
|
5
4
|
|
6
5
|
import typer
|
@@ -14,7 +13,7 @@ console = Console()
|
|
14
13
|
def format_data(
|
15
14
|
data_dir: Path | None = typer.Argument(
|
16
15
|
None,
|
17
|
-
help="Directory containing data files to format (default:
|
16
|
+
help="Directory containing data files to format (default: current directory)",
|
18
17
|
),
|
19
18
|
check_only: bool = typer.Option(
|
20
19
|
False,
|
@@ -35,11 +34,7 @@ def format_data(
|
|
35
34
|
|
36
35
|
# Set data directory
|
37
36
|
if data_dir is None:
|
38
|
-
|
39
|
-
if data_dir_str:
|
40
|
-
data_dir = Path(data_dir_str)
|
41
|
-
else:
|
42
|
-
data_dir = Path.cwd() / "data"
|
37
|
+
data_dir = Path.cwd()
|
43
38
|
|
44
39
|
if not data_dir.is_absolute():
|
45
40
|
data_dir = Path.cwd() / data_dir
|
unitysvc_services/list.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
"""List command group - list local data files."""
|
2
2
|
|
3
|
-
import os
|
4
3
|
from pathlib import Path
|
5
4
|
|
6
5
|
import typer
|
@@ -21,25 +20,19 @@ console = Console()
|
|
21
20
|
def list_providers(
|
22
21
|
data_dir: Path | None = typer.Argument(
|
23
22
|
None,
|
24
|
-
help="Directory containing provider files (default:
|
23
|
+
help="Directory containing provider files (default: current directory)",
|
25
24
|
),
|
26
25
|
):
|
27
26
|
"""List all provider files found in the data directory."""
|
28
27
|
# Set data directory
|
29
28
|
if data_dir is None:
|
30
|
-
|
31
|
-
if data_dir_str:
|
32
|
-
data_dir = Path(data_dir_str)
|
33
|
-
else:
|
34
|
-
data_dir = Path.cwd() / "data"
|
29
|
+
data_dir = Path.cwd()
|
35
30
|
|
36
31
|
if not data_dir.is_absolute():
|
37
32
|
data_dir = Path.cwd() / data_dir
|
38
33
|
|
39
34
|
if not data_dir.exists():
|
40
|
-
console.print(
|
41
|
-
f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red"
|
42
|
-
)
|
35
|
+
console.print(f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red")
|
43
36
|
raise typer.Exit(code=1)
|
44
37
|
|
45
38
|
console.print(f"[blue]Searching for providers in:[/blue] {data_dir}\n")
|
@@ -72,25 +65,19 @@ def list_providers(
|
|
72
65
|
def list_sellers(
|
73
66
|
data_dir: Path | None = typer.Argument(
|
74
67
|
None,
|
75
|
-
help="Directory containing seller files (default:
|
68
|
+
help="Directory containing seller files (default: current directory)",
|
76
69
|
),
|
77
70
|
):
|
78
71
|
"""List all seller files found in the data directory."""
|
79
72
|
# Set data directory
|
80
73
|
if data_dir is None:
|
81
|
-
|
82
|
-
if data_dir_str:
|
83
|
-
data_dir = Path(data_dir_str)
|
84
|
-
else:
|
85
|
-
data_dir = Path.cwd() / "data"
|
74
|
+
data_dir = Path.cwd()
|
86
75
|
|
87
76
|
if not data_dir.is_absolute():
|
88
77
|
data_dir = Path.cwd() / data_dir
|
89
78
|
|
90
79
|
if not data_dir.exists():
|
91
|
-
console.print(
|
92
|
-
f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red"
|
93
|
-
)
|
80
|
+
console.print(f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red")
|
94
81
|
raise typer.Exit(code=1)
|
95
82
|
|
96
83
|
console.print(f"[blue]Searching for sellers in:[/blue] {data_dir}\n")
|
@@ -123,25 +110,19 @@ def list_sellers(
|
|
123
110
|
def list_offerings(
|
124
111
|
data_dir: Path | None = typer.Argument(
|
125
112
|
None,
|
126
|
-
help="Directory containing service files (default:
|
113
|
+
help="Directory containing service files (default: current directory)",
|
127
114
|
),
|
128
115
|
):
|
129
116
|
"""List all service offering files found in the data directory."""
|
130
117
|
# Set data directory
|
131
118
|
if data_dir is None:
|
132
|
-
|
133
|
-
if data_dir_str:
|
134
|
-
data_dir = Path(data_dir_str)
|
135
|
-
else:
|
136
|
-
data_dir = Path.cwd() / "data"
|
119
|
+
data_dir = Path.cwd()
|
137
120
|
|
138
121
|
if not data_dir.is_absolute():
|
139
122
|
data_dir = Path.cwd() / data_dir
|
140
123
|
|
141
124
|
if not data_dir.exists():
|
142
|
-
console.print(
|
143
|
-
f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red"
|
144
|
-
)
|
125
|
+
console.print(f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red")
|
145
126
|
raise typer.Exit(code=1)
|
146
127
|
|
147
128
|
console.print(f"[blue]Searching for service offerings in:[/blue] {data_dir}\n")
|
@@ -172,34 +153,26 @@ def list_offerings(
|
|
172
153
|
)
|
173
154
|
|
174
155
|
console.print(table)
|
175
|
-
console.print(
|
176
|
-
f"\n[green]Total:[/green] {len(service_files)} service offering file(s)"
|
177
|
-
)
|
156
|
+
console.print(f"\n[green]Total:[/green] {len(service_files)} service offering file(s)")
|
178
157
|
|
179
158
|
|
180
159
|
@app.command("listings")
|
181
160
|
def list_listings(
|
182
161
|
data_dir: Path | None = typer.Argument(
|
183
162
|
None,
|
184
|
-
help="Directory containing listing files (default:
|
163
|
+
help="Directory containing listing files (default: current directory)",
|
185
164
|
),
|
186
165
|
):
|
187
166
|
"""List all service listing files found in the data directory."""
|
188
167
|
# Set data directory
|
189
168
|
if data_dir is None:
|
190
|
-
|
191
|
-
if data_dir_str:
|
192
|
-
data_dir = Path(data_dir_str)
|
193
|
-
else:
|
194
|
-
data_dir = Path.cwd() / "data"
|
169
|
+
data_dir = Path.cwd()
|
195
170
|
|
196
171
|
if not data_dir.is_absolute():
|
197
172
|
data_dir = Path.cwd() / data_dir
|
198
173
|
|
199
174
|
if not data_dir.exists():
|
200
|
-
console.print(
|
201
|
-
f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red"
|
202
|
-
)
|
175
|
+
console.print(f"[red]✗[/red] Data directory not found: {data_dir}", style="bold red")
|
203
176
|
raise typer.Exit(code=1)
|
204
177
|
|
205
178
|
console.print(f"[blue]Searching for service listings in:[/blue] {data_dir}\n")
|
@@ -240,6 +213,4 @@ def list_listings(
|
|
240
213
|
)
|
241
214
|
|
242
215
|
console.print(table)
|
243
|
-
console.print(
|
244
|
-
f"\n[green]Total:[/green] {len(listing_files)} service listing file(s)"
|
245
|
-
)
|
216
|
+
console.print(f"\n[green]Total:[/green] {len(listing_files)} service listing file(s)")
|
unitysvc_services/models/base.py
CHANGED
@@ -206,6 +206,22 @@ class UpstreamStatusEnum(StrEnum):
|
|
206
206
|
deprecated = "deprecated"
|
207
207
|
|
208
208
|
|
209
|
+
class ProviderStatusEnum(StrEnum):
|
210
|
+
"""Provider status enum."""
|
211
|
+
|
212
|
+
active = "active"
|
213
|
+
disabled = "disabled"
|
214
|
+
incomplete = "incomplete" # Provider information is incomplete
|
215
|
+
|
216
|
+
|
217
|
+
class SellerStatusEnum(StrEnum):
|
218
|
+
"""Seller status enum."""
|
219
|
+
|
220
|
+
active = "active"
|
221
|
+
disabled = "disabled"
|
222
|
+
incomplete = "incomplete" # Seller information is incomplete
|
223
|
+
|
224
|
+
|
209
225
|
class Document(BaseModel):
|
210
226
|
model_config = ConfigDict(extra="forbid")
|
211
227
|
|
@@ -30,9 +30,7 @@ class ListingV1(BaseModel):
|
|
30
30
|
),
|
31
31
|
)
|
32
32
|
|
33
|
-
seller_name: str = Field(
|
34
|
-
description="Name of the seller offering this service listing"
|
35
|
-
)
|
33
|
+
seller_name: str | None = Field(default=None, description="Name of the seller offering this service listing")
|
36
34
|
|
37
35
|
# unique name for each provider, usually following upstream naming convention
|
38
36
|
# status of the service, public, deprecated etc
|
@@ -3,7 +3,7 @@ from typing import Any
|
|
3
3
|
|
4
4
|
from pydantic import BaseModel, ConfigDict, EmailStr, Field, HttpUrl
|
5
5
|
|
6
|
-
from unitysvc_services.models.base import AccessInterface, Document
|
6
|
+
from unitysvc_services.models.base import AccessInterface, Document, ProviderStatusEnum
|
7
7
|
|
8
8
|
|
9
9
|
class ProviderV1(BaseModel):
|
@@ -51,3 +51,9 @@ class ProviderV1(BaseModel):
|
|
51
51
|
homepage: HttpUrl
|
52
52
|
contact_email: EmailStr
|
53
53
|
secondary_contact_email: EmailStr | None = None
|
54
|
+
|
55
|
+
# Status field to track provider state
|
56
|
+
status: ProviderStatusEnum = Field(
|
57
|
+
default=ProviderStatusEnum.active,
|
58
|
+
description="Provider status: active, disabled, or incomplete",
|
59
|
+
)
|
@@ -2,7 +2,7 @@ from datetime import datetime
|
|
2
2
|
|
3
3
|
from pydantic import BaseModel, ConfigDict, EmailStr, Field, HttpUrl
|
4
4
|
|
5
|
-
from unitysvc_services.models.base import Document, SellerTypeEnum
|
5
|
+
from unitysvc_services.models.base import Document, SellerStatusEnum, SellerTypeEnum
|
6
6
|
|
7
7
|
|
8
8
|
class SellerV1(BaseModel):
|
@@ -98,10 +98,10 @@ class SellerV1(BaseModel):
|
|
98
98
|
# fields for business operation purposes
|
99
99
|
#
|
100
100
|
|
101
|
-
# Status
|
102
|
-
|
103
|
-
default=
|
104
|
-
description="
|
101
|
+
# Status field to track seller state
|
102
|
+
status: SellerStatusEnum = Field(
|
103
|
+
default=SellerStatusEnum.active,
|
104
|
+
description="Seller status: active, disabled, or incomplete",
|
105
105
|
)
|
106
106
|
|
107
107
|
is_verified: bool = Field(
|
unitysvc_services/populate.py
CHANGED
@@ -19,7 +19,7 @@ console = Console()
|
|
19
19
|
def populate(
|
20
20
|
data_dir: Path | None = typer.Argument(
|
21
21
|
None,
|
22
|
-
help="Directory containing provider data files (default:
|
22
|
+
help="Directory containing provider data files (default: current directory)",
|
23
23
|
),
|
24
24
|
provider_name: str | None = typer.Option(
|
25
25
|
None,
|
@@ -41,11 +41,7 @@ def populate(
|
|
41
41
|
"""
|
42
42
|
# Set data directory
|
43
43
|
if data_dir is None:
|
44
|
-
|
45
|
-
if data_dir_str:
|
46
|
-
data_dir = Path(data_dir_str)
|
47
|
-
else:
|
48
|
-
data_dir = Path.cwd() / "data"
|
44
|
+
data_dir = Path.cwd()
|
49
45
|
|
50
46
|
if not data_dir.is_absolute():
|
51
47
|
data_dir = Path.cwd() / data_dir
|