stoobly-agent 1.1.2__py3-none-any.whl → 1.1.4__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/helpers/certificate_authority.py +5 -1
- stoobly_agent/app/cli/scaffold/app.py +1 -1
- stoobly_agent/app/cli/scaffold/docker/service/builder.py +1 -1
- stoobly_agent/app/cli/scaffold/docker/workflow/decorators_factory.py +6 -0
- stoobly_agent/app/cli/scaffold/docker/workflow/development_decorator.py +30 -0
- stoobly_agent/app/cli/scaffold/docker/workflow/reverse_proxy_decorator.py +1 -9
- stoobly_agent/app/cli/scaffold/templates/app/.Makefile +9 -5
- stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/.configure +1 -1
- stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/.configure +1 -1
- stoobly_agent/app/cli/scaffold/workflow_run_command.py +29 -9
- stoobly_agent/app/cli/scaffold_cli.py +8 -2
- {stoobly_agent-1.1.2.dist-info → stoobly_agent-1.1.4.dist-info}/METADATA +1 -1
- {stoobly_agent-1.1.2.dist-info → stoobly_agent-1.1.4.dist-info}/RECORD +17 -16
- {stoobly_agent-1.1.2.dist-info → stoobly_agent-1.1.4.dist-info}/LICENSE +0 -0
- {stoobly_agent-1.1.2.dist-info → stoobly_agent-1.1.4.dist-info}/WHEEL +0 -0
- {stoobly_agent-1.1.2.dist-info → stoobly_agent-1.1.4.dist-info}/entry_points.txt +0 -0
stoobly_agent/__init__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
COMMAND = 'stoobly-agent'
|
2
|
-
VERSION = '1.1.
|
2
|
+
VERSION = '1.1.4'
|
@@ -23,6 +23,10 @@ class CertificateAuthority():
|
|
23
23
|
|
24
24
|
def __init__(self, certs_dir = DataDir.instance().mitmproxy_conf_dir_path, cn = MITMPROXY_CN):
|
25
25
|
self.certs_dir = certs_dir
|
26
|
+
|
27
|
+
if not os.path.exists(certs_dir):
|
28
|
+
self.generate_certs()
|
29
|
+
|
26
30
|
self.cn = cn
|
27
31
|
self.key_size = 2048
|
28
32
|
|
@@ -55,7 +59,7 @@ class CertificateAuthority():
|
|
55
59
|
|
56
60
|
def generate_certs(self):
|
57
61
|
if not os.path.exists(self.certs_dir):
|
58
|
-
os.makedirs(self.certs_dir)
|
62
|
+
os.makedirs(self.certs_dir, exist_ok=True)
|
59
63
|
|
60
64
|
path = Path(self.certs_dir)
|
61
65
|
CertStore.create_store(path, self.cn, self.key_size)
|
@@ -6,7 +6,7 @@ from stoobly_agent.config.data_dir import DataDir, DATA_DIR_NAME
|
|
6
6
|
class App():
|
7
7
|
|
8
8
|
def __init__(self, path: str, namespace: str, **kwargs):
|
9
|
-
path = path or os.getcwd()
|
9
|
+
path = os.path.abspath(path) or os.getcwd()
|
10
10
|
data_dir: DataDir = DataDir.instance(path)
|
11
11
|
|
12
12
|
self.__scaffold_dir_path = data_dir.path
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from stoobly_agent.app.cli.scaffold.service_config import ServiceConfig
|
2
2
|
|
3
3
|
from ...constants import WORKFLOW_MOCK_TYPE, WORKFLOW_RECORD_TYPE
|
4
|
+
from .development_decorator import DevelopmentDecorator
|
4
5
|
from .mock_decorator import MockDecorator
|
5
6
|
from .reverse_proxy_decorator import ReverseProxyDecorator
|
6
7
|
|
@@ -10,6 +11,11 @@ def get_workflow_decorators(workflow: str, service_config: ServiceConfig):
|
|
10
11
|
if workflow == WORKFLOW_RECORD_TYPE:
|
11
12
|
if service_config.hostname:
|
12
13
|
workflow_decorators.append(ReverseProxyDecorator)
|
14
|
+
workflow_decorators.append(DevelopmentDecorator)
|
15
|
+
elif workflow == WORKFLOW_MOCK_TYPE:
|
16
|
+
if service_config.hostname:
|
17
|
+
workflow_decorators.append(ReverseProxyDecorator if service_config.detached else MockDecorator)
|
18
|
+
workflow_decorators.append(DevelopmentDecorator)
|
13
19
|
else:
|
14
20
|
if service_config.hostname:
|
15
21
|
workflow_decorators.append(ReverseProxyDecorator if service_config.detached else MockDecorator)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
from ...constants import SERVICE_DNS
|
2
|
+
|
3
|
+
from .builder import WorkflowBuilder
|
4
|
+
|
5
|
+
class DevelopmentDecorator():
|
6
|
+
|
7
|
+
def __init__(self, workflow_builder: WorkflowBuilder):
|
8
|
+
self.__workflow_builder = workflow_builder
|
9
|
+
|
10
|
+
@property
|
11
|
+
def workflow_builder(self):
|
12
|
+
return self.__workflow_builder
|
13
|
+
|
14
|
+
@property
|
15
|
+
def service_builder(self):
|
16
|
+
return self.workflow_builder.service_builder
|
17
|
+
|
18
|
+
def decorate(self):
|
19
|
+
config = self.service_builder.config
|
20
|
+
proxy_name = self.workflow_builder.proxy
|
21
|
+
services = self.workflow_builder.services
|
22
|
+
|
23
|
+
# If we are reverse proxying to potentially an external host,
|
24
|
+
# Docker's embedded DNS will use the host's /etc/host file as part of the resolution process
|
25
|
+
# This can lead the hostname to resolve to localhost instead of the service's actual IP address
|
26
|
+
if not config.detached:
|
27
|
+
if not proxy_name in services:
|
28
|
+
services[proxy_name] = {}
|
29
|
+
|
30
|
+
services[proxy_name]['dns'] = SERVICE_DNS
|
@@ -2,9 +2,7 @@ import pdb
|
|
2
2
|
|
3
3
|
from urllib.parse import urlparse
|
4
4
|
|
5
|
-
from
|
6
|
-
|
7
|
-
from ...constants import SERVICE_DNS, SERVICE_DNS_ENV, SERVICE_HOSTNAME, SERVICE_PORT
|
5
|
+
from ...constants import SERVICE_HOSTNAME, SERVICE_PORT
|
8
6
|
from .builder import WorkflowBuilder
|
9
7
|
|
10
8
|
class ReverseProxyDecorator():
|
@@ -56,11 +54,5 @@ class ReverseProxyDecorator():
|
|
56
54
|
**additional_properties,
|
57
55
|
}
|
58
56
|
|
59
|
-
# If we are reverse proxying to potentially an external host,
|
60
|
-
# Docker's embedded DNS will use the host's /etc/host file as part of the resolution process
|
61
|
-
# This can lead the hostname to resolve to localhost instead of the service's actual IP address
|
62
|
-
if not config.detached:
|
63
|
-
service['dns'] = SERVICE_DNS
|
64
|
-
|
65
57
|
services[proxy_name] = service
|
66
58
|
|
@@ -14,7 +14,7 @@ CONTEXT_DIR_DEFAULT := $(realpath $(DIR)/../..)
|
|
14
14
|
|
15
15
|
# Configuration
|
16
16
|
app_dir=$$(realpath "$${STOOBLY_APP_DIR:-$(CONTEXT_DIR_DEFAULT)}")
|
17
|
-
ca_certs_dir=$$(realpath "$${STOOBLY_CA_CERTS_DIR:-$$(realpath
|
17
|
+
ca_certs_dir=$$(realpath "$${STOOBLY_CA_CERTS_DIR:-$$(realpath ~)/.mitmproxy}")
|
18
18
|
certs_dir=$$(realpath "$${STOOBLY_CERTS_DIR:-$(app_data_dir)/certs}")
|
19
19
|
context_dir=$$(realpath "$${STOOBLY_CONTEXT_DIR:-$(CONTEXT_DIR_DEFAULT)}")
|
20
20
|
workflow_run_options=$${STOOBLY_WORKFLOW_RUN_OPTIONS:+$$STOOBLY_WORKFLOW_RUN_OPTIONS }
|
@@ -28,9 +28,11 @@ docker_compose_command=docker compose
|
|
28
28
|
source_env=set -a; [ -f .env ] && source .env; set +a
|
29
29
|
|
30
30
|
docker_compose_file_path=$(app_data_dir)/docker/stoobly-ui/exec/.docker-compose.exec.yml
|
31
|
-
stoobly_exec_args=--profile $(EXEC_WORKFLOW_NAME) -p $(EXEC_WORKFLOW_NAME) up --
|
31
|
+
stoobly_exec_args=--profile $(EXEC_WORKFLOW_NAME) -p $(EXEC_WORKFLOW_NAME) up --remove-orphans
|
32
32
|
stoobly_exec_env=export CONTEXT_DIR=$(context_dir) && export USER_ID=$$UID && export CA_CERTS_DIR="$(ca_certs_dir)"
|
33
|
-
|
33
|
+
stoobly_exec_build_args=--profile $(EXEC_WORKFLOW_NAME) -p $(EXEC_WORKFLOW_NAME) build --pull --quiet
|
34
|
+
stoobly_exec_build=$(docker_compose_command) "$(docker_compose_file_path)" $(stoobly_exec_build_args)
|
35
|
+
stoobly_exec=$(stoobly_exec_env) && $(source_env) && $(stoobly_exec_build) && $(docker_compose_command) -f "$(docker_compose_file_path)" $(stoobly_exec_args)
|
34
36
|
|
35
37
|
# Because scaffold is stored in the APP_DIR, when running a scaffold command from within a container,
|
36
38
|
# it needs access to APP_DIR rather than CONTEXT_DIR
|
@@ -44,7 +46,7 @@ workflow_run=$(workflow_run_env) && $(source_env) && bash "$(workflow_run_script
|
|
44
46
|
certs:
|
45
47
|
@export EXEC_COMMAND=bin/.mkcert && \
|
46
48
|
$(stoobly_exec)
|
47
|
-
nameservers:
|
49
|
+
nameservers: tmpdir
|
48
50
|
@if [ -f /etc/resolv.conf ]; then \
|
49
51
|
nameserver=$$(grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' /etc/resolv.conf) && \
|
50
52
|
if [ "$$nameserver" = "127.0.0.53" ]; then \
|
@@ -144,4 +146,6 @@ test/stop:
|
|
144
146
|
export EXEC_OPTIONS="$(options)" && \
|
145
147
|
export EXEC_ARGS="test" && \
|
146
148
|
$(stoobly_exec_run) && \
|
147
|
-
$(workflow_run)
|
149
|
+
$(workflow_run)
|
150
|
+
tmpdir:
|
151
|
+
@mkdir -p $(app_tmp_dir)
|
@@ -22,6 +22,8 @@ LOG_ID = 'WorkflowRunCommand'
|
|
22
22
|
class UpOptions(TypedDict):
|
23
23
|
attached: bool
|
24
24
|
namespace: str
|
25
|
+
no_cache: bool
|
26
|
+
verbose: bool
|
25
27
|
|
26
28
|
class WorkflowRunCommand(WorkflowCommand):
|
27
29
|
def __init__(self, app: App, **kwargs):
|
@@ -93,10 +95,12 @@ class WorkflowRunCommand(WorkflowCommand):
|
|
93
95
|
if not os.path.exists(self.compose_path):
|
94
96
|
return ''
|
95
97
|
|
98
|
+
build_command = ['docker', 'compose']
|
96
99
|
command = ['COMPOSE_IGNORE_ORPHANS=true', 'docker', 'compose']
|
100
|
+
command_options = []
|
97
101
|
|
98
102
|
# Add docker compose file
|
99
|
-
|
103
|
+
command_options.append(f"-f {os.path.relpath(self.compose_path, self.__current_working_dir)}")
|
100
104
|
|
101
105
|
# Add custom docker compose file
|
102
106
|
custom_services = self.custom_services
|
@@ -114,16 +118,27 @@ class WorkflowRunCommand(WorkflowCommand):
|
|
114
118
|
# TODO: looking into why warning does not print in docker
|
115
119
|
Logger.instance(LOG_ID).error(f"Missing {self.workflow_name} profile in custom compose file")
|
116
120
|
|
117
|
-
|
121
|
+
command_options.append(f"-f {os.path.relpath(self.custom_compose_path, self.__current_working_dir)}")
|
118
122
|
|
119
123
|
if self.extra_compose_path:
|
120
|
-
|
124
|
+
command_options.append(f"-f {os.path.relpath(self.extra_compose_path, self.__current_working_dir)}")
|
121
125
|
|
122
|
-
|
126
|
+
command_options.append(f"--profile {self.workflow_name}")
|
123
127
|
|
124
128
|
if options.get('namespace'):
|
125
|
-
|
129
|
+
command_options.append(f"-p {options['namespace']}")
|
130
|
+
|
131
|
+
build_command += command_options
|
132
|
+
build_command.append('build')
|
133
|
+
build_command.append('--pull')
|
134
|
+
|
135
|
+
if not options.get('verbose'):
|
136
|
+
build_command.append('--quiet')
|
137
|
+
|
138
|
+
if options.get('no_cache'):
|
139
|
+
build_command.append('--no-cache')
|
126
140
|
|
141
|
+
command += command_options
|
127
142
|
command.append('up')
|
128
143
|
|
129
144
|
if not options.get('attached'):
|
@@ -141,13 +156,11 @@ class WorkflowRunCommand(WorkflowCommand):
|
|
141
156
|
# Otherwise, even if a service exits with a non-zero exit code, exit code 0 is returned
|
142
157
|
command.append(option)
|
143
158
|
|
144
|
-
command.append('--build')
|
145
|
-
|
146
159
|
self.write_env()
|
147
160
|
|
148
|
-
return ' '.join(command)
|
161
|
+
return ' && '.join([' '.join(build_command), ' '.join(command)])
|
149
162
|
|
150
|
-
def down(self):
|
163
|
+
def down(self, **options):
|
151
164
|
if not os.path.exists(self.compose_path):
|
152
165
|
return ''
|
153
166
|
|
@@ -164,8 +177,15 @@ class WorkflowRunCommand(WorkflowCommand):
|
|
164
177
|
command.append(f"-f {os.path.relpath(self.extra_compose_path, self.__current_working_dir)}")
|
165
178
|
|
166
179
|
command.append(f"--profile {self.workflow_name}")
|
180
|
+
|
181
|
+
if options.get('namespace'):
|
182
|
+
command.append(f"-p {options['namespace']}")
|
183
|
+
|
167
184
|
command.append('down')
|
168
185
|
|
186
|
+
if options.get('rmi'):
|
187
|
+
command.append(f"--rmi local")
|
188
|
+
|
169
189
|
return ' '.join(command)
|
170
190
|
|
171
191
|
def write_nameservers(self):
|
@@ -248,6 +248,8 @@ def copy(**kwargs):
|
|
248
248
|
@click.option('--log-level', default=INFO, type=click.Choice([DEBUG, INFO, WARNING, ERROR]), help='''
|
249
249
|
Log levels can be "debug", "info", "warning", or "error"
|
250
250
|
''')
|
251
|
+
@click.option('--namespace', help='Workflow namespace.')
|
252
|
+
@click.option('--rmi', is_flag=True, help='Remove images used by containers.')
|
251
253
|
@click.option('--service', multiple=True, help='Select which services to log. Defaults to all.')
|
252
254
|
@click.argument('workflow_name')
|
253
255
|
def stop(**kwargs):
|
@@ -281,7 +283,7 @@ def stop(**kwargs):
|
|
281
283
|
for command in commands:
|
282
284
|
__print_header(f"SERVICE {command.service_name}")
|
283
285
|
|
284
|
-
exec_command = command.down()
|
286
|
+
exec_command = command.down(namespace=kwargs['namespace'], rmi=kwargs['rmi'])
|
285
287
|
if not exec_command:
|
286
288
|
continue
|
287
289
|
|
@@ -358,7 +360,9 @@ def logs(**kwargs):
|
|
358
360
|
''')
|
359
361
|
@click.option('--namespace', help='Workflow namespace.')
|
360
362
|
@click.option('--network', help='Workflow network namespace.')
|
363
|
+
@click.option('--no-cache', is_flag=True, help='Do not use cache when building images.')
|
361
364
|
@click.option('--service', multiple=True, help='Select which services to run. Defaults to all.')
|
365
|
+
@click.option('--verbose', is_flag=True)
|
362
366
|
@click.argument('workflow_name')
|
363
367
|
def run(**kwargs):
|
364
368
|
cwd = os.getcwd()
|
@@ -417,7 +421,9 @@ def run(**kwargs):
|
|
417
421
|
# By default, the entrypoint service should be last
|
418
422
|
# However, this can change if the user has configured a service's priority to be higher
|
419
423
|
attached = not kwargs['detached'] and index == len(commands) - 1
|
420
|
-
exec_command = command.up(
|
424
|
+
exec_command = command.up(
|
425
|
+
attached=attached, namespace=kwargs['namespace'], no_cache=kwargs['no_cache'], verbose=kwargs['verbose']
|
426
|
+
)
|
421
427
|
if not exec_command:
|
422
428
|
continue
|
423
429
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
stoobly_agent/__init__.py,sha256=
|
1
|
+
stoobly_agent/__init__.py,sha256=Yo6V8wUKHZVrGSNKqSTOAnMe9-EQ8shkE9omphzkopM,44
|
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=jf4fkqjOiCeI2IM5Ro7ie0v_C6y0-7-5TIE_IKMPOfg,5513
|
@@ -28,7 +28,7 @@ stoobly_agent/app/cli/feature_cli.py,sha256=d-MUTbK3gbZxZNJUjM43fioZyhPyzetQNKjI
|
|
28
28
|
stoobly_agent/app/cli/handlers/request_cli_handler.py,sha256=IPToK9OfiDda-mkq8HpiSSqK2m-UR15-8f8LVoLAHTA,6965
|
29
29
|
stoobly_agent/app/cli/handlers/scenario_cli_handler.py,sha256=1KSsfhR1mmPUCmhjzWTjf_L9NcQglLvVK3KURrPt92A,7425
|
30
30
|
stoobly_agent/app/cli/helpers/__init__.py,sha256=26ODsQi5NoJPwq4Ya7_lmtRalhhXOr_jfdZQWGLy6Gc,161
|
31
|
-
stoobly_agent/app/cli/helpers/certificate_authority.py,sha256=
|
31
|
+
stoobly_agent/app/cli/helpers/certificate_authority.py,sha256=viOVNN6cPFPQk_tHF2pQbW7wto5Prqk_tNjWIidIGuk,7271
|
32
32
|
stoobly_agent/app/cli/helpers/context.py,sha256=Jv97ueNnqea5UDm57VOUiQSHKWBeNlCcrq5-qW2tcwQ,1624
|
33
33
|
stoobly_agent/app/cli/helpers/endpoint_facade.py,sha256=_1TR9PcRnqpl9Q4njFHMM_Btqpr6cCf757FFcywa3oU,2318
|
34
34
|
stoobly_agent/app/cli/helpers/endpoints_apply_context.py,sha256=PvUzJLXNKl6wIQj2q8YZK1MAm1yqzDLLlpCYMoyWb9I,1831
|
@@ -67,7 +67,7 @@ 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=8YJtx0-PcnnNod31OaSv0K53Xb38pn2eDedj-a7QXCY,3665
|
71
71
|
stoobly_agent/app/cli/scaffold/app_command.py,sha256=o6WV6tcMGBWJsPFdV2DD-m1Dq0cy3Q3SESokaU5hgp4,2061
|
72
72
|
stoobly_agent/app/cli/scaffold/app_config.py,sha256=ZAHGovwxFy3zICfusj9_gUC_FBTIoB7KbPbQaGK8x1c,573
|
73
73
|
stoobly_agent/app/cli/scaffold/app_create_command.py,sha256=1qdKvRvJDmDmYERvbhaUapsglOOWPEHpCj0o7U7bQfo,550
|
@@ -80,15 +80,16 @@ stoobly_agent/app/cli/scaffold/docker/builder.py,sha256=lNOvDxoLB1L8KSDrvoG4CUuW
|
|
80
80
|
stoobly_agent/app/cli/scaffold/docker/constants.py,sha256=bYq2i3iib_YhdE-wtL42qnwPbtfgMSwtfGpT4nFT0fk,394
|
81
81
|
stoobly_agent/app/cli/scaffold/docker/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
82
|
stoobly_agent/app/cli/scaffold/docker/service/build_decorator.py,sha256=ZU7z4bkvdS3OK5O4fJhlA9_PNwnFtZW6t7vNF7V5obQ,1003
|
83
|
-
stoobly_agent/app/cli/scaffold/docker/service/builder.py,sha256=
|
83
|
+
stoobly_agent/app/cli/scaffold/docker/service/builder.py,sha256=vj7Vm7eK8E8DPtD4o5X0IJA4HPdgtA2lV2wm3nGTa1c,3207
|
84
84
|
stoobly_agent/app/cli/scaffold/docker/service/set_gateway_ports.py,sha256=jvlO5xjATNIp8Gr0yP2O7a68bOK-8cAiKNqRWCFzK1s,1221
|
85
85
|
stoobly_agent/app/cli/scaffold/docker/service/types.py,sha256=qB-yYHlu-PZDc0HYgTUvE5bWNpHxaSThC3JUG8okR1k,88
|
86
86
|
stoobly_agent/app/cli/scaffold/docker/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
87
|
stoobly_agent/app/cli/scaffold/docker/workflow/build_decorator.py,sha256=vbmME0cbN2EnNRlzQ2umj7Y3L7aZT-EHqEpkBFMfe8U,758
|
88
88
|
stoobly_agent/app/cli/scaffold/docker/workflow/builder.py,sha256=bnKOqqoKEYzmJkIJwDoNz60doE-nf1GlDC9BqciUtkg,7107
|
89
|
-
stoobly_agent/app/cli/scaffold/docker/workflow/decorators_factory.py,sha256=
|
89
|
+
stoobly_agent/app/cli/scaffold/docker/workflow/decorators_factory.py,sha256=oi0Hkii2W9338IeG7BG2medQxqZUbBp71Cvj-qDunII,987
|
90
|
+
stoobly_agent/app/cli/scaffold/docker/workflow/development_decorator.py,sha256=cs00Cc2DuOYrGD8W9849PjHz6k2xyx0fSizqJlM7yR8,946
|
90
91
|
stoobly_agent/app/cli/scaffold/docker/workflow/mock_decorator.py,sha256=D8PgYULERvWLaW1Vn3qspRTuNBoicuP2M1EZnQyvD_M,1080
|
91
|
-
stoobly_agent/app/cli/scaffold/docker/workflow/reverse_proxy_decorator.py,sha256=
|
92
|
+
stoobly_agent/app/cli/scaffold/docker/workflow/reverse_proxy_decorator.py,sha256=C7cHNmnqgvDCZh2gor1LvNicOL02_3L2bVx_DWIH2aA,1687
|
92
93
|
stoobly_agent/app/cli/scaffold/env.py,sha256=e-Ve4p3RUgzFx22B3SIYttvJ_yLuDtA27oDACZ8n-6E,1140
|
93
94
|
stoobly_agent/app/cli/scaffold/hosts_file_reader.py,sha256=gYkkrOlY7QG2JNsET6DKq4djrQAH0UGJtTkF7UwYT5o,1748
|
94
95
|
stoobly_agent/app/cli/scaffold/managed_services_docker_compose.py,sha256=-wLBXUi7DCWsfm5KzZzd_kdJKOTl1NT924XR7dyjbSY,574
|
@@ -103,7 +104,7 @@ stoobly_agent/app/cli/scaffold/service_workflow_validate_command.py,sha256=z7Z_v
|
|
103
104
|
stoobly_agent/app/cli/scaffold/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
104
105
|
stoobly_agent/app/cli/scaffold/templates/app/.Dockerfile.context,sha256=qvZFhJxfGAYMKr2VfYye5LX264phfl4cIfkS-TJs2-w,193
|
105
106
|
stoobly_agent/app/cli/scaffold/templates/app/.Dockerfile.proxy,sha256=HN2tv7dfJL9riJUrrtQRHZTC2QeSTf06tQ8aBhdHAaw,1027
|
106
|
-
stoobly_agent/app/cli/scaffold/templates/app/.Makefile,sha256=
|
107
|
+
stoobly_agent/app/cli/scaffold/templates/app/.Makefile,sha256=bgTrBzD5S5ulLtwJe2qS4YmFz8ev_uAM4KbPfaEDSBg,5578
|
107
108
|
stoobly_agent/app/cli/scaffold/templates/app/.docker-compose.base.yml,sha256=LNNuygX6hMtmElxaO6jTIYq3psYmxNv7xax7ra6JzO4,407
|
108
109
|
stoobly_agent/app/cli/scaffold/templates/app/Makefile,sha256=t7xRaCc9q3k7W34S0h9KX02GljSVwGpPnFmiLUvWxsw,80
|
109
110
|
stoobly_agent/app/cli/scaffold/templates/app/build/.config.yml,sha256=8Wt8ZZ5irvBYYS44xGrR_EWlZDuXH9kyWmquzsh7s8g,19
|
@@ -126,7 +127,7 @@ stoobly_agent/app/cli/scaffold/templates/app/build/test/bin/init,sha256=O7czui9G
|
|
126
127
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/.config.yml,sha256=T9VQz6OwAQpKdIoFrnfKAxuX_to0c6EhuWRLKM34Sr4,22
|
127
128
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/.docker-compose.base.yml,sha256=ZekJ2lHjnPPI7hV44x3_2JzJFbn2iao9ZLWCgENfTOo,341
|
128
129
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/.docker-compose.mock.yml,sha256=cxAJ7CrI3AeuzQs9qw3fDSHTfYTQ1Bw_0egfy_FYRJ8,684
|
129
|
-
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/.configure,sha256=
|
130
|
+
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/.configure,sha256=XuPxv-MprVjmv3S6WbJy9WsC3wizlx8TkFvNNhGyEJ8,254
|
130
131
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/.init,sha256=5xJbfpwGOmRj5lwK5e0JNlVpNd3WFUkZ0GaCUK40aDk,97
|
131
132
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/configure,sha256=Nme7aSLA-IH1NXgmqRMPzOlKcUSRXqZd-kcuZa47IEk,11
|
132
133
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/mock/bin/init,sha256=O7czui9GFHbcoEC5I9MwkRyZvDGY42IwlyQwIWcgylY,12
|
@@ -138,7 +139,7 @@ stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/bin/configure,sha
|
|
138
139
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/bin/init,sha256=O7czui9GFHbcoEC5I9MwkRyZvDGY42IwlyQwIWcgylY,12
|
139
140
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/record/docker-compose.yml,sha256=5n4bZBHI9MtwBF55ugu1RTdwMy7T6SsYGQ_3sulFUj8,595
|
140
141
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/.docker-compose.test.yml,sha256=ifPMJHPbAf6hI4vS1BWuzPOOt5SCaxHFnWA5BVnM9RY,685
|
141
|
-
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/.configure,sha256=
|
142
|
+
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/.configure,sha256=XuPxv-MprVjmv3S6WbJy9WsC3wizlx8TkFvNNhGyEJ8,254
|
142
143
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/.init,sha256=5xJbfpwGOmRj5lwK5e0JNlVpNd3WFUkZ0GaCUK40aDk,97
|
143
144
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/configure,sha256=Nme7aSLA-IH1NXgmqRMPzOlKcUSRXqZd-kcuZa47IEk,11
|
144
145
|
stoobly_agent/app/cli/scaffold/templates/app/entrypoint/test/bin/init,sha256=O7czui9GFHbcoEC5I9MwkRyZvDGY42IwlyQwIWcgylY,12
|
@@ -192,9 +193,9 @@ stoobly_agent/app/cli/scaffold/workflow_copy_command.py,sha256=R9hh5dWVz7vGld7pE
|
|
192
193
|
stoobly_agent/app/cli/scaffold/workflow_create_command.py,sha256=5xnRYrVb2KlSDARZFjLGGWeURXRu63OHoRLEhO-EAvw,3401
|
193
194
|
stoobly_agent/app/cli/scaffold/workflow_env.py,sha256=x8V5pJmIiklD3f2q2-qq-CORf4YaXYq_r2JpR2MmSwk,416
|
194
195
|
stoobly_agent/app/cli/scaffold/workflow_log_command.py,sha256=Bke4lMOMxuDUFuAx9nlXHbKgYMO4KAg9ASHvjz4aVWc,1372
|
195
|
-
stoobly_agent/app/cli/scaffold/workflow_run_command.py,sha256=
|
196
|
+
stoobly_agent/app/cli/scaffold/workflow_run_command.py,sha256=ICJZXBa93GwDmMqk_dWU6ACnpPUUa4YJcpFxozRCtDc,8283
|
196
197
|
stoobly_agent/app/cli/scaffold/workflow_validate_command.py,sha256=fhHciJXg_u32Wmh8us8LhgQj8D1SxkBADtuBBF4K0FM,4377
|
197
|
-
stoobly_agent/app/cli/scaffold_cli.py,sha256=
|
198
|
+
stoobly_agent/app/cli/scaffold_cli.py,sha256=3u5sj_bHW8AjokFNCeoX52hbLWB8gstXJjL26FiXZIM,19819
|
198
199
|
stoobly_agent/app/cli/scenario_cli.py,sha256=3J1EiJOvunkfWrEkOsanw-XrKkOk78ij_GjBlE9p7CE,8229
|
199
200
|
stoobly_agent/app/cli/snapshot_cli.py,sha256=XNxpTm5z3bnBGNGI3_XZIif0ypN62WqYfDmShL5fXg4,9965
|
200
201
|
stoobly_agent/app/cli/trace_cli.py,sha256=K7E-vx3JUcqEDSWOdIOi_AieKNQz7dBfmRrVvKDkzFI,4605
|
@@ -728,8 +729,8 @@ stoobly_agent/test/mock_data/scaffold/docker-compose-local-service.yml,sha256=x7
|
|
728
729
|
stoobly_agent/test/mock_data/scaffold/index.html,sha256=qJwuYajKZ4ihWZrJQ3BNObV5kf1VGnnm_vqlPJzdqLE,258
|
729
730
|
stoobly_agent/test/mock_data/uspto.yaml,sha256=6U5se7C3o-86J4m9xpOk9Npias399f5CbfWzR87WKwE,7835
|
730
731
|
stoobly_agent/test/test_helper.py,sha256=m_oAI7tmRYCNZdKfNqISWhMv3e44tjeYViQ3nTUfnos,1007
|
731
|
-
stoobly_agent-1.1.
|
732
|
-
stoobly_agent-1.1.
|
733
|
-
stoobly_agent-1.1.
|
734
|
-
stoobly_agent-1.1.
|
735
|
-
stoobly_agent-1.1.
|
732
|
+
stoobly_agent-1.1.4.dist-info/LICENSE,sha256=8QKGyy45eN76Zk52h8gu1DKX2B_gbWgZ3nzDLofEbaE,548
|
733
|
+
stoobly_agent-1.1.4.dist-info/METADATA,sha256=9i8olIJjI1kvmd2QFzku6bBYHov7OrXzfSrnpoerF2c,3384
|
734
|
+
stoobly_agent-1.1.4.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
735
|
+
stoobly_agent-1.1.4.dist-info/entry_points.txt,sha256=aq5wix5oC8MDQtmyPGU0xaFrsjJg7WH28NmXh2sc3Z8,56
|
736
|
+
stoobly_agent-1.1.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|