stoobly-agent 1.9.8__py3-none-any.whl → 1.9.10__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.
- stoobly_agent/__init__.py +1 -1
- stoobly_agent/app/cli/scaffold/app.py +6 -0
- stoobly_agent/app/cli/scaffold/app_config.py +2 -14
- stoobly_agent/app/cli/scaffold/app_create_command.py +0 -7
- stoobly_agent/app/cli/scaffold/constants.py +4 -2
- stoobly_agent/app/cli/scaffold/docker/service/builder.py +7 -3
- stoobly_agent/app/cli/scaffold/service_config.py +3 -2
- stoobly_agent/app/cli/scaffold/service_workflow_validate_command.py +3 -2
- stoobly_agent/app/cli/scaffold/templates/app/.Makefile +8 -8
- stoobly_agent/app/cli/scaffold/workflow_run_command.py +3 -21
- stoobly_agent/app/cli/scaffold_cli.py +7 -12
- stoobly_agent/app/cli/types/workflow_run_command.py +18 -0
- stoobly_agent/app/cli/validators/scaffold.py +9 -0
- {stoobly_agent-1.9.8.dist-info → stoobly_agent-1.9.10.dist-info}/METADATA +1 -1
- {stoobly_agent-1.9.8.dist-info → stoobly_agent-1.9.10.dist-info}/RECORD +18 -17
- {stoobly_agent-1.9.8.dist-info → stoobly_agent-1.9.10.dist-info}/LICENSE +0 -0
- {stoobly_agent-1.9.8.dist-info → stoobly_agent-1.9.10.dist-info}/WHEEL +0 -0
- {stoobly_agent-1.9.8.dist-info → stoobly_agent-1.9.10.dist-info}/entry_points.txt +0 -0
stoobly_agent/__init__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
COMMAND = 'stoobly-agent'
|
2
|
-
VERSION = '1.9.
|
2
|
+
VERSION = '1.9.10'
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import hashlib
|
1
2
|
import os
|
2
3
|
import shutil
|
3
4
|
|
@@ -73,6 +74,11 @@ class App():
|
|
73
74
|
def data_dir_path(self):
|
74
75
|
return self.__data_dir_path
|
75
76
|
|
77
|
+
@property
|
78
|
+
def network(self):
|
79
|
+
# An app may contain one or more context dirs from which services will derive their mocks from
|
80
|
+
return hashlib.md5(self.context_dir_path.encode()).hexdigest()
|
81
|
+
|
76
82
|
@property
|
77
83
|
def scaffold_namespace_path(self):
|
78
84
|
return os.path.join(self.data_dir_path, self.scaffold_namespace)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from .config import Config
|
2
|
-
from .constants import APP_NAME_ENV,
|
2
|
+
from .constants import APP_NAME_ENV, APP_UI_PORT_ENV
|
3
3
|
|
4
4
|
class AppConfig(Config):
|
5
5
|
|
@@ -7,7 +7,7 @@ class AppConfig(Config):
|
|
7
7
|
super().__init__(dir)
|
8
8
|
|
9
9
|
self.__name = None
|
10
|
-
self.
|
10
|
+
self.__ui_port = None
|
11
11
|
|
12
12
|
self.load()
|
13
13
|
|
@@ -19,14 +19,6 @@ class AppConfig(Config):
|
|
19
19
|
def name(self, v):
|
20
20
|
self.__name = v
|
21
21
|
|
22
|
-
@property
|
23
|
-
def network(self):
|
24
|
-
return self.__network
|
25
|
-
|
26
|
-
@network.setter
|
27
|
-
def network(self, v):
|
28
|
-
self.__network = v
|
29
|
-
|
30
22
|
@property
|
31
23
|
def ui_port(self):
|
32
24
|
return self.__ui_port
|
@@ -39,7 +31,6 @@ class AppConfig(Config):
|
|
39
31
|
config = config or self.read()
|
40
32
|
|
41
33
|
self.name = config.get(APP_NAME_ENV)
|
42
|
-
self.network = config.get(APP_NETWORK_ENV)
|
43
34
|
self.ui_port = config.get(APP_UI_PORT_ENV)
|
44
35
|
|
45
36
|
def write(self):
|
@@ -48,9 +39,6 @@ class AppConfig(Config):
|
|
48
39
|
if self.name:
|
49
40
|
config[APP_NAME_ENV] = self.name
|
50
41
|
|
51
|
-
if self.network:
|
52
|
-
config[APP_NETWORK_ENV] = self.network
|
53
|
-
|
54
42
|
if self.ui_port:
|
55
43
|
config[APP_UI_PORT_ENV] = self.ui_port
|
56
44
|
|
@@ -19,9 +19,6 @@ class AppCreateCommand(AppCommand):
|
|
19
19
|
if kwargs.get('app_name'):
|
20
20
|
self.app_config.name = kwargs['app_name']
|
21
21
|
|
22
|
-
if kwargs.get('network'):
|
23
|
-
self.app_config.network = kwargs['network']
|
24
|
-
|
25
22
|
if kwargs.get('ui_port'):
|
26
23
|
self.app_config.ui_port = kwargs['ui_port']
|
27
24
|
|
@@ -29,10 +26,6 @@ class AppCreateCommand(AppCommand):
|
|
29
26
|
def app_name(self):
|
30
27
|
return self.app_config.name
|
31
28
|
|
32
|
-
@property
|
33
|
-
def app_network(self):
|
34
|
-
return self.app_config.network
|
35
|
-
|
36
29
|
@property
|
37
30
|
def app_ui_port(self):
|
38
31
|
return self.app_config.ui_port
|
@@ -21,10 +21,12 @@ NAMESERVERS_FILE = '.nameservers'
|
|
21
21
|
PUBLIC_FOLDER_NAME = 'public'
|
22
22
|
SERVICE_DETACHED = '${SERVICE_DETACHED}'
|
23
23
|
SERVICE_DETACHED_ENV = 'SERVICE_DETACHED'
|
24
|
-
SERVICE_HOSTNAME = '${SERVICE_HOSTNAME}'
|
25
|
-
SERVICE_HOSTNAME_ENV = 'SERVICE_HOSTNAME'
|
26
24
|
SERVICE_DNS = '${SERVICE_DNS}'
|
27
25
|
SERVICE_DNS_ENV = 'SERVICE_DNS'
|
26
|
+
SERVICE_HOSTNAME = '${SERVICE_HOSTNAME}'
|
27
|
+
SERVICE_HOSTNAME_ENV = 'SERVICE_HOSTNAME'
|
28
|
+
SERVICE_ID = '${SERVICE_ID}'
|
29
|
+
SERVICE_ID_ENV = 'SERVICE_ID'
|
28
30
|
SERVICE_NAME = '${SERVICE_NAME}'
|
29
31
|
SERVICE_NAME_ENV = 'SERVICE_NAME'
|
30
32
|
SERVICE_PROXY_MODE = '${SERVICE_PROXY_MODE}'
|
@@ -7,8 +7,12 @@ from stoobly_agent.config.data_dir import DATA_DIR_NAME
|
|
7
7
|
|
8
8
|
from ...app_config import AppConfig
|
9
9
|
from ...constants import (
|
10
|
-
APP_DIR, DOCKER_NAMESPACE,
|
11
|
-
SERVICE_HOSTNAME, SERVICE_HOSTNAME_ENV,
|
10
|
+
APP_DIR, DOCKER_NAMESPACE,
|
11
|
+
SERVICE_HOSTNAME, SERVICE_HOSTNAME_ENV,
|
12
|
+
SERVICE_NAME, SERVICE_NAME_ENV,
|
13
|
+
SERVICE_ID,
|
14
|
+
SERVICE_PORT, SERVICE_PORT_ENV,
|
15
|
+
SERVICE_SCHEME, SERVICE_SCHEME_ENV,
|
12
16
|
STOOBLY_HOME_DIR, STOOBLY_HOME_DIR,
|
13
17
|
WORKFLOW_NAME, WORKFLOW_NAME_ENV, WORKFLOW_SCRIPTS, WORKFLOW_TEMPLATE
|
14
18
|
)
|
@@ -91,7 +95,7 @@ class ServiceBuilder(Builder):
|
|
91
95
|
if not self.config.hostname:
|
92
96
|
return
|
93
97
|
|
94
|
-
service_id =
|
98
|
+
service_id = SERVICE_ID
|
95
99
|
environment = { **self.env_dict() }
|
96
100
|
labels = [
|
97
101
|
'traefik.enable=true',
|
@@ -7,6 +7,7 @@ from .config import Config
|
|
7
7
|
from .constants import (
|
8
8
|
SERVICE_DETACHED_ENV,
|
9
9
|
SERVICE_HOSTNAME_ENV,
|
10
|
+
SERVICE_ID_ENV,
|
10
11
|
SERVICE_PRIORITY_ENV,
|
11
12
|
SERVICE_PORT_ENV,
|
12
13
|
SERVICE_PROXY_MODE_ENV,
|
@@ -55,7 +56,7 @@ class ServiceConfig(Config):
|
|
55
56
|
|
56
57
|
@property
|
57
58
|
def id(self):
|
58
|
-
return hashlib.md5(
|
59
|
+
return hashlib.md5(self.dir.encode()).hexdigest()
|
59
60
|
|
60
61
|
@property
|
61
62
|
def hostname(self):
|
@@ -171,7 +172,7 @@ class ServiceConfig(Config):
|
|
171
172
|
config[SERVICE_SCHEME_ENV] = self.scheme
|
172
173
|
|
173
174
|
config[SERVICE_DETACHED_ENV] = bool(self.detached)
|
174
|
-
|
175
|
+
config[SERVICE_ID_ENV] = self.id
|
175
176
|
config[SERVICE_PROXY_MODE_ENV] = self.proxy_mode
|
176
177
|
|
177
178
|
super().write(config)
|
@@ -116,8 +116,9 @@ class ServiceWorkflowValidateCommand(ServiceCommand, ValidateCommand):
|
|
116
116
|
|
117
117
|
def validate_internal_hostname(self, url: str) -> None:
|
118
118
|
print(f"Validating hostname inside Docker network, url: {url}")
|
119
|
-
|
120
|
-
|
119
|
+
|
120
|
+
# See WorkflowRunCommand for how 'network' is generated
|
121
|
+
network = f"{self.workflow_name}.{self.app.network}"
|
121
122
|
timeout_seconds = 1
|
122
123
|
output = self.docker_client.containers.run(
|
123
124
|
image='curlimages/curl:8.11.0',
|
@@ -28,7 +28,7 @@ app_dir=$$(realpath "$${STOOBLY_APP_DIR:-$(CONTEXT_DIR_DEFAULT)}")
|
|
28
28
|
ca_certs_dir=$$(realpath "$${STOOBLY_CA_CERTS_DIR:-$(app_data_dir)/ca_certs}")
|
29
29
|
certs_dir=$$(realpath "$${STOOBLY_CERTS_DIR:-$(app_data_dir)/certs}")
|
30
30
|
context_dir=$$(realpath "$${STOOBLY_CONTEXT_DIR:-$(CONTEXT_DIR_DEFAULT)}")
|
31
|
-
env_file=$$(realpath "$${STOOBLY_ENV_FILE:-.env}")
|
31
|
+
env_file=$$(realpath "$${STOOBLY_ENV_FILE:-.env}" 2> /dev/null || echo '')
|
32
32
|
workflow=record
|
33
33
|
workflow_service_options=$(shell echo $$STOOBLY_WORKFLOW_SERVICE_OPTIONS)
|
34
34
|
|
@@ -44,7 +44,7 @@ workflow_script=.stoobly/tmp/$(workflow_namespace)/run.sh
|
|
44
44
|
certs_dir_options=--ca-certs-dir-path $(ca_certs_dir) --certs-dir-path $(certs_dir)
|
45
45
|
working_dir_options=--app-dir-path $(app_dir) --context-dir-path $(context_dir)
|
46
46
|
|
47
|
-
workflow_down_options
|
47
|
+
workflow_down_options=$(working_dir_options) --user-id $(USER_ID) $(workflow_down_extra_options)
|
48
48
|
workflow_log_options=$(workflow_log_extra_options)
|
49
49
|
workflow_run_options=--namespace $(workflow_namespace) --script-path $(workflow_script) $(workflow_service_options)
|
50
50
|
workflow_up_options=$(working_dir_options) $(certs_dir_options) --user-id $(USER_ID) $(workflow_up_extra_options)
|
@@ -52,24 +52,24 @@ workflow_up_options=$(working_dir_options) $(certs_dir_options) --user-id $(USER
|
|
52
52
|
# Commands
|
53
53
|
exec_env=APP_DIR="$(app_dir)" CA_CERTS_DIR="$(ca_certs_dir)" USER_ID="$(USER_ID)"
|
54
54
|
exec_up=$(DOCKER_BIN) compose -f "$(exec_docker_compose_file_path)" run --rm stoobly_ui.command
|
55
|
-
source_env=[ -f "$(env_file)" ] && . "$(env_file)"
|
55
|
+
source_env=set -a; [ -f "$(env_file)" ] && . "$(env_file)"; set +a
|
56
56
|
|
57
57
|
# Build base image
|
58
58
|
stoobly_exec_build=$(DOCKER_BIN) build $(stoobly_exec_build_args) $(app_namespace_dir) > /dev/null
|
59
59
|
stoobly_exec_build_args=-f "$(dockerfile_path)" -t stoobly.$(USER_ID) --build-arg USER_ID=$(USER_ID) $(PULL_OPTION) --quiet
|
60
60
|
|
61
61
|
# Exec any
|
62
|
-
stoobly_exec=$(stoobly_exec_build) && $(stoobly_exec_env) $(exec_up)
|
63
|
-
stoobly_exec_env=$(
|
62
|
+
stoobly_exec=$(source_env); $(stoobly_exec_build) && $(stoobly_exec_env) $(exec_up)
|
63
|
+
stoobly_exec_env=$(exec_env) CONTEXT_DIR="$(context_dir)"
|
64
64
|
|
65
65
|
# Exec workflow run
|
66
66
|
# Scaffold is stored in the application source code directory.
|
67
67
|
# When running a scaffold command from within a container, it needs access to $(app_dir) rather than $(context_dir)
|
68
|
-
stoobly_exec_run=$(stoobly_exec_build) && $(stoobly_exec_run_env) $(exec_up)
|
69
|
-
stoobly_exec_run_env=$(
|
68
|
+
stoobly_exec_run=$(source_env); $(stoobly_exec_build) && $(stoobly_exec_run_env) $(exec_up)
|
69
|
+
stoobly_exec_run_env=$(exec_env) CONTEXT_DIR="$(app_dir)"
|
70
70
|
|
71
71
|
# Workflow run
|
72
|
-
workflow_run
|
72
|
+
workflow_run=bash "$(app_dir)/$(workflow_script)"
|
73
73
|
|
74
74
|
action/install:
|
75
75
|
$(eval action=install)
|
@@ -1,11 +1,9 @@
|
|
1
1
|
import dns.resolver
|
2
|
+
import hashlib
|
2
3
|
import os
|
3
4
|
import pdb
|
4
5
|
import subprocess
|
5
6
|
import re
|
6
|
-
import yaml
|
7
|
-
|
8
|
-
from typing import TypedDict
|
9
7
|
|
10
8
|
from stoobly_agent.config.data_dir import DataDir
|
11
9
|
from stoobly_agent.lib.logger import Logger
|
@@ -19,26 +17,10 @@ from .constants import (
|
|
19
17
|
from .docker.constants import APP_EGRESS_NETWORK_TEMPLATE, APP_INGRESS_NETWORK_TEMPLATE, DOCKERFILE_CONTEXT
|
20
18
|
from .workflow_command import WorkflowCommand
|
21
19
|
from .workflow_env import WorkflowEnv
|
20
|
+
from ..types.workflow_run_command import BuildOptions, ComposeOptions, DownOptions, UpOptions
|
22
21
|
|
23
22
|
LOG_ID = 'WorkflowRunCommand'
|
24
23
|
|
25
|
-
class ComposeOptions(TypedDict):
|
26
|
-
namespace: str
|
27
|
-
user_id: str
|
28
|
-
|
29
|
-
class BuildOptions(ComposeOptions):
|
30
|
-
user_id: str
|
31
|
-
verbose: bool
|
32
|
-
|
33
|
-
class DownOptions(ComposeOptions):
|
34
|
-
extra_compose_path: str
|
35
|
-
rmi: bool
|
36
|
-
|
37
|
-
class UpOptions(ComposeOptions):
|
38
|
-
attached: bool
|
39
|
-
extra_compose_path: str
|
40
|
-
pull: bool
|
41
|
-
|
42
24
|
class WorkflowRunCommand(WorkflowCommand):
|
43
25
|
def __init__(self, app: App, **kwargs):
|
44
26
|
super().__init__(app, **kwargs)
|
@@ -48,7 +30,7 @@ class WorkflowRunCommand(WorkflowCommand):
|
|
48
30
|
self.__ca_certs_dir_path = kwargs.get('ca_certs_dir_path') or app.ca_certs_dir_path
|
49
31
|
self.__certs_dir_path = kwargs.get('certs_dir_path') or app.certs_dir_path
|
50
32
|
self.__context_dir_path = kwargs.get('context_dir_path') or app.context_dir_path
|
51
|
-
self.__network = f"{kwargs.get('
|
33
|
+
self.__network = f"{kwargs.get('namespace') or self.workflow_name}.{kwargs.get('network') or app.network}"
|
52
34
|
|
53
35
|
@property
|
54
36
|
def app_dir_path(self):
|
@@ -37,7 +37,7 @@ from stoobly_agent.config.data_dir import DataDir
|
|
37
37
|
from stoobly_agent.lib.logger import bcolors, DEBUG, ERROR, INFO, Logger, WARNING
|
38
38
|
|
39
39
|
from .helpers.print_service import FORMATS, print_services, select_print_options
|
40
|
-
from .validators.scaffold import validate_app_name, validate_hostname, validate_namespace, validate_service_name
|
40
|
+
from .validators.scaffold import validate_app_name, validate_hostname, validate_namespace, validate_network, validate_service_name
|
41
41
|
|
42
42
|
LOG_ID = 'Scaffold'
|
43
43
|
|
@@ -88,7 +88,6 @@ def hostname(ctx):
|
|
88
88
|
help="Scaffold application"
|
89
89
|
)
|
90
90
|
@click.option('--app-dir-path', default=current_working_dir, help='Path to create the app scaffold.')
|
91
|
-
@click.option('--network', help='App default network name. Defaults to app name.')
|
92
91
|
@click.option('--quiet', is_flag=True, help='Disable log output.')
|
93
92
|
@click.option('--ui-port', default=4200, type=click.IntRange(1, 65535), help='UI service port.')
|
94
93
|
@click.argument('app_name', callback=validate_app_name)
|
@@ -100,9 +99,6 @@ def create(**kwargs):
|
|
100
99
|
if not kwargs['quiet'] and os.path.exists(app.scaffold_namespace_path):
|
101
100
|
print(f"{kwargs['app_dir_path']} already exists, updating scaffold maintained files...")
|
102
101
|
|
103
|
-
if not kwargs['network']:
|
104
|
-
kwargs['network'] = kwargs['app_name']
|
105
|
-
|
106
102
|
AppCreateCommand(app, **kwargs).build()
|
107
103
|
|
108
104
|
@app.command(
|
@@ -335,7 +331,7 @@ def copy(**kwargs):
|
|
335
331
|
Log levels can be "debug", "info", "warning", or "error"
|
336
332
|
''')
|
337
333
|
@click.option('--namespace', callback=validate_namespace, help='Workflow namespace.')
|
338
|
-
@click.option('--network', help='Workflow network name.')
|
334
|
+
@click.option('--network', callback=validate_network, help='Workflow network name.')
|
339
335
|
@click.option('--rmi', is_flag=True, help='Remove images used by containers.')
|
340
336
|
@click.option('--script-path', help='Path to intermediate script path.')
|
341
337
|
@click.option('--service', multiple=True, help='Select which services to log. Defaults to all.')
|
@@ -344,7 +340,10 @@ def copy(**kwargs):
|
|
344
340
|
def down(**kwargs):
|
345
341
|
os.environ[env_vars.LOG_LEVEL] = kwargs['log_level']
|
346
342
|
|
347
|
-
|
343
|
+
containerized = kwargs['containerized']
|
344
|
+
|
345
|
+
app_dir_path = current_working_dir if containerized else kwargs['app_dir_path']
|
346
|
+
app = App(app_dir_path, DOCKER_NAMESPACE, **kwargs)
|
348
347
|
__validate_app(app)
|
349
348
|
|
350
349
|
__with_namespace_defaults(kwargs)
|
@@ -480,7 +479,7 @@ def logs(**kwargs):
|
|
480
479
|
''')
|
481
480
|
@click.option('--mkcert', is_flag=True, help='Set to generate SSL certs for HTTPS services.')
|
482
481
|
@click.option('--namespace', callback=validate_namespace, help='Workflow namespace.')
|
483
|
-
@click.option('--network', help='Workflow network name.')
|
482
|
+
@click.option('--network', callback=validate_network, help='Workflow network name.')
|
484
483
|
@click.option('--no-build', is_flag=True, help='Do not build images before starting containers.')
|
485
484
|
@click.option('--no-publish', is_flag=True, help='Do not publish all ports.')
|
486
485
|
@click.option('--pull', is_flag=True, help='Pull image before running.')
|
@@ -827,10 +826,6 @@ def __with_namespace_defaults(kwargs):
|
|
827
826
|
if not kwargs.get('namespace'):
|
828
827
|
kwargs['namespace'] = kwargs.get('workflow_name')
|
829
828
|
|
830
|
-
# If network there was a network option, but it is not set, default network to namespace
|
831
|
-
if 'network' in kwargs and not kwargs['network']:
|
832
|
-
kwargs['network'] = kwargs['namespace']
|
833
|
-
|
834
829
|
def __workflow_create(app, **kwargs):
|
835
830
|
command = WorkflowCreateCommand(app, **kwargs)
|
836
831
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from typing import TypedDict
|
2
|
+
|
3
|
+
class ComposeOptions(TypedDict):
|
4
|
+
namespace: str
|
5
|
+
user_id: str
|
6
|
+
|
7
|
+
class BuildOptions(ComposeOptions):
|
8
|
+
user_id: str
|
9
|
+
verbose: bool
|
10
|
+
|
11
|
+
class DownOptions(ComposeOptions):
|
12
|
+
extra_compose_path: str
|
13
|
+
rmi: bool
|
14
|
+
|
15
|
+
class UpOptions(ComposeOptions):
|
16
|
+
attached: bool
|
17
|
+
extra_compose_path: str
|
18
|
+
pull: bool
|
@@ -19,6 +19,15 @@ def validate_hostname(ctx, param, hostname: str) -> str:
|
|
19
19
|
sys.exit(1)
|
20
20
|
return hostname
|
21
21
|
|
22
|
+
def validate_network(ctx, param, network: str) -> str:
|
23
|
+
if not network:
|
24
|
+
return
|
25
|
+
network_regex = re.compile(r'^[a-zA-Z0-9._-]+$')
|
26
|
+
if not re.search(network_regex, network):
|
27
|
+
print(f"Error: network {network} is invalid.", file=sys.stderr)
|
28
|
+
sys.exit(1)
|
29
|
+
return network
|
30
|
+
|
22
31
|
def validate_namespace(ctx, param, namespace: str) -> str:
|
23
32
|
if not namespace:
|
24
33
|
return
|
@@ -1,4 +1,4 @@
|
|
1
|
-
stoobly_agent/__init__.py,sha256=
|
1
|
+
stoobly_agent/__init__.py,sha256=nIYIzLEOceTM5Bfw040WST6iw0kTxA4hWg7lKhn6tfo,45
|
2
2
|
stoobly_agent/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
stoobly_agent/app/api/__init__.py,sha256=ctkB8KR-eXO0SFhj602huHiyvQ3PslFWd8fkcufgrAI,1000
|
4
4
|
stoobly_agent/app/api/application_http_request_handler.py,sha256=Vvz53yB0bR7J-QqMAkLlhcZrA4P64ZEN7w8cMbgl6o0,5261
|
@@ -67,13 +67,13 @@ stoobly_agent/app/cli/project_cli.py,sha256=EXjeLjbnq9PhfCjvyfZ0UnJ2tejeCS0SIAo3
|
|
67
67
|
stoobly_agent/app/cli/report_cli.py,sha256=ZxJw0Xkx7KFZJn9e45BSKRKon8AD0Msrwy1fbPfbv0c,2543
|
68
68
|
stoobly_agent/app/cli/request_cli.py,sha256=THNloW111l9MLE0oPg4y7hVXL1U7OXoz760g0A1CtJ0,7747
|
69
69
|
stoobly_agent/app/cli/scaffold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
70
|
-
stoobly_agent/app/cli/scaffold/app.py,sha256=
|
70
|
+
stoobly_agent/app/cli/scaffold/app.py,sha256=0HJm8cdyIBAdOBr18499MkZGhmEFu6I7GSZXR7pKxkw,3650
|
71
71
|
stoobly_agent/app/cli/scaffold/app_command.py,sha256=sliaYulMNmaxbRXpJIDtBDWEBGEv5Tht4rpErzC_xxw,2368
|
72
|
-
stoobly_agent/app/cli/scaffold/app_config.py,sha256=
|
73
|
-
stoobly_agent/app/cli/scaffold/app_create_command.py,sha256=
|
72
|
+
stoobly_agent/app/cli/scaffold/app_config.py,sha256=EyFezd7oeYLHmYPEdYlQCSeGP3AM1NmFz2mT9WLp7xY,818
|
73
|
+
stoobly_agent/app/cli/scaffold/app_create_command.py,sha256=2y1W17r3mxCf-7U7uUT-44icprGPMERCfVITO2NA76w,981
|
74
74
|
stoobly_agent/app/cli/scaffold/command.py,sha256=aoTsdkkBzyu7TkVSMdNQQGk0Gj874jNgFcjR14y3TuM,254
|
75
75
|
stoobly_agent/app/cli/scaffold/config.py,sha256=HZU5tkvr3dkPr4JMXZtrJlu2wxxO-134Em6jReFFcq0,688
|
76
|
-
stoobly_agent/app/cli/scaffold/constants.py,sha256=
|
76
|
+
stoobly_agent/app/cli/scaffold/constants.py,sha256=ULSzqjNdrWP_-feyqpwPE-Pdt7JVDerZeZoFTpvewHY,2555
|
77
77
|
stoobly_agent/app/cli/scaffold/containerized_app.py,sha256=dAjn4RwcZV3aEL0POUmrbF_DC-r9h6s1zx7gT2t45v0,175
|
78
78
|
stoobly_agent/app/cli/scaffold/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
79
79
|
stoobly_agent/app/cli/scaffold/docker/app_builder.py,sha256=7z5pk5JKlRDHx2USxY-WurttLyyUkIVYfl34_u1x9dE,501
|
@@ -81,7 +81,7 @@ stoobly_agent/app/cli/scaffold/docker/builder.py,sha256=uiGqhxBHEasZAqLzjKUGUs-1
|
|
81
81
|
stoobly_agent/app/cli/scaffold/docker/constants.py,sha256=1khQdgTaQ89ykGRNdTQh_ejFOdjNFGaZ_3cOGda6y7Y,692
|
82
82
|
stoobly_agent/app/cli/scaffold/docker/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
83
|
stoobly_agent/app/cli/scaffold/docker/service/build_decorator.py,sha256=ZU7z4bkvdS3OK5O4fJhlA9_PNwnFtZW6t7vNF7V5obQ,1003
|
84
|
-
stoobly_agent/app/cli/scaffold/docker/service/builder.py,sha256=
|
84
|
+
stoobly_agent/app/cli/scaffold/docker/service/builder.py,sha256=u3_YNuxX8TT4TvhzTqe5b2Zvi9fF7TLWJFepkBSXwhk,5857
|
85
85
|
stoobly_agent/app/cli/scaffold/docker/service/configure_gateway.py,sha256=8GQ2wUBwb45uSxhzkEMloezJT1hVu8v_3PudWLTU9ig,3910
|
86
86
|
stoobly_agent/app/cli/scaffold/docker/service/types.py,sha256=qB-yYHlu-PZDc0HYgTUvE5bWNpHxaSThC3JUG8okR1k,88
|
87
87
|
stoobly_agent/app/cli/scaffold/docker/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -96,16 +96,16 @@ stoobly_agent/app/cli/scaffold/hosts_file_manager.py,sha256=zNX5wh6zXQ4J2BA0YYdD
|
|
96
96
|
stoobly_agent/app/cli/scaffold/managed_services_docker_compose.py,sha256=-wLBXUi7DCWsfm5KzZzd_kdJKOTl1NT924XR7dyjbSY,574
|
97
97
|
stoobly_agent/app/cli/scaffold/service.py,sha256=74JwjTRRkk6lo-k9hre1iGztbKa9zDqjPVx3Qgpze-s,699
|
98
98
|
stoobly_agent/app/cli/scaffold/service_command.py,sha256=NxJakoq1Dy79LEIJ8QSsKEwsofIfN13GN0UGpp9i6qY,1230
|
99
|
-
stoobly_agent/app/cli/scaffold/service_config.py,sha256=
|
99
|
+
stoobly_agent/app/cli/scaffold/service_config.py,sha256=igPvhcP0vENgHCYQhbRJLeltSjv0m5b5fmEq5wMGkd4,3939
|
100
100
|
stoobly_agent/app/cli/scaffold/service_create_command.py,sha256=1B6TK3JDAjouikCV84WDrX7b0crdPMPIo1caMwhi-L8,2815
|
101
101
|
stoobly_agent/app/cli/scaffold/service_delete_command.py,sha256=_nBDQjm8eL62MQpzSCxgUHlW04ZXKG8MDlN1BXxlqww,986
|
102
102
|
stoobly_agent/app/cli/scaffold/service_docker_compose.py,sha256=OMUN1-ujQYIZXxDvS4XBf5C9wGalQULkwOiBBQPZbHY,820
|
103
103
|
stoobly_agent/app/cli/scaffold/service_update_command.py,sha256=oWusBKfvjt4RnK03_V3CJYWrfsCI4_LcR7W12eLXMR4,2579
|
104
104
|
stoobly_agent/app/cli/scaffold/service_workflow.py,sha256=sQ_Edy_wGHKMXpD0DmhnOWkGEKz7gSgEGNI8f7aXOdg,444
|
105
|
-
stoobly_agent/app/cli/scaffold/service_workflow_validate_command.py,sha256
|
105
|
+
stoobly_agent/app/cli/scaffold/service_workflow_validate_command.py,sha256=-hdg7RLsoEQXCI9rebIXyO3d8JbpyTxGnhpjaPQfmFk,11514
|
106
106
|
stoobly_agent/app/cli/scaffold/templates/__init__.py,sha256=x8C_a0VoO_vUbosp4_6IC1U7Ge9NnUdVKDPpVMtMkeY,171
|
107
107
|
stoobly_agent/app/cli/scaffold/templates/app/.Dockerfile.context,sha256=Okk4Q0Fj7Wi5NU58gQfpjpFwAL3RUBJyRe56kteQfcA,158
|
108
|
-
stoobly_agent/app/cli/scaffold/templates/app/.Makefile,sha256=
|
108
|
+
stoobly_agent/app/cli/scaffold/templates/app/.Makefile,sha256=bseFu3GsBlH8QEHKiALhz3V8pZr6CBJHM_nU64ZCEsE,8973
|
109
109
|
stoobly_agent/app/cli/scaffold/templates/app/.docker-compose.base.yml,sha256=6tFqXh3ine8vaD0FCL5TMoY5NjKx2wLUR8XpW3tJtew,245
|
110
110
|
stoobly_agent/app/cli/scaffold/templates/app/.docker-compose.networks.yml,sha256=I4PbJpQjFHb5IbAUWNvYM6okDEtmwtKFDQg-yog05WM,141
|
111
111
|
stoobly_agent/app/cli/scaffold/templates/app/Makefile,sha256=TEmPG7Bf0KZOnmfsgdzza3UdwcVMmM5Lj1YdLc4cgjA,79
|
@@ -202,9 +202,9 @@ stoobly_agent/app/cli/scaffold/workflow_copy_command.py,sha256=wi8qHH_M2e6jXIPuu
|
|
202
202
|
stoobly_agent/app/cli/scaffold/workflow_create_command.py,sha256=-fwsr6_LvGT8BbBWdGY3Qd8cSQhBOSJiMr1r8s2R86w,3390
|
203
203
|
stoobly_agent/app/cli/scaffold/workflow_env.py,sha256=x8V5pJmIiklD3f2q2-qq-CORf4YaXYq_r2JpR2MmSwk,416
|
204
204
|
stoobly_agent/app/cli/scaffold/workflow_log_command.py,sha256=Bke4lMOMxuDUFuAx9nlXHbKgYMO4KAg9ASHvjz4aVWc,1372
|
205
|
-
stoobly_agent/app/cli/scaffold/workflow_run_command.py,sha256=
|
205
|
+
stoobly_agent/app/cli/scaffold/workflow_run_command.py,sha256=stKIWnLCfpX39iobHYp4NjFgR2oFTBmyCgYUIcc22_A,10896
|
206
206
|
stoobly_agent/app/cli/scaffold/workflow_validate_command.py,sha256=Uo_yo6rVR1ZR7xpvsQvlH48AyMBVLRupd4G-bRjzm_Q,5584
|
207
|
-
stoobly_agent/app/cli/scaffold_cli.py,sha256=
|
207
|
+
stoobly_agent/app/cli/scaffold_cli.py,sha256=ovhlabUDEfqkuRGIVzmxdTHwkpnTceYUgzYw-2kVi0I,32367
|
208
208
|
stoobly_agent/app/cli/scenario_cli.py,sha256=3J1EiJOvunkfWrEkOsanw-XrKkOk78ij_GjBlE9p7CE,8229
|
209
209
|
stoobly_agent/app/cli/snapshot_cli.py,sha256=1Dw5JgDlmG6vctrawIRO7CdB73vAQk_wRBnPG2lVOrQ,11929
|
210
210
|
stoobly_agent/app/cli/trace_cli.py,sha256=K7E-vx3JUcqEDSWOdIOi_AieKNQz7dBfmRrVvKDkzFI,4605
|
@@ -215,7 +215,8 @@ stoobly_agent/app/cli/types/request.py,sha256=QthojE5sfx7OvKu-vVNnSUfGk8n4pLzuBQ
|
|
215
215
|
stoobly_agent/app/cli/types/scenario.py,sha256=28WxmOlbm2Bsek1uu7yc4hJGz-d5oHbYAro7LlFWRoc,81
|
216
216
|
stoobly_agent/app/cli/types/snapshot_migration.py,sha256=4_Re46FKjsflcTOO3qhNsbWWmdEU67SFsF-XE_FKG3M,1859
|
217
217
|
stoobly_agent/app/cli/types/test.py,sha256=1c458B7DFBWsEk5Q1CrZ2CUi84YzEzcs-W4qTcudwAk,714
|
218
|
-
stoobly_agent/app/cli/
|
218
|
+
stoobly_agent/app/cli/types/workflow_run_command.py,sha256=SQ5PGpoqIEQ7w9xeSQE1FBqelnVfsdlRXXaODDW4yPY,326
|
219
|
+
stoobly_agent/app/cli/validators/scaffold.py,sha256=Y2XQrN2RFMcBh228q6inTwZGoN0K5FmXO8JfrgKVwJA,1669
|
219
220
|
stoobly_agent/app/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
220
221
|
stoobly_agent/app/models/adapters/__init__.py,sha256=cEEE--Bvrvk6DAsHx_uPgFhLnZJETP4zSBtWjMqyIKc,233
|
221
222
|
stoobly_agent/app/models/adapters/joined_request_adapter.py,sha256=fSq16n3AAlxi8KJdBESHp3JGio_M9uzMnHbnQU8VI3w,3598
|
@@ -751,8 +752,8 @@ stoobly_agent/test/mock_data/scaffold/docker-compose-local-service.yml,sha256=1W
|
|
751
752
|
stoobly_agent/test/mock_data/scaffold/index.html,sha256=qJwuYajKZ4ihWZrJQ3BNObV5kf1VGnnm_vqlPJzdqLE,258
|
752
753
|
stoobly_agent/test/mock_data/uspto.yaml,sha256=6U5se7C3o-86J4m9xpOk9Npias399f5CbfWzR87WKwE,7835
|
753
754
|
stoobly_agent/test/test_helper.py,sha256=m_oAI7tmRYCNZdKfNqISWhMv3e44tjeYViQ3nTUfnos,1007
|
754
|
-
stoobly_agent-1.9.
|
755
|
-
stoobly_agent-1.9.
|
756
|
-
stoobly_agent-1.9.
|
757
|
-
stoobly_agent-1.9.
|
758
|
-
stoobly_agent-1.9.
|
755
|
+
stoobly_agent-1.9.10.dist-info/LICENSE,sha256=o93sj12cdoEOsTCjPaPFsw3Xq0SXs3pPcY-9reE2sEw,548
|
756
|
+
stoobly_agent-1.9.10.dist-info/METADATA,sha256=V2dDSCdSEvRueylouQW2K4-4_TNU6Q74sqWplOHzWs0,3088
|
757
|
+
stoobly_agent-1.9.10.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
758
|
+
stoobly_agent-1.9.10.dist-info/entry_points.txt,sha256=aq5wix5oC8MDQtmyPGU0xaFrsjJg7WH28NmXh2sc3Z8,56
|
759
|
+
stoobly_agent-1.9.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|