zrb 0.23.2__py3-none-any.whl → 0.23.3__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.
Files changed (19) hide show
  1. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/README.md +84 -8
  2. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+layout.svelte +1 -1
  3. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/vite.config.ts +7 -1
  4. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/__init__.py +0 -0
  5. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/{app.py → app/app.py} +2 -1
  6. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/{app_lifespan.py → app/app_lifespan.py} +1 -1
  7. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/main.py +1 -3
  8. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +1 -1
  9. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py +1 -1
  10. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +1 -1
  11. zrb/task/base_remote_cmd_task.py +5 -1
  12. zrb/task/cmd_task.py +11 -3
  13. zrb/task/docker_compose_task.py +3 -1
  14. {zrb-0.23.2.dist-info → zrb-0.23.3.dist-info}/METADATA +2 -2
  15. {zrb-0.23.2.dist-info → zrb-0.23.3.dist-info}/RECORD +19 -18
  16. /zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/{app_state.py → app/app_state.py} +0 -0
  17. {zrb-0.23.2.dist-info → zrb-0.23.3.dist-info}/LICENSE +0 -0
  18. {zrb-0.23.2.dist-info → zrb-0.23.3.dist-info}/WHEEL +0 -0
  19. {zrb-0.23.2.dist-info → zrb-0.23.3.dist-info}/entry_points.txt +0 -0
@@ -132,12 +132,81 @@ If you want to run PascalZrbAppName on containers, you will also need `Docker` w
132
132
 
133
133
  You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kubernetes cluster.
134
134
 
135
+ # High Level Architecture
136
+
137
+ PascalZrbAppName heavily uses dependency inversion and avoids dependency injection on the same time.
138
+
139
+ This architecture aims to let the developers define and choose new implementations without breaking any existing part.
140
+
141
+ To achieve this, we use two elements:
142
+
143
+ - __Component__: Containing interface and implementation
144
+ - __Integration__: Instantiation of the components. Here is where you choose which component implementation to use and how we tailor the implementations.
145
+
146
+ Let's see the following example.
147
+
148
+ ```
149
+ ┌────────────────────────────────────────────┐
150
+ │ Component │
151
+ │ ┌───────────────┐ ┌────────────────┐ │
152
+ │ │ Messagebus │ │ RPC Caller │ │
153
+ │ │ ┌────────┐ │ │ ┌──────────┐ │ │
154
+ │ │ │Kafka │ ├─────┼──►│Messagebus├─┼─┼────┐
155
+ │ │ └────────┘ │ │ └──────────┘ │ │ │
156
+ │ │ ┌────────┐ │ │ ┌──────────┐ │ │ │
157
+ ┌──┼───┼───┤Rabbitmq│ │ │ │Grpc │ │ │ │
158
+ │ │ │ └────────┘ │ │ └──────────┘ │ │ │
159
+ │ │ │ ┌────────┐ │ └────────────────┘ │ │
160
+ │ │ │ │Other │ ├──┐ │ │
161
+ │ │ │ └────────┘ │ │ ┌────────────────┐ │ │
162
+ │ │ └───────────────┘ │ │ RPC Server │ │ │
163
+ │ │ │ │ ┌──────────┐ │ │ │
164
+ │ │ └──┼──►│Messagebus├─┼─┼─┐ │
165
+ │ │ │ └──────────┘ │ │ │ │
166
+ │ │ │ ┌──────────┐ │ │ │ │
167
+ │ │ │ │Grpc │ │ │ │ │
168
+ │ │ │ └──────────┘ │ │ │ │
169
+ │ │ └────────────────┘ │ │ │
170
+ │ └────────────────────────────────────────────┘ │ │
171
+ │ │ │
172
+ │ ┌────────────────────────────────────────────┐ │ │
173
+ │ │ Integration │ │ │
174
+ │ │ ┌──────────┐ │ │ │
175
+ └──┼─►│Messagebus├───────┬──────────────┐ │ │ │
176
+ │ └──────────┘ │ │ │ │ │
177
+ │ ┌────▼─────┐ ┌─────▼────┐ │ │ │
178
+ │ │RPC Caller│ │RPC Server│◄─┼─┘ │
179
+ │ └────▲─────┘ └──────────┘ │ │
180
+ └─────────────────────┼──────────────────────┘ │
181
+ └───────────────────────────┘
182
+ ```
183
+
184
+ __Components__
185
+
186
+ In the example, there are three component interfaces:
187
+ - `Messagebus`
188
+ - `RPC Caller`
189
+ - `RPC Server`
190
+
191
+ Each interface has several implementations, for example there are two implementation of `RPC Caller`:
192
+ - `RPCCaller.Messagebus`: RPC Caller implementation that need `Messagebus`.
193
+ - `RPCCaller.Grpc`: RPC Caller through GRPC, doesn't need any other component.
194
+
195
+ __Integration__
196
+
197
+ As for integration, we need to choose particular component implementations.
198
+
199
+ - `Messagebus`: For Messagebus, we choose `Messagebus.Rabbitmq` component.
200
+ - `RPC Caller`: For RPC Caller, we choose `RPCCaller.Messasgebus`. This implementation need a `Messagebus` interface.
201
+ - `RPC Server`: For RPC Server, we choose `RPCServer.Messasgebus`. This implementation need a `Messagebus` interface.
202
+
203
+
135
204
  # Directory Structure
136
205
 
137
206
  - `docker-compose.yml`: A multi-profile docker-compose file. This helps you to run your application as a monolith/microservices.
138
207
  - `all-module-disabled.env`: Feature flags to be used when you deactivate all modules.
139
208
  - `all-module-enabled.env`: Feature flags to be used when you activate all modules.
140
- - `deployment/`: Deployment directory. By default, we put deployment along with the source code to make it easier to maintain/manage. You can later move your deployments to another repository if you think you need to.
209
+ - `deployment/`: Deployment directory. By default, we put deployment along with the source code to make it easier to maintain/manage. You can later move your deployments to another repository if you need to do so.
141
210
  - `/helm-charts`: Helm charts for Rabbitmq, Redpanda, and Postgre.
142
211
  - `__main__.py`: Main Pulumi script.
143
212
  - `template.env`: Default configuration for deployment
@@ -187,12 +256,19 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
187
256
 
188
257
  # Decisions and Constraints
189
258
 
259
+ ## Dependency Inversion without Dependency Injection
260
+
261
+ We tend to avoid magical dependency inversion unless necessary. We want PascalZrbEntityName to be as explicit as possible. We do this by providing two elements:
262
+
263
+ - Component: Containing all interfaces and implementations
264
+ - Integration: Instantiation of components. This is where we choose and tailor the component's implementation.
265
+
190
266
  ## Frontend
191
- - PascalZrbAppName's Frontend is served as static files and is built before runtime (not SSR/Server Side Rendering). That's mean.
267
+ PascalZrbAppName's front end serves static files built before runtime (not SSR/Server Side Rendering). That's mean.
192
268
  - The SEO is probably not good.
193
269
  - The page load is sensibly good.
194
270
  - We use Svelte for Frontend because it is easier to read/learn compared to React, Vue, or Angular.
195
- - At the moment, the frontend use:
271
+ - At the moment, the front end use:
196
272
  - Sveltekit
197
273
  - TailwindCSS
198
274
  - DaisyUI
@@ -203,7 +279,7 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
203
279
  - Database connection
204
280
  - Database migration
205
281
  - Data manipulation
206
- - To create a custom database implementation, you need to create an implementation that complies with `core.repo.Repo`.
282
+ - To create a custom database implementation, you must create one that complies with `core.repo.Repo`.
207
283
 
208
284
  ## Messaging
209
285
 
@@ -215,11 +291,11 @@ You will also need `Pulumi` if you want to deploy PascalZrbAppName into your Kub
215
291
  - No messaging platform, a.k.a: in memory. This will only work properly if you run PascalZrbAppName as a monolith.
216
292
  - `APP_BROKER_TYPE=mock`
217
293
  - To create custom event handlers, you need to implement two interfaces:
218
- - `core.messagebus.Publisher`
219
- - `core.messagebus.Server`
294
+ - `component.messagebus.Publisher`
295
+ - `component.messagebus.Server`
220
296
 
221
297
  ## RPC
222
298
 
223
299
  - Currently, RPC implementation depends on the messaging platforms. It is possible to override this behavior by creating you custom implementation. There are two interfaces you need to override:
224
- - `core.rpc.Caller`
225
- - `core.rpc.Server`
300
+ - `component.rpc.Caller`
301
+ - `component.rpc.Server`
@@ -3,7 +3,7 @@
3
3
  import Navigation from '$lib/components/navigation/Navigation.svelte';
4
4
  import { navData } from '$lib/config/navData';
5
5
  import { getBrand, getTitle } from '$lib/config/app';
6
- import logo from '/static/logo.png';
6
+ import logo from '@static/logo.png';
7
7
  import "../app.css";
8
8
 
9
9
  let appBrand = '';
@@ -1,9 +1,15 @@
1
1
  import { sveltekit } from '@sveltejs/kit/vite';
2
2
  import { defineConfig } from 'vitest/config';
3
+ import path from 'path';
3
4
 
4
5
  export default defineConfig({
5
6
  plugins: [sveltekit()],
6
7
  test: {
7
8
  include: ['src/**/*.{test,spec}.{js,ts}']
8
- }
9
+ },
10
+ resolve: {
11
+ alias: {
12
+ '@static': path.resolve(__dirname, 'static'),
13
+ },
14
+ },
9
15
  });
@@ -16,7 +16,8 @@ from config import (
16
16
  from fastapi import FastAPI, status
17
17
  from fastapi.middleware.cors import CORSMiddleware
18
18
  from fastapi.responses import JSONResponse
19
- from integration.app_lifespan import app_lifespan, app_state
19
+ from integration.app.app_lifespan import app_lifespan
20
+ from integration.app.app_state import app_state
20
21
  from integration.frontend_index import frontend_index_response
21
22
  from schema.frontend_config import FrontendConfig
22
23
 
@@ -12,7 +12,7 @@ from config import (
12
12
  from fastapi import FastAPI
13
13
  from fastapi.staticfiles import StaticFiles
14
14
  from helper.async_task import create_task
15
- from integration.app_state import app_state, set_not_ready_on_error
15
+ from integration.app.app_state import app_state, set_not_ready_on_error
16
16
  from integration.log import logger
17
17
  from integration.messagebus import consumer
18
18
  from integration.rpc import rpc_server
@@ -1,9 +1,7 @@
1
- from integration.app import app
1
+ from integration.app.app import app
2
2
  from module.auth.register_module import register_auth
3
3
  from module.log.register_module import register_log
4
4
 
5
- # Make sure app is loaded.
6
- # Uvicorn or adny ASGII server you use will pick it up and run the app.
7
5
  assert app
8
6
  register_auth()
9
7
  register_log()
@@ -4,7 +4,7 @@ from config import (
4
4
  app_enable_event_handler,
5
5
  app_enable_rpc_server,
6
6
  )
7
- from integration.app import app
7
+ from integration.app.app import app
8
8
  from integration.log import logger
9
9
  from integration.messagebus import consumer, publisher
10
10
  from integration.rpc import rpc_caller, rpc_server
@@ -4,7 +4,7 @@ from config import (
4
4
  app_enable_log_module,
5
5
  app_enable_rpc_server,
6
6
  )
7
- from integration.app import app
7
+ from integration.app.app import app
8
8
  from integration.log import logger
9
9
  from integration.messagebus import consumer, publisher
10
10
  from integration.rpc import rpc_caller, rpc_server
@@ -4,7 +4,7 @@ from config import (
4
4
  app_enable_rpc_server,
5
5
  app_enable_snake_zrb_module_name_module,
6
6
  )
7
- from integration.app import app
7
+ from integration.app.app import app
8
8
  from integration.log import logger
9
9
  from integration.messagebus import consumer, publisher
10
10
  from integration.rpc import rpc_caller, rpc_server
@@ -82,6 +82,7 @@ class SingleBaseRemoteCmdTask(CmdTask):
82
82
  post_cmd: CmdVal = "",
83
83
  post_cmd_path: CmdVal = "",
84
84
  cwd: Optional[Union[str, pathlib.Path]] = None,
85
+ should_render_cwd: bool = True,
85
86
  upstreams: Iterable[AnyTask] = [],
86
87
  fallbacks: Iterable[AnyTask] = [],
87
88
  on_triggered: Optional[OnTriggered] = None,
@@ -118,6 +119,7 @@ class SingleBaseRemoteCmdTask(CmdTask):
118
119
  cmd=cmd,
119
120
  cmd_path=cmd_path,
120
121
  cwd=cwd,
122
+ should_render_cwd=should_render_cwd,
121
123
  upstreams=upstreams,
122
124
  fallbacks=fallbacks,
123
125
  on_triggered=on_triggered,
@@ -226,7 +228,8 @@ class BaseRemoteCmdTask(BaseTask):
226
228
  cmd_path: CmdVal = "",
227
229
  post_cmd: CmdVal = "",
228
230
  post_cmd_path: CmdVal = "",
229
- cwd: Optional[Union[str, pathlib.Path]] = None,
231
+ cwd: Optional[Union[JinjaTemplate, pathlib.Path]] = None,
232
+ should_render_cwd: bool = True,
230
233
  upstreams: Iterable[AnyTask] = [],
231
234
  fallbacks: Iterable[AnyTask] = [],
232
235
  on_triggered: Optional[OnTriggered] = None,
@@ -266,6 +269,7 @@ class BaseRemoteCmdTask(BaseTask):
266
269
  post_cmd=post_cmd,
267
270
  post_cmd_path=post_cmd_path,
268
271
  cwd=cwd,
272
+ should_render_cwd=should_render_cwd,
269
273
  upstreams=upstreams,
270
274
  fallbacks=fallbacks,
271
275
  on_triggered=on_triggered,
zrb/task/cmd_task.py CHANGED
@@ -127,7 +127,8 @@ class CmdTask(BaseTask):
127
127
  executable: Optional[str] = None,
128
128
  cmd: CmdVal = "",
129
129
  cmd_path: CmdVal = "",
130
- cwd: Optional[Union[str, pathlib.Path]] = None,
130
+ cwd: Optional[Union[JinjaTemplate, pathlib.Path]] = None,
131
+ should_render_cwd: bool = True,
131
132
  upstreams: Iterable[AnyTask] = [],
132
133
  fallbacks: Iterable[AnyTask] = [],
133
134
  on_triggered: Optional[OnTriggered] = None,
@@ -181,6 +182,7 @@ class CmdTask(BaseTask):
181
182
  self._cmd = cmd
182
183
  self._cmd_path = cmd_path
183
184
  self.__set_cwd(cwd)
185
+ self._should_render_cwd = should_render_cwd
184
186
  self._max_output_size = max_output_line
185
187
  self._max_error_size = max_error_line
186
188
  self._output_buffer: Iterable[str] = []
@@ -233,13 +235,14 @@ class CmdTask(BaseTask):
233
235
  cmd = self.get_cmd_script(*args, **kwargs)
234
236
  if self._should_show_cmd:
235
237
  self.print_out_dark("Run script: " + self.__get_multiline_repr(cmd))
238
+ cwd = self._get_cwd()
236
239
  if self._should_show_working_directory:
237
- self.print_out_dark("Working directory: " + self._cwd)
240
+ self.print_out_dark("Working directory: " + cwd)
238
241
  self._output_buffer = []
239
242
  self._error_buffer = []
240
243
  process = await asyncio.create_subprocess_shell(
241
244
  cmd,
242
- cwd=self._cwd,
245
+ cwd=cwd,
243
246
  stdout=asyncio.subprocess.PIPE,
244
247
  stderr=asyncio.subprocess.PIPE,
245
248
  env=self.get_env_map(),
@@ -272,6 +275,11 @@ class CmdTask(BaseTask):
272
275
  self.set_task_xcom(key="error", value=error)
273
276
  return CmdResult(output, error)
274
277
 
278
+ def _get_cwd(self) -> Union[str, pathlib.Path]:
279
+ if self._should_render_cwd and isinstance(self._cwd, str):
280
+ return self.render_str(self._cwd)
281
+ return self._cwd
282
+
275
283
  def _should_attempt(self) -> bool:
276
284
  if self._global_state.no_more_attempt:
277
285
  return False
@@ -104,7 +104,8 @@ class DockerComposeTask(CmdTask):
104
104
  compose_env_prefix: str = "",
105
105
  setup_cmd: CmdVal = "",
106
106
  setup_cmd_path: CmdVal = "",
107
- cwd: Optional[Union[str, pathlib.Path]] = None,
107
+ cwd: Optional[Union[JinjaTemplate, pathlib.Path]] = None,
108
+ should_render_cwd: bool = True,
108
109
  upstreams: Iterable[AnyTask] = [],
109
110
  fallbacks: Iterable[AnyTask] = [],
110
111
  on_triggered: Optional[OnTriggered] = None,
@@ -140,6 +141,7 @@ class DockerComposeTask(CmdTask):
140
141
  description=description,
141
142
  executable=executable,
142
143
  cwd=cwd,
144
+ should_render_cwd=should_render_cwd,
143
145
  upstreams=[ensure_zrb_network_task] + upstreams,
144
146
  fallbacks=fallbacks,
145
147
  on_triggered=on_triggered,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 0.23.2
3
+ Version: 0.23.3
4
4
  Summary: A Framework to Enhance Your Workflow
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -63,7 +63,7 @@ pip install zrb
63
63
  Alternatively, you can also use our installation script to install Zrb along with some prerequisites:
64
64
 
65
65
  ```bash
66
- source <(curl -s https://raw.githubusercontent.com/state-alchemists/zrb/main/install.sh)
66
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/state-alchemists/zrb/main/install.sh)"
67
67
  ```
68
68
 
69
69
  Check our [installation guide](https://github.com/state-alchemists/zrb/blob/main/docs/installation.md) for more information about the installation methods, including installation as a docker container.
@@ -270,7 +270,7 @@ zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/monoli
270
270
  zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/test.py,sha256=RuZGmP2OTPZcDOuBX5p-j5TizakkDxEClWhB2Fg64M4,1826
271
271
  zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/test.sh,sha256=ibnoS4kV1p-3JREJKlX2UsziP009zHzP9miPxID1tpk,308
272
272
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.gitignore,sha256=YFrq8n_0yn9FT0XqcPVftHmKj31DSh4ftIY8EvQm0ik,53
273
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/README.md,sha256=aFW2zzZMt7wnpBT_vD0cAkPODH2PU7GM4bq8Y38hFQw,10024
273
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/README.md,sha256=mIE-CBlKzx_wEQdGIuiJbzDX_bCC13ckMnOYU8erHpI,15200
274
274
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/all-module-disabled.env,sha256=eIbYiufwRJ-artnA7Cw2y4YzGrPw2XtEb-ih_f4tCuw,56
275
275
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/all-module-enabled.env,sha256=gu-tRFyAuSNRZAsxKTvf4ILnI0jH3bLkMhq0YU_tiyc,54
276
276
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/.gitignore,sha256=zF-r8EJ_RaTVRxFpy1mapsxVQV6UAnNcK9q57ynRfig,12
@@ -1004,7 +1004,7 @@ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend
1004
1004
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/lib/error/helper.ts,sha256=FCTH3-UC7AzlmG2QhuMX7-9ztprj3ne6LQ4neYl8xyM,350
1005
1005
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+error.svelte,sha256=xG4MQsDZos8yOtL5uXfhgPN5CKCbzVS11Hw9gY8Qj1Q,291
1006
1006
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+layout.js,sha256=IepBDK8VpfSwS_akOn9eRqRlv8erCF4VtsBXWvBUlH4,65
1007
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+layout.svelte,sha256=aDbWrCUJzf5QuPkGmae6iVwwa163sADsc8Nt_pYtmP4,584
1007
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+layout.svelte,sha256=WS3RLg3zc2_DxILj4LFhVtvDpIjRIYlvJaddEEt8NY4,584
1008
1008
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/+page.svelte,sha256=KVlODA_W9yHLBcdDSrMyyWl-j6izvt3Au0X2IYZ9bSs,489
1009
1009
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/auth/group/+page.svelte,sha256=smFqwX1tjaQLiyziJP8RjWicDFmk696MYkt1IjKzYFU,6285
1010
1010
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/src/routes/auth/group/delete/[id]/+page.svelte,sha256=kxMaJ9nCxUf3fZ93Z5nx2ehOo-vZhtL-NhSG26AeEPE,3763
@@ -1039,22 +1039,23 @@ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend
1039
1039
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/tailwind.config.js,sha256=qj1dclGOmSgT8IBeBhclrKUY2Z_B5P6OSNSoX1lX_mw,203
1040
1040
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/tests/test.ts,sha256=Zn47gMooUsmXRYTuDvtVajL07cEwPMhL5pOXeolSnEg,224
1041
1041
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/tsconfig.json,sha256=sj7XMYCe4CrB-z91IlhC6-n6PHzM1khXzsAQcWmGR3c,532
1042
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/vite.config.ts,sha256=JPM2I54wRSHcwcu527UHgSr9FtUUAWDC-AJerbrzgpI,210
1042
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/vite.config.ts,sha256=lxK3jXIMlMB9vjXRENS6Xz6JmUm8bTVpdIEQAvOvWQs,317
1043
1043
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1044
1044
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py,sha256=n3-UFRQKZRc0UbEBm7tibFrwH-Jasg0xZQKXtA6LzBk,490
1045
1045
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/conversion.py,sha256=NnEF-Wtt7k4rc45KZRM4jY64B2GEk3v3X3nw058Urw8,763
1046
1046
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/migration.py,sha256=LFGwMKRRc9ZzSPNG_pTRewZAzTbOAwdBvFTluzyU_mQ,1858
1047
1047
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/value.py,sha256=YFqIswCCd3hbxYeo907UuY6l76OwJMimThYj8MjXE_I,103
1048
1048
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1049
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app.py,sha256=OWoYkdBfmtJuCMAoS4LTiT3Z7HixEjlJx9Q6EjqA0Vo,3177
1050
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app_lifespan.py,sha256=mYjDwHEkqugU0xJQvi3OLvPav486svTogroSzr0t3Z0,1389
1051
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app_state.py,sha256=7WJYWXaagK6_SxxuIFtQfhxJZsLFDUcYXFw3s0spNbs,870
1049
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1050
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app.py,sha256=yRBTYxJkc2f4Q3tb0kZQz_x1dgwScdA1F2uvHbk3f44,3218
1051
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_lifespan.py,sha256=E5ng4FJj9Ccbp5cNM-mkbEA-s8ZYjsBhOr2u9f10aO4,1393
1052
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_state.py,sha256=7WJYWXaagK6_SxxuIFtQfhxJZsLFDUcYXFw3s0spNbs,870
1052
1053
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/db_connection.py,sha256=QxBl1qPX4Fb0t6oQJBmpD1tHGe8EYSu_XeDKDHVNPuo,1062
1053
1054
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/frontend_index.py,sha256=3mYLOH8Uuv_HshgnOK2QB2PeupV1K8DJKbv2UfTOdug,322
1054
1055
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/log.py,sha256=q4dVN43mu0u7u_1bhNwh1YXSR3VX1ZJmZ5tXRc0PZqQ,1838
1055
1056
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/messagebus.py,sha256=qSyO7yMuFVAG7kkQ4ZeY53YZ1ReEoDaZ-3CcdlU7tt8,3460
1056
1057
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/rpc.py,sha256=ZTJip0Z0Xt6V9WOXm53uQIwA63c87yhr6FdGvqkTBGc,1410
1057
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/main.py,sha256=SKGDZV2szawzVOhr9Dhm-Bi_doPuQjarODXMoa9RSIk,280
1058
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/main.py,sha256=aduwm41KZ1RyxXrY5yi1YyhaGlBlBKjC7ObXeAIA5tA,185
1058
1059
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/migrate.py,sha256=M_y2Namnz1WphNEwzSMEzeT6Mf6xG3xCifPfj8oqyQc,232
1059
1060
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1060
1061
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1105,7 +1106,7 @@ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/a
1105
1106
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/repo/user_repo.py,sha256=u_YWFpich41mGbPd2EiSNE7v2strIzTFhox9nfC2JkE,313
1106
1107
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/user.py,sha256=F0PO4QUvZbLRQUiccM1GSgnkqnWdNpY03z4kT1zF8vk,805
1107
1108
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/migrate.py,sha256=iNRsDJZHdzmyYEQ0mPsV-yCbNRX8SOk6WbGRucge7pI,576
1108
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py,sha256=sy1aWm_MAUOOMLcRUO4NcxO6S6GCiMMvrnFdoAXlLho,1154
1109
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py,sha256=dyzUT0TQDIH3o6I4JboaQ5OQF5isfM1tyMOxAbsXgVQ,1158
1109
1110
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py,sha256=HgxYbVxXGqiMpmBgwcR8RCeKIzRI7X5GfVrLWc4aZXM,1322
1110
1111
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/rpc.py,sha256=Jy-XBBsxAx6rHvz0a9CohQBQs2YF9LkNAIlVzCR6FrQ,711
1111
1112
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1133,7 +1134,7 @@ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/l
1133
1134
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/integration/repo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1134
1135
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/integration/repo/activity_repo.py,sha256=5arwuyOVrmWs2pNjlpyyKcBpSOOinWIhEZZQBkjTJo0,229
1135
1136
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/migrate.py,sha256=0TYLh8WFaaDtBJIyQltw-Qc4ZI-YlgsOEcPQrwaFK8g,429
1136
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py,sha256=EMc0fM0rJUfdd87ol1jiVun6_xGqWBbK8aHyc0aC0hs,1147
1137
+ zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py,sha256=cditSUV7duNrXRozHJnTpcoQnj6EmeQNZSabzG7PEBg,1151
1137
1138
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/rpc.py,sha256=Q1ClGIxzRij8oHrWKDtkb0fC_BeqCjKBi1xP962MGEc,445
1138
1139
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1139
1140
  zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py,sha256=1Wqitx-6-UjXeFhscrbIystLm-XY2FqbUkxwbJ3sgxA,338
@@ -1198,7 +1199,7 @@ zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/modul
1198
1199
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/integration/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1199
1200
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/integration/repo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1200
1201
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py,sha256=6gJK8aRNBs52IGdSv93-LcIg2O_03AQSCUJ6PIpNjpg,537
1201
- zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py,sha256=7DqLVNT1B_RpvZjcIUWE8D9p9NBVAouI2PT0-IaaDI0,1273
1202
+ zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py,sha256=_fBdv1aBLKPTk3rNBVUSlVVtx39EnMFLCvkJU6Zy7LU,1277
1202
1203
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py,sha256=bj2GMybNAkpauhJJhzG2evkHzckBz-cp600EVLFKBpg,313
1203
1204
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1204
1205
  zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1358,7 +1359,7 @@ zrb/shell-scripts/ssh-util.sh,sha256=9lXDzw6oO8HuA4vdbfps_uQMMwKyNYX9fZkZgpK52g8
1358
1359
  zrb/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1359
1360
  zrb/task/any_task.py,sha256=nKcCj_RbSC-MUSi4rxcIAC2eEFo7uKwODkgglxp3mj8,39346
1360
1361
  zrb/task/any_task_event_handler.py,sha256=AjTC6lIcprutRusNBGl83EifQe4TbZzxdlVIR4ndWN4,524
1361
- zrb/task/base_remote_cmd_task.py,sha256=q2Kwo5OMahL5gPSxwp_9zZLYouFfFc6Ru_p6ApOI-pk,12124
1362
+ zrb/task/base_remote_cmd_task.py,sha256=SO26Hu3l_chP03XfPF6b0PN3SVyklwSDYf0n5QOXrYA,12316
1362
1363
  zrb/task/base_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1363
1364
  zrb/task/base_task/base_task.py,sha256=rPWMIBNnNtwn0q3VEUDw3HfbSPWtww_lyOA3rUh5aq0,20310
1364
1365
  zrb/task/base_task/component/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1368,9 +1369,9 @@ zrb/task/base_task/component/pid_model.py,sha256=RjJIqOpavucDssnd3q3gT4q8QnP8I9S
1368
1369
  zrb/task/base_task/component/renderer.py,sha256=9wP2IW811Ta81IoPWmeQ7yVc7eG-uaSnOVbEyeaOIuk,4439
1369
1370
  zrb/task/base_task/component/trackers.py,sha256=c5xhZ6agICxKPI5Va1sn66_9OqC92ebF5CNhcwVUNUE,2074
1370
1371
  zrb/task/checker.py,sha256=raYNBHgeyEqkyfBRsPPgSV7ukEfMlJOCUn97WQNl6mU,3384
1371
- zrb/task/cmd_task.py,sha256=z20xSsFTjnMToTgORzToKRn8_AwubLC0Sm6b-3z58_c,14526
1372
+ zrb/task/cmd_task.py,sha256=Q9PwVfltBDm2POdbgdxHp7QDrZCwfnINUFrM3b7QCzk,14837
1372
1373
  zrb/task/decorator.py,sha256=stxrl6aXbuUDK83lVf8m8uni3Ii6egLl0TCR0vxslUQ,3064
1373
- zrb/task/docker_compose_task.py,sha256=hUKF7W3GwxFuEWmlPPFxa7h8npEnig2sm7KjlidHFBI,14911
1374
+ zrb/task/docker_compose_task.py,sha256=F5DRAh0p-K2Bsjavf3SxvQphOs_48AF440XVeRIU9Ko,15010
1374
1375
  zrb/task/flow_task.py,sha256=QBOoyIrqc6ToSf3RF8xu8h4yxCWCerUAu2Ba0GxAqgg,5147
1375
1376
  zrb/task/http_checker.py,sha256=y0cWa2t4YtGQr6FWno5sZ6Ej9gQiLDF-Z1kLU1rijRw,5693
1376
1377
  zrb/task/looper.py,sha256=0eM3wEIC_RbThg60MRbK4Az16vt81O5p12cORAYTfnI,1430
@@ -1405,8 +1406,8 @@ zrb/task_input/multiline_input.py,sha256=kP2VQ4c42-d6P4RB3AA2eGTrFRLwvFlZxc7vGwj
1405
1406
  zrb/task_input/password_input.py,sha256=3xxWHKJCDGbyl_5MmyyB2t_yRjwFKpIIbS10aq73ktk,4370
1406
1407
  zrb/task_input/str_input.py,sha256=0BJP3SQ8y0TRYPrwEy5pYv4N7jq8KlmRSVwByIFqIvI,4360
1407
1408
  zrb/task_input/task_input.py,sha256=WTj_qIQyRs-04-VotjNTcVyIuf6b2afInVoCQHoRmr0,2327
1408
- zrb-0.23.2.dist-info/LICENSE,sha256=WfnGCl8G60EYOPAEkuc8C9m9pdXWDe08NsKj3TBbxsM,728
1409
- zrb-0.23.2.dist-info/METADATA,sha256=LuliAhkw8fHOUTE86WE_cLasUzVJhWKMV-aIaxrjYlc,17076
1410
- zrb-0.23.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
1411
- zrb-0.23.2.dist-info/entry_points.txt,sha256=xTgXc1kBKYhJHEujdaSPHUcJT3-hbyP1mLgwkv-5sSk,40
1412
- zrb-0.23.2.dist-info/RECORD,,
1409
+ zrb-0.23.3.dist-info/LICENSE,sha256=WfnGCl8G60EYOPAEkuc8C9m9pdXWDe08NsKj3TBbxsM,728
1410
+ zrb-0.23.3.dist-info/METADATA,sha256=eM9iGAL45HyOcyCDum97BFsMFAQ8NeZi_Y89jL8HFfI,17082
1411
+ zrb-0.23.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
1412
+ zrb-0.23.3.dist-info/entry_points.txt,sha256=xTgXc1kBKYhJHEujdaSPHUcJT3-hbyP1mLgwkv-5sSk,40
1413
+ zrb-0.23.3.dist-info/RECORD,,
File without changes
File without changes