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.
- vega/cli/commands/generate.py +114 -0
- vega/cli/commands/init.py +6 -0
- vega/cli/main.py +18 -1
- vega/cli/templates/__init__.py +6 -0
- vega/cli/templates/components.py +34 -0
- vega/cli/templates/domain/event.py.j2 +23 -0
- vega/cli/templates/domain/event_handler.py.j2 +22 -0
- vega/cli/templates/domain/repository_interface.py.j2 +1 -1
- vega/cli/templates/project/events_init.py.j2 +32 -0
- vega/discovery/__init__.py +2 -1
- vega/discovery/events.py +86 -0
- vega/events/README.md +564 -0
- vega/events/SYNTAX_GUIDE.md +360 -0
- vega/events/__init__.py +30 -0
- vega/events/bus.py +382 -0
- vega/events/decorators.py +181 -0
- vega/events/event.py +156 -0
- vega/events/middleware.py +259 -0
- vega/patterns/interactor.py +47 -1
- vega_framework-0.1.31.dist-info/METADATA +349 -0
- {vega_framework-0.1.29.dist-info → vega_framework-0.1.31.dist-info}/RECORD +24 -13
- vega_framework-0.1.29.dist-info/METADATA +0 -485
- {vega_framework-0.1.29.dist-info → vega_framework-0.1.31.dist-info}/WHEEL +0 -0
- {vega_framework-0.1.29.dist-info → vega_framework-0.1.31.dist-info}/entry_points.txt +0 -0
- {vega_framework-0.1.29.dist-info → vega_framework-0.1.31.dist-info}/licenses/LICENSE +0 -0
@@ -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=
|
6
|
-
vega/cli/commands/init.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
76
|
-
vega_framework-0.1.
|
77
|
-
vega_framework-0.1.
|
78
|
-
vega_framework-0.1.
|
79
|
-
vega_framework-0.1.
|
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,,
|