vega-framework 0.1.29__py3-none-any.whl → 0.1.31__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.
@@ -0,0 +1,349 @@
1
+ Metadata-Version: 2.4
2
+ Name: vega-framework
3
+ Version: 0.1.31
4
+ Summary: Enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications.
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Keywords: clean-architecture,dependency-injection,framework,python,async,vega
8
+ Author: Roberto Ferro
9
+ Requires-Python: >=3.10,<4.0
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Dist: click (>=8.0,<9.0)
22
+ Requires-Dist: fastapi (>=0.109,<0.110)
23
+ Requires-Dist: jinja2 (>=3.1,<4.0)
24
+ Requires-Dist: pydantic (>=2.0,<3.0)
25
+ Requires-Dist: pydantic-settings (>=2.0,<3.0)
26
+ Requires-Dist: toml (>=0.10,<0.11)
27
+ Requires-Dist: uvicorn (>=0.27,<0.28)
28
+ Project-URL: Documentation, https://vega-framework.readthedocs.io
29
+ Project-URL: Homepage, https://github.com/RobyFerro/vega-framework
30
+ Project-URL: Repository, https://github.com/RobyFerro/vega-framework
31
+ Description-Content-Type: text/markdown
32
+
33
+ # Vega Framework
34
+
35
+ An enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications.
36
+
37
+ ## Why Vega?
38
+
39
+ Traditional Python frameworks show you **how to build** but don't enforce **how to architect**. Vega provides:
40
+
41
+ - ✅ **Clean Architecture** - Enforced separation of concerns
42
+ - ✅ **Dependency Injection** - Zero boilerplate, type-safe DI
43
+ - ✅ **Business Logic First** - Pure, testable, framework-independent
44
+ - ✅ **CLI Scaffolding** - Generate entire projects and components
45
+ - ✅ **Async Support** - Full async/await for CLI and web
46
+ - ✅ **FastAPI & SQLAlchemy** - Built-in integrations when needed
47
+
48
+ **[Read the Philosophy →](docs/explanation/philosophy.md)** to understand why architecture matters.
49
+
50
+ ## Quick Start
51
+
52
+ ### Installation
53
+
54
+ ```bash
55
+ pip install vega-framework
56
+ ```
57
+
58
+ ### Create Your First Project
59
+
60
+ ```bash
61
+ # Create project
62
+ vega init my-app
63
+ cd my-app
64
+
65
+ # Install dependencies
66
+ poetry install
67
+
68
+ # Generate components
69
+ vega generate entity User
70
+ vega generate repository UserRepository --impl memory
71
+ vega generate interactor CreateUser
72
+
73
+ # Run your app
74
+ poetry run python main.py
75
+ ```
76
+
77
+ ### Your First Use Case
78
+
79
+ ```python
80
+ # domain/interactors/create_user.py
81
+ from vega.patterns import Interactor
82
+ from vega.di import bind
83
+
84
+ class CreateUser(Interactor[User]):
85
+ def __init__(self, name: str, email: str):
86
+ self.name = name
87
+ self.email = email
88
+
89
+ @bind
90
+ async def call(self, repository: UserRepository) -> User:
91
+ # Pure business logic - no framework code!
92
+ user = User(name=self.name, email=self.email)
93
+ return await repository.save(user)
94
+
95
+ # Usage - clean and simple
96
+ user = await CreateUser(name="John", email="john@example.com")
97
+ ```
98
+
99
+ **[See Full Quick Start →](docs/tutorials/quickstart.md)**
100
+
101
+ ## Key Concepts
102
+
103
+ ### Clean Architecture Layers
104
+
105
+ ```
106
+ ┌─────────────────────────────────────┐
107
+ │ Presentation (CLI, Web) │ User interfaces
108
+ ├─────────────────────────────────────┤
109
+ │ Application (Workflows) │ Multi-step operations
110
+ ├─────────────────────────────────────┤
111
+ │ Domain (Business Logic) │ Core business rules
112
+ ├─────────────────────────────────────┤
113
+ │ Infrastructure (Technical) │ Databases, APIs
114
+ └─────────────────────────────────────┘
115
+ ```
116
+
117
+ **[Learn Clean Architecture →](docs/explanation/architecture/clean-architecture.md)**
118
+
119
+ ### Core Patterns
120
+
121
+ - **[Interactor](docs/explanation/patterns/interactor.md)** - Single-purpose use case
122
+ - **[Mediator](docs/explanation/patterns/mediator.md)** - Complex workflow orchestration
123
+ - **[Repository](docs/explanation/patterns/repository.md)** - Data persistence abstraction
124
+ - **[Service](docs/explanation/patterns/service.md)** - External service abstraction
125
+
126
+ ### Dependency Injection
127
+
128
+ ```python
129
+ # Define what you need (domain)
130
+ class UserRepository(Repository[User]):
131
+ async def save(self, user: User) -> User:
132
+ pass
133
+
134
+ # Implement how it works (infrastructure)
135
+ @injectable(scope=Scope.SINGLETON)
136
+ class PostgresUserRepository(UserRepository):
137
+ async def save(self, user: User) -> User:
138
+ # PostgreSQL implementation
139
+ pass
140
+
141
+ # Wire it together (config)
142
+ container = Container({
143
+ UserRepository: PostgresUserRepository
144
+ })
145
+ ```
146
+
147
+ **[Learn Dependency Injection →](docs/explanation/core/dependency-injection.md)**
148
+
149
+ ## CLI Commands
150
+
151
+ ### Project Management
152
+
153
+ ```bash
154
+ vega init my-app # Create new project
155
+ vega init my-api --template fastapi # Create with FastAPI
156
+ vega doctor # Validate architecture
157
+ vega update # Update framework
158
+ ```
159
+
160
+ ### Code Generation
161
+
162
+ ```bash
163
+ # Domain layer
164
+ vega generate entity Product
165
+ vega generate repository ProductRepository --impl sql
166
+ vega generate interactor CreateProduct
167
+
168
+ # Application layer
169
+ vega generate mediator CheckoutWorkflow
170
+
171
+ # Presentation layer
172
+ vega generate router Product # FastAPI (requires: vega add web)
173
+ vega generate command create-product # CLI
174
+
175
+ # Infrastructure
176
+ vega generate model Product # SQLAlchemy (requires: vega add db)
177
+ ```
178
+
179
+ ### Add Features
180
+
181
+ ```bash
182
+ vega add web # Add FastAPI web support
183
+ vega add sqlalchemy # Add database support
184
+ ```
185
+
186
+ ### Database Migrations
187
+
188
+ ```bash
189
+ vega migrate init # Initialize database
190
+ vega migrate create -m "add users" # Create migration
191
+ vega migrate upgrade # Apply migrations
192
+ vega migrate downgrade # Rollback
193
+ ```
194
+
195
+ **[See All CLI Commands →](docs/reference/cli/overview.md)**
196
+
197
+ ## Event System
198
+
199
+ Built-in event-driven architecture support:
200
+
201
+ ```python
202
+ from vega.events import Event, subscribe
203
+
204
+ # Define event
205
+ @dataclass(frozen=True)
206
+ class UserCreated(Event):
207
+ user_id: str
208
+ email: str
209
+
210
+ # Subscribe to event
211
+ @subscribe(UserCreated)
212
+ async def send_welcome_email(event: UserCreated):
213
+ await email_service.send(event.email, "Welcome!")
214
+
215
+ # Publish event
216
+ await UserCreated(user_id="123", email="test@test.com").publish()
217
+ ```
218
+
219
+ **[Learn Event System →](docs/explanation/events/overview.md)**
220
+
221
+ ## Documentation
222
+
223
+ ### Getting Started
224
+ - [Installation](docs/how-to/install.md)
225
+ - [Quick Start](docs/tutorials/quickstart.md)
226
+ - [Project Structure](docs/explanation/project-structure.md)
227
+
228
+ ### Core Concepts
229
+ - [Philosophy](docs/explanation/philosophy.md) - Why Vega exists
230
+ - [Clean Architecture](docs/explanation/architecture/clean-architecture.md) - Architecture principles
231
+ - [Dependency Injection](docs/explanation/core/dependency-injection.md) - DI system
232
+ - [Patterns](docs/explanation/patterns/interactor.md) - Interactor, Mediator, Repository, Service
233
+
234
+ ### Guides
235
+ - [Building Domain Layer](docs/how-to/build-domain-layer.md) - Business logic first
236
+ - [CLI Reference](docs/reference/cli/overview.md) - All CLI commands
237
+ - [Events System](docs/explanation/events/overview.md) - Event-driven architecture
238
+
239
+ ### Reference
240
+ - [Changelog](docs/reference/CHANGELOG.md)
241
+ - [Roadmap](docs/reference/ROADMAP.md)
242
+
243
+ **[Browse All Documentation →](docs/README.md)**
244
+
245
+ ## Perfect For
246
+
247
+ - E-commerce platforms
248
+ - Financial systems
249
+ - Enterprise SaaS applications
250
+ - AI/RAG applications
251
+ - Complex workflow systems
252
+ - Multi-tenant applications
253
+ - Any project requiring clean architecture
254
+
255
+ ## Example Project
256
+
257
+ ```
258
+ my-app/
259
+ ├── domain/ # Business logic
260
+ │ ├── entities/ # Business objects
261
+ │ ├── repositories/ # Data interfaces
262
+ │ ├── services/ # External service interfaces
263
+ │ └── interactors/ # Use cases
264
+ ├── application/ # Workflows
265
+ │ └── mediators/ # Complex orchestrations
266
+ ├── infrastructure/ # Implementations
267
+ │ ├── repositories/ # Database code
268
+ │ └── services/ # API integrations
269
+ ├── presentation/ # User interfaces
270
+ │ ├── cli/ # CLI commands
271
+ │ └── web/ # FastAPI routes
272
+ ├── config.py # Dependency injection
273
+ ├── settings.py # Configuration
274
+ └── main.py # Entry point
275
+ ```
276
+
277
+ ## Why Clean Architecture?
278
+
279
+ **Without Vega:**
280
+ ```python
281
+ # ❌ Business logic mixed with framework code
282
+ @app.post("/orders")
283
+ async def create_order(request: Request):
284
+ data = await request.json()
285
+ order = OrderModel(**data) # SQLAlchemy
286
+ session.add(order)
287
+ stripe.Charge.create(...) # Stripe
288
+ return {"id": order.id}
289
+ ```
290
+
291
+ **Problems:**
292
+ - Can't test without FastAPI, database, and Stripe
293
+ - Can't reuse for CLI or other interfaces
294
+ - Business rules are unclear
295
+ - Tightly coupled to specific technologies
296
+
297
+ **With Vega:**
298
+ ```python
299
+ # ✅ Pure business logic (Domain)
300
+ class PlaceOrder(Interactor[Order]):
301
+ @bind
302
+ async def call(
303
+ self,
304
+ order_repo: OrderRepository,
305
+ payment_service: PaymentService
306
+ ) -> Order:
307
+ # Pure business logic - testable, reusable
308
+ order = Order(...)
309
+ await payment_service.charge(...)
310
+ return await order_repo.save(order)
311
+
312
+ # ✅ FastAPI route (Presentation) - just wiring
313
+ @router.post("/orders")
314
+ async def create_order_api(request: CreateOrderRequest):
315
+ return await PlaceOrder(...)
316
+
317
+ # ✅ CLI command (Presentation) - same logic
318
+ @click.command()
319
+ async def create_order_cli(...):
320
+ return await PlaceOrder(...)
321
+ ```
322
+
323
+ **Benefits:**
324
+ - ✅ Test business logic without any infrastructure
325
+ - ✅ Same logic works for Web, CLI, GraphQL, etc.
326
+ - ✅ Swap databases without changing business code
327
+ - ✅ Clear business rules and operations
328
+
329
+ ## Community & Support
330
+
331
+ - **GitHub Issues**: [Report bugs and request features](https://github.com/RobyFerro/vega-framework/issues)
332
+ - **Documentation**: [Complete guides and API reference](docs/README.md)
333
+ - **Examples**: Check `examples/` directory for working code
334
+
335
+ ## Contributing
336
+
337
+ Contributions are welcome! This framework is extracted from production code and battle-tested in real-world applications.
338
+
339
+ ## License
340
+
341
+ MIT License - see [LICENSE](LICENSE) for details.
342
+
343
+ ---
344
+
345
+ **Built with ❤️ for developers who care about architecture.**
346
+
347
+ [Get Started →](docs/tutorials/quickstart.md) | [Read Philosophy →](docs/explanation/philosophy.md) | [View Documentation →](docs/README.md)
348
+
349
+
@@ -2,24 +2,26 @@ vega/__init__.py,sha256=A05RwOYXooAZUz3GnbJ--ofLXgtRZK9gaSmsLVRdGPY,1811
2
2
  vega/cli/__init__.py,sha256=NCzOOyhKHqLeN1r80ekhMfkQwBdAQXKcKiKoNwYPNiY,304
3
3
  vega/cli/commands/__init__.py,sha256=UH7MdYduBG_YoulgdiWkUCtcgGLzuYRGFzxaqoa0pyg,19
4
4
  vega/cli/commands/add.py,sha256=5Li588W1KWQqCKV0VZSURx4J3I8dQE297c4V_3anf5U,6465
5
- vega/cli/commands/generate.py,sha256=Rb4hXPHm_pFEKFViWJ2sMzyUNJWCCoTjLq2H2GvruGc,33720
6
- vega/cli/commands/init.py,sha256=kBRtntHT7e-y9uOwZm9o9IUED64e_pO5fBEsIx5m-X8,5592
5
+ vega/cli/commands/generate.py,sha256=S3qNE40exn1dSub8kM8Vp-Tpn9ByK2UBjaVA6LadAos,38172
6
+ vega/cli/commands/init.py,sha256=Ro35QfCKeo-Nm_rJkRT-DaX0nH7_bGc_ewX5Q1eqpP8,5860
7
7
  vega/cli/commands/migrate.py,sha256=00swKeVhmKr1_1VJhg3GpIMcJ6Jfgz5FUpmJoLf5qSQ,3805
8
8
  vega/cli/commands/update.py,sha256=0zRWkHvQwKGlJL9XF3bi--dThkFapyNOugL6AgGr6Ic,5897
9
9
  vega/cli/commands/web.py,sha256=tkaMzrENiV044JdPtCSRmzX_vVpnumlDeTG6YH3DWo4,3450
10
- vega/cli/main.py,sha256=GNqNB6kX_c2a7d68B3g4_oFyWjxTf8ZaoPH7TaYiSmk,5136
10
+ vega/cli/main.py,sha256=0hSar-MFpu3tp2QDOite4LGVpAhCTojuRZhPDiilEFQ,5476
11
11
  vega/cli/scaffolds/__init__.py,sha256=WFJf2H_4UWL89gDxX8PXKkTVSVOfw7hFfyaPWKokp1g,217
12
12
  vega/cli/scaffolds/fastapi.py,sha256=a_vZVSfMgyteRURFZAShbtjSRMOSM4YeEIKKvBtAOfo,3788
13
13
  vega/cli/scaffolds/sqlalchemy.py,sha256=il5JqiA8LSQKnNoOYfAFD82rdYx5l_ZsqsjHnplYohw,6164
14
- vega/cli/templates/__init__.py,sha256=axjR2Nk8Cy36owrXiHxDOFn9CCd6-Z7Ri5UvOcK1CoM,1876
14
+ vega/cli/templates/__init__.py,sha256=1Udc3hlhj3pJYQGk4NVpg0u9us040YarL_adlomJTf4,2018
15
15
  vega/cli/templates/cli/command.py.j2,sha256=Z8K9DRfppsco9uID_uG8EKVyWYD_1x-KYqLZY4BJKzM,1097
16
16
  vega/cli/templates/cli/command_simple.py.j2,sha256=PshUZyKtkazSEtaf6E1__hQbX07pz6ojxTXK4TgtUEw,531
17
17
  vega/cli/templates/cli/commands_init.py.j2,sha256=iZGnWmJoFUGM1pUMQGYLNplgwgwo8D48vT1hzBcHUEQ,300
18
- vega/cli/templates/components.py,sha256=nb8B9ha7-vYqnv6dpkI6ruL_Uo6cvJVdcDUseUACpdE,7631
18
+ vega/cli/templates/components.py,sha256=93fzDB6DJUq4_wPaM1ao8RgHxlm6giMSu4JIP8ULOS4,8541
19
19
  vega/cli/templates/domain/entity.py.j2,sha256=dl5rzuJMnTRqOdU5SYV2o_OPGy9l6DNf_symCcjdjK0,344
20
+ vega/cli/templates/domain/event.py.j2,sha256=hfNTrlhtwgyiid5oCIBOeVkb6t4K5IOCx7cd0cQi7mQ,667
21
+ vega/cli/templates/domain/event_handler.py.j2,sha256=F8uYJp4WbbAjUk74raD01WcgjU0NVPqtD_9wx2aC4lM,664
20
22
  vega/cli/templates/domain/interactor.py.j2,sha256=Hv6whUyW67smjMRw_HuvC3_-q7g32dEUOFZdmi5xkrc,684
21
23
  vega/cli/templates/domain/mediator.py.j2,sha256=gdEDNscYaB3wOemaVrFr3qKVE5sTS5wRVvbxrrfBemY,694
22
- vega/cli/templates/domain/repository_interface.py.j2,sha256=FDlK10yYim6wHMk44IVncoo6RPO0TWDeHWpPjgLlaLo,577
24
+ vega/cli/templates/domain/repository_interface.py.j2,sha256=90jPcokr7GPbfzma_k5GFYFAKk8RZ52SMTmnrC6bnQg,584
23
25
  vega/cli/templates/domain/service_interface.py.j2,sha256=Pq-wwGvGbns9Z_2lqL8Xi2_G-MMU-0JjAuGW94H6mrE,330
24
26
  vega/cli/templates/infrastructure/model.py.j2,sha256=zNY4m7BZJeQhdu_bTFY6WIhizsYW4eJY6PS1DCs0vbE,796
25
27
  vega/cli/templates/infrastructure/repository_impl.py.j2,sha256=Rmip4Swh3wdJRioVOWKgJVQgl45Y9STu3M-oviaOrPM,488
@@ -30,6 +32,7 @@ vega/cli/templates/project/.gitignore,sha256=7JSDihCtBznd-QxQ4wUtHM9fnbYnbw6PK4A
30
32
  vega/cli/templates/project/ARCHITECTURE.md.j2,sha256=HunrJ_9LlPxd5-GONaJxjoLlw-XfjYaLpsVHFa72Yf4,25868
31
33
  vega/cli/templates/project/README.md.j2,sha256=tZtMKhyKjfCq5JTECHihISu0VjYd254t-7y2kJ0nbKY,4589
32
34
  vega/cli/templates/project/config.py.j2,sha256=1Iva9JEz5ej_WmTbRVBvOfSBhYUKIzN88p6GYKR0m4s,866
35
+ vega/cli/templates/project/events_init.py.j2,sha256=dp9yc8_Du6lv62vum_Br0p030I4TKZAkZG29mj4AZaM,1057
33
36
  vega/cli/templates/project/main.py.j2,sha256=wpIWNcj0N42KI1crdn0aDISZ6aRt9LjX7FDzJxEE8OM,572
34
37
  vega/cli/templates/project/main_fastapi.py.j2,sha256=5xXB7_OR1-3vkTAkvRvSh3GpL5NWnUEId3bSOOd9qxA,613
35
38
  vega/cli/templates/project/main_standard.py.j2,sha256=j2z6u93_ObiOquzYQM1sZex50Z1cAwHOEG1-0REImRI,617
@@ -62,18 +65,26 @@ vega/di/container.py,sha256=o4cpxCx53wWSNLcrr8Qt9tc7_YiDtHpYvUrdruNVwEc,5467
62
65
  vega/di/decorators.py,sha256=WypsUa9sqojwCCnZ6jXdOob6G6vL4wIx3df_WbUV8Ks,9733
63
66
  vega/di/errors.py,sha256=TITDvwkL05b_O7sygJvTx8aSegUXBgF2EqEhVxRuuGE,148
64
67
  vega/di/scope.py,sha256=1yorvknVwmYGcDpNGsQDgob1jZQ5QoHdibbBH1SLcwQ,4652
65
- vega/discovery/__init__.py,sha256=s1MCuJQnCX1C0_YuAhKLHqhkpCRgeSrtAPfNbuboD20,180
68
+ vega/discovery/__init__.py,sha256=nTq5wapJxg2ZZ2rylp1xY3Phq7OQYjXskIy2Ld8wQSw,251
66
69
  vega/discovery/commands.py,sha256=U1adQJXqBi88c2lkx8gMWzNE1hj8od72QLEKxjNq7gM,3375
70
+ vega/discovery/events.py,sha256=TF8pjYE6gyJJRpOW8Pqvc0Gpu1n1iIHh3UBqzD8kGRI,3051
67
71
  vega/discovery/routes.py,sha256=WiNhNynbKewOrXv7D5fY03I3Oh_yfwEZbkeS8WGyQpU,4347
72
+ vega/events/README.md,sha256=3dp-ZwVxKURIl3FfokzMzVj12wlMImvWaWKx9Y46U7w,13934
73
+ vega/events/SYNTAX_GUIDE.md,sha256=LFnxGOi-IzpOkpW5RERxL-jjMlVmJEIfdXN7_w0DJKY,8577
74
+ vega/events/__init__.py,sha256=yt-0idaDMDfAFiQcRjI-VrDTunKGkYrMV9QFJ244p0Y,800
75
+ vega/events/bus.py,sha256=uALNVeGOyis2ZLCUQn7d87U3UzBO1-0HYO0GErxCmmM,12116
76
+ vega/events/decorators.py,sha256=UF2dQ2GOoXeGuScWBNsePP66ZCIZznJalZVX3i4ome0,5720
77
+ vega/events/event.py,sha256=PfsIl8-6dZR2J1aS7VV9ZQn1CzxvNZOcbP-dil49z9U,4964
78
+ vega/events/middleware.py,sha256=jNltBxeF42-XnC_uVB9OD0BLNRBirudOPeOUYa-fGv8,7862
68
79
  vega/patterns/__init__.py,sha256=UlrgFy8OQkAjgqRLFCOcnTHFKODfZH4FA4_33hq0GgQ,1150
69
- vega/patterns/interactor.py,sha256=QWy20KpWlgL6dav5IgHsfKFNHsTU0igyt4hWQxh_qXc,2366
80
+ vega/patterns/interactor.py,sha256=kRJaFp2eUwHZ-cTQ5y7FoF59yEUo2J9yzL9mo_JbLfI,4030
70
81
  vega/patterns/mediator.py,sha256=n5rqu1ZD0iljbAHct4mRPFPHaKVPWQJF-Ps9egYQ41g,2306
71
82
  vega/patterns/repository.py,sha256=uYUyLs-O8OqW1Wb9ZqIo8UUcCjZ5UFuHors_F2iDg9A,1480
72
83
  vega/patterns/service.py,sha256=buFRgJoeQtZQK22Upb4vh84c1elWKFXWBaB0X4RaruE,1374
73
84
  vega/settings/__init__.py,sha256=Eb8PMUyXAlCAQIcL2W8QhTTUHUbVlkAfXdpTUlADo1I,786
74
85
  vega/settings/base.py,sha256=bL45hyoa3t-hQOvur860eSo7O833sQMsXJJPwbTVbwE,1321
75
- vega_framework-0.1.29.dist-info/METADATA,sha256=j6GYkEGW5ByHxaHOp-882JIN9x_wZEVi6yn2DVvYrpE,12349
76
- vega_framework-0.1.29.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
77
- vega_framework-0.1.29.dist-info/entry_points.txt,sha256=p3gyTmPYjNRLbuiKS-hG3ytWd-ssBweFy6VZ-F9FTNk,42
78
- vega_framework-0.1.29.dist-info/licenses/LICENSE,sha256=wlHh1MBTcs2kSQr99P30mZ61s7uh7Cp9Rk0YiJxots0,1084
79
- vega_framework-0.1.29.dist-info/RECORD,,
86
+ vega_framework-0.1.31.dist-info/METADATA,sha256=dMlyl1DCYbJCpOEG7a8zZzKMs8kZst-xp5vea7EfAbI,11105
87
+ vega_framework-0.1.31.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
88
+ vega_framework-0.1.31.dist-info/entry_points.txt,sha256=p3gyTmPYjNRLbuiKS-hG3ytWd-ssBweFy6VZ-F9FTNk,42
89
+ vega_framework-0.1.31.dist-info/licenses/LICENSE,sha256=wlHh1MBTcs2kSQr99P30mZ61s7uh7Cp9Rk0YiJxots0,1084
90
+ vega_framework-0.1.31.dist-info/RECORD,,