gluekit 1.0.1.dev1__tar.gz
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.
- gluekit-1.0.1.dev1/PKG-INFO +1176 -0
- gluekit-1.0.1.dev1/README.md +1158 -0
- gluekit-1.0.1.dev1/pyproject.toml +57 -0
- gluekit-1.0.1.dev1/setup.cfg +4 -0
- gluekit-1.0.1.dev1/src/gluekit/__init__.py +7 -0
- gluekit-1.0.1.dev1/src/gluekit/app.py +0 -0
- gluekit-1.0.1.dev1/src/gluekit/cli.py +64 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/__init__.py +1 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/add.py +455 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/build.py +816 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/checkout.py +114 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/clone.py +516 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/config_commands.py +180 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/constants.py +47 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/convert.py +336 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/edit.py +1104 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/helpers.py +1068 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/init.py +798 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/list.py +16 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/local_commands.py +680 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/pull.py +374 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/push.py +251 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/remove.py +161 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/run.py +126 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/status.py +97 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/sync.py +97 -0
- gluekit-1.0.1.dev1/src/gluekit/commands/update.py +104 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/__init__.py +0 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/glue_jobs.py +1323 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/magics.py +122 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/resources/__init__.py +0 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/resources/glue_job_schema.json +40341 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/resources/magic_map.json +83 -0
- gluekit-1.0.1.dev1/src/gluekit/job_mgmt/schema.py +165 -0
- gluekit-1.0.1.dev1/src/gluekit/local/__init__.py +6 -0
- gluekit-1.0.1.dev1/src/gluekit/local/awsglue/__init__.py +1 -0
- gluekit-1.0.1.dev1/src/gluekit/local/awsglue/context.py +30 -0
- gluekit-1.0.1.dev1/src/gluekit/local/awsglue/job.py +9 -0
- gluekit-1.0.1.dev1/src/gluekit/local/awsglue/utils.py +17 -0
- gluekit-1.0.1.dev1/src/gluekit/local/local.py +434 -0
- gluekit-1.0.1.dev1/src/gluekit/local/local_fixtures.py +337 -0
- gluekit-1.0.1.dev1/src/gluekit/local/pyspark/__init__.py +7 -0
- gluekit-1.0.1.dev1/src/gluekit/local/pyspark/context.py +31 -0
- gluekit-1.0.1.dev1/src/gluekit/local/pyspark/sql/__init__.py +6 -0
- gluekit-1.0.1.dev1/src/gluekit/local/pyspark/sql/session.py +29 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/PKG-INFO +1176 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/SOURCES.txt +67 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/dependency_links.txt +1 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/entry_points.txt +2 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/requires.txt +10 -0
- gluekit-1.0.1.dev1/src/gluekit.egg-info/top_level.txt +1 -0
- gluekit-1.0.1.dev1/tests/test_add.py +473 -0
- gluekit-1.0.1.dev1/tests/test_build.py +602 -0
- gluekit-1.0.1.dev1/tests/test_checkout.py +289 -0
- gluekit-1.0.1.dev1/tests/test_clone.py +165 -0
- gluekit-1.0.1.dev1/tests/test_convert.py +497 -0
- gluekit-1.0.1.dev1/tests/test_edit.py +350 -0
- gluekit-1.0.1.dev1/tests/test_init_auto.py +401 -0
- gluekit-1.0.1.dev1/tests/test_local.py +666 -0
- gluekit-1.0.1.dev1/tests/test_local_commands.py +267 -0
- gluekit-1.0.1.dev1/tests/test_magics.py +62 -0
- gluekit-1.0.1.dev1/tests/test_profile_params.py +223 -0
- gluekit-1.0.1.dev1/tests/test_pull.py +384 -0
- gluekit-1.0.1.dev1/tests/test_push.py +648 -0
- gluekit-1.0.1.dev1/tests/test_remove.py +98 -0
- gluekit-1.0.1.dev1/tests/test_run.py +179 -0
- gluekit-1.0.1.dev1/tests/test_schema.py +30 -0
- gluekit-1.0.1.dev1/tests/test_status.py +254 -0
- gluekit-1.0.1.dev1/tests/test_update.py +87 -0
|
@@ -0,0 +1,1176 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gluekit
|
|
3
|
+
Version: 1.0.1.dev1
|
|
4
|
+
Summary: A developer‑centric Glue CLI built to speed local iteration with git/uv‑style commands, while bridging to highly controlled (eg Fedramped) AWS consoles for PII‑sensitive runs and smoothing onboarding around Glue’s quirks—like the lack of script‑to‑notebook conversion and the friction of refactoring Glue scripts.
|
|
5
|
+
Author-email: Mike Kranz <kranz-michael@norc.org>
|
|
6
|
+
Keywords: python
|
|
7
|
+
Requires-Python: <4.0,>=3.10
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: boto3>=1.28.0
|
|
10
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
11
|
+
Requires-Dist: python-slugify>=8.0.4
|
|
12
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
13
|
+
Requires-Dist: rapidfuzz>=3.14.3
|
|
14
|
+
Requires-Dist: typer>=0.9.0
|
|
15
|
+
Provides-Extra: job-dev
|
|
16
|
+
Requires-Dist: moto[s3,ssm]>=5.1.16; extra == "job-dev"
|
|
17
|
+
Requires-Dist: sqlframe[duckdb]>=4.3.0; extra == "job-dev"
|
|
18
|
+
|
|
19
|
+
# gluekit
|
|
20
|
+
|
|
21
|
+
## Introduction
|
|
22
|
+
|
|
23
|
+
`gluekit` is reusable AWS Glue job tooling for local-first development. It is designed for teams that want Glue job definitions, scripts, notebooks, and supporting artifacts in source control while still being able to pull from AWS, edit safely, validate locally, and push intentional changes back.
|
|
24
|
+
|
|
25
|
+
The command line is meant to feel closer to `git` and `uv` than to a cloud console: quick local commands, explicit artifact layouts, checkout-style context, and conversion workflows that smooth over AWS Glue quirks without hiding the underlying AWS behavior. A major motivation is making script and notebook work interchangeable enough for day-to-day development while still respecting that Glue scripts and Glue interactive notebooks are not identical runtime surfaces.
|
|
26
|
+
|
|
27
|
+
**Local Development Emulators:** `gluekit` provides scoped `awsglue` and `pyspark` emulators during local runs, using [SQLFrame](https://sqlframe.readthedocs.io/) when available, so you can test jobs rapidly on your local machine without AWS compute. See the [Local Development](docs/local_development.md) documentation for more details.
|
|
28
|
+
|
|
29
|
+
## Suggested workflows
|
|
30
|
+
|
|
31
|
+
For AWS CLI-oriented setup, sync, and deployment recipes, start with the [AWS CLI recipes](docs/aws_cli_recipes/) folder, especially [docs/aws_cli_recipes/workflows.md](docs/aws_cli_recipes/workflows.md).
|
|
32
|
+
|
|
33
|
+
Common starting points:
|
|
34
|
+
|
|
35
|
+
- Pull a real Glue job into source control, edit the local script/config, and push selected artifacts back with `gluekit pull`, `gluekit checkout`, `gluekit edit`, and `gluekit push`.
|
|
36
|
+
- Use `gluekit local setup`, `gluekit local s3`, `gluekit local ssm`, and `gluekit run` to build a repeatable local test fixture before touching AWS.
|
|
37
|
+
- Keep account-specific values such as IAM roles, temp buckets, and script buckets in profile-scoped saved params so local configs can move between dev/prod-like AWS profiles without hand-editing generated artifacts.
|
|
38
|
+
|
|
39
|
+
## Script-based development with notebook interoperability
|
|
40
|
+
|
|
41
|
+
`gluekit` supports a script-first workflow that can still interoperate with notebooks. Python scripts can use `#%%` cell tags to mark notebook-like cells. These tags divide a `.py` file into executable notebook cells; Markdown cells can use `#%% [markdown]`. This follows the same family of conventions described by VS Code's [Python Interactive/Jupyter documentation](https://code.visualstudio.com/docs/python/jupyter-support-py#_convert-jupyter-notebooks-to-python-code-file), where Python files can contain Jupyter-style cell delimiters and be converted back into notebooks.
|
|
42
|
+
|
|
43
|
+
The intent is flexibility: you can develop in a normal Python file, use editor support for cell-by-cell execution, keep clean script diffs in git, and generate a Glue notebook when that is the deployment or debugging surface you need.
|
|
44
|
+
|
|
45
|
+
If you have already selected the job with checkout:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
gluekit checkout {jobname}
|
|
49
|
+
gluekit convert --from script --to notebook
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
If you have not checked out the job, pass it explicitly:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
gluekit convert {jobname} --from script --to notebook
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Gluekit vs AWS CLI terminology
|
|
59
|
+
|
|
60
|
+
Some `gluekit` commands look like AWS CLI commands, but the scope is different:
|
|
61
|
+
|
|
62
|
+
- `gluekit pull`, `gluekit push`, `gluekit build --push`, and `gluekit init` use real AWS Glue/S3 APIs. On those commands, `--profile` means an AWS CLI credential profile, the same profile name boto3 would use.
|
|
63
|
+
- `gluekit checkout --profile` and `gluekit config set --profile` update local gluekit state in `.gluekit/glue_set.json`. The value is a gluekit profile scope for saved params; it usually matches an AWS profile name, but those commands do not contact AWS.
|
|
64
|
+
- `gluekit local ...` and `gluekit run` are local test tooling. Their S3, SSM, region, job, and profile values are labels or mocked fixture values stored in JSON and used by local moto/boto3 mocks. They do not create, read, or delete real AWS resources.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
### If using `uv` as a global tool (recommended)
|
|
69
|
+
|
|
70
|
+
Ensure you have `uv` installed globally (see [uv installation docs](https://uv.pypa.io/en/latest/installation.html#installing-uv-globally)) and then run:
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
uv tool install https://github.com/NORCUChicago/gluekit.git
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### If using `pip`:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install https://github.com/NORCUChicago/gluekit.git
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Quick start
|
|
85
|
+
|
|
86
|
+
1. Install the AWS command line tool and configure your credentials. If using sso, need to log in with
|
|
87
|
+
```bash
|
|
88
|
+
aws sso login --profile your-profile-name
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
2. Right now, the best way to get started is to check out the [Command line help documentation](#command-line-help-documentation) below, which is auto-generated from the live CLI `--help` output and includes usage examples for each command.
|
|
93
|
+
|
|
94
|
+
## Quick start commands
|
|
95
|
+
|
|
96
|
+
### Glue job management
|
|
97
|
+
|
|
98
|
+
Initialize a workspace from your AWS CLI credential profiles:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
gluekit init
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Pull or check out the job you want to work on, then make focused config changes:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
gluekit checkout my-job --profile survey-dev
|
|
108
|
+
gluekit edit --role arn:aws:iam::111111111111:role/glue-dev --temp-dir s3://dev-bucket/tmp/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Add local artifacts or shared files to the checked-out job:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
gluekit add dist/my_pkg-0.0.1-py3-none-any.whl --package-whl
|
|
115
|
+
gluekit add glue/lib/helpers.py --as-path
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Convert between Glue scripts and notebooks when your workflow changes:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
gluekit convert my-job --from script --to notebook
|
|
122
|
+
gluekit convert my-job --from notebook --to script
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Build Python artifacts and optionally push the checked-out job updates:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
gluekit build
|
|
129
|
+
gluekit build --bump-version patch --package-whl --push
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Local Glue job development
|
|
133
|
+
|
|
134
|
+
Create and check out the local setup with mocked AWS resource mappings:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
gluekit local setup \
|
|
138
|
+
--profile local-dev \
|
|
139
|
+
--s3-root sources/s3 \
|
|
140
|
+
--s3-bucket local-dev=tests/fixtures \
|
|
141
|
+
--ssm-param /app/runtime=local
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Inspect the saved setup, add SSM parameters, and run the Glue script locally:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
gluekit local status
|
|
148
|
+
gluekit local ssm put /app/runtime local
|
|
149
|
+
gluekit run glue/scripts/my-job.py --glue-arg run_date=2026-06-18
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Use `--s3-root sources/s3` to map an entire mocked profile/account S3 namespace, where `sources/s3/{bucket}/{prefix/key}` appears as `s3://{bucket}/{prefix/key}`. Use `--s3-bucket` as `{s3 bucket in mocked profile}={local directory}` for a single bucket, and `--ssm-param` as `{ssm parameter in mocked profile}={local parameter value}`.
|
|
153
|
+
|
|
154
|
+
Local setup writes fixture data to `.gluekit/local.json` and records the active local settings under `checkout.local` in `.gluekit/glue_set.json`. The local `--profile` value is saved in both places as a cross-reference label for comparison and validation; `gluekit local setup` does not authenticate to AWS.
|
|
155
|
+
|
|
156
|
+
## Generated metadata
|
|
157
|
+
|
|
158
|
+
gluekit now includes two checked-in metadata artifacts used by notebook conversion and Glue job validation helpers:
|
|
159
|
+
|
|
160
|
+
- `src/gluekit/resources/glue_job_schema.json` is generated from the local botocore AWS Glue service model.
|
|
161
|
+
- `src/gluekit/resources/magic_map.json` is a curated mapping of Glue job config fields to AWS Glue Interactive Sessions magics.
|
|
162
|
+
|
|
163
|
+
The schema artifact is generated by:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
uv run python scripts/extract_glue_schema.py
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Rerun that script when changing schema-driven validation logic, when upgrading boto3/botocore in a way that could change the Glue service model, or when you need to refresh the checked-in schema after AWS Glue API changes.
|
|
170
|
+
|
|
171
|
+
The magic map is intentionally maintained by hand because it reflects documented notebook behavior rather than raw AWS API structure. When updating notebook conversion behavior, review the AWS Glue Interactive Sessions magics docs and keep `src/gluekit/resources/magic_map.json` in sync.
|
|
172
|
+
|
|
173
|
+
## edit workflow
|
|
174
|
+
|
|
175
|
+
`gluekit edit` is checkout-first. The default flow is to select a job once with `gluekit checkout my-job` and then run `gluekit edit ...` against that active local context.
|
|
176
|
+
|
|
177
|
+
Use `gluekit add` when you want the older inferred artifact behavior for local paths, wheels, zip files, and remote module specifiers. Use `gluekit update` when you need a raw property-path setter. Both remain available for compatibility, but `gluekit edit` is the primary mutation surface.
|
|
178
|
+
|
|
179
|
+
For the common package-wheel flow, run `gluekit add --package-whl` after building the project. It uses the single wheel matching `dist/*.whl`, routes it to `--additional-python-modules`, replaces the previously tracked `dist/*.whl` package wheel, updates `SourceControlDetails.AdditionalPythonFiles`, and refreshes an existing notebook's generated Glue magic cells.
|
|
180
|
+
|
|
181
|
+
If you need to target a different local config for one command, pass the job name directly to `gluekit edit <job-name> ...`, or keep using `gluekit add --job-name other-job <items...>` for the compatibility workflow. That stays parallel to GitHub CLI's context-first workflow, where a flag like `--repo` overrides the ambient target without changing the saved default context.
|
|
182
|
+
|
|
183
|
+
## Profile-specific params and build automation
|
|
184
|
+
|
|
185
|
+
Use profile-scoped saved params for account-dependent values such as IAM roles, script buckets, temp buckets, and other Glue default arguments. These are local gluekit param scopes saved in `.gluekit/glue_set.json`; they are only used as real AWS credential profiles by commands that call AWS, such as `pull`, `push`, `build --push`, and `init`.
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
gluekit config set my-job --profile survey-dev --Role=arn:aws:iam::111111111111:role/glue-dev
|
|
189
|
+
gluekit config set my-job --profile survey-prod --Role=arn:aws:iam::222222222222:role/glue-prod
|
|
190
|
+
gluekit config set my-job --profile survey-prod --command_script_location=s3://prod-bucket/scripts/my-job.py
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Then check out the job and gluekit profile scope together:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
gluekit checkout my-job --profile survey-prod
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
After a job is checked out, switch only the active profile scope with:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
gluekit checkout --profile survey-dev
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Checkout stores the active gluekit profile scope in `.gluekit/glue_set.json` and applies the matching saved params to the local config immediately, including mapped Glue config paths such as `Role`, `Command.ScriptLocation`, `DefaultArguments.*`, and `SourceControlDetails.*`. `gluekit pull` validates existing active profile mappings against the pulled config; if the active profile has no mappings yet but another profile exists for the job, pull detects and saves role plus S3/config mappings using the same profile comparison rules as `gluekit init`. `gluekit push` validates that the active profile mappings already align with the local config before uploading, and reports every mismatch instead of rewriting the config at push time. `gluekit pull`, `gluekit push`, and `gluekit build --push` also use the active profile value as the AWS CLI credential profile when `--profile` is not passed.
|
|
206
|
+
|
|
207
|
+
The common package release loop can now be a single command:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
gluekit build --bump-version patch --package-whl --push
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
That bumps `pyproject.toml`, builds artifacts, refreshes the checked-out job's tracked `dist/*.whl` in `--additional-python-modules`, applies active profile params before deriving S3 paths, and pushes the selected Glue artifacts/config. Use `--dry-run` to preview the build, wheel update, and push steps.
|
|
214
|
+
|
|
215
|
+
For first-time repository setup, `gluekit init` scans your AWS CLI config profiles, prompts for the Glue job to inspect in each selected profile, can save profile-specific role and S3 params locally, and sets the first checked-out job/profile scope.
|
|
216
|
+
|
|
217
|
+
### Command line help documentation
|
|
218
|
+
<!-- BEGIN: CLI_HELP -->
|
|
219
|
+
> Auto-generated from live CLI `--help` output.
|
|
220
|
+
|
|
221
|
+
### `gluekit --help`
|
|
222
|
+
|
|
223
|
+
```text
|
|
224
|
+
Usage: gluekit [OPTIONS] COMMAND [ARGS]...
|
|
225
|
+
|
|
226
|
+
Options:
|
|
227
|
+
--install-completion Install completion for the current shell.
|
|
228
|
+
--show-completion Show completion for the current shell, to copy it or
|
|
229
|
+
customize the installation.
|
|
230
|
+
--help Show this message and exit.
|
|
231
|
+
|
|
232
|
+
Commands:
|
|
233
|
+
build Build local artifacts; only touches AWS when --push is used.
|
|
234
|
+
checkout Replace the active local checkout selection.
|
|
235
|
+
edit Edit one local Glue job config with explicit mutation flags.
|
|
236
|
+
clone Clone local Glue job configurations and artifacts.
|
|
237
|
+
set Set reusable local key/value parameters for a Glue job.
|
|
238
|
+
convert Convert Glue jobs between script and notebook formats.
|
|
239
|
+
init Initialize local repo-level Gluekit settings from AWS CLI...
|
|
240
|
+
list List real AWS Glue jobs in the configured AWS account.
|
|
241
|
+
pull Download real AWS Glue job artifacts and config into the local...
|
|
242
|
+
push Upload local artifacts to real AWS Glue/S3 and optionally...
|
|
243
|
+
run Run a Glue script locally with emulated Glue libraries and...
|
|
244
|
+
remove Remove local Glue job configs and local artifacts.
|
|
245
|
+
status Show the active local checkout and its local-to-S3 artifact...
|
|
246
|
+
sync Sync generated Glue config metadata cells in local...
|
|
247
|
+
add Compatibility command for inferred artifact and module additions.
|
|
248
|
+
update Compatibility command for generic property updates.
|
|
249
|
+
config Show and set local reusable Glue config parameters.
|
|
250
|
+
local Manage local-only Glue development setups and mocked AWS fixtures.
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
### `gluekit pull --help`
|
|
255
|
+
|
|
256
|
+
```text
|
|
257
|
+
Usage: gluekit pull [OPTIONS] [JOB_NAME] [TARGET_JOB]
|
|
258
|
+
|
|
259
|
+
Download real AWS Glue job artifacts and config into the local workspace.
|
|
260
|
+
|
|
261
|
+
Arguments:
|
|
262
|
+
[JOB_NAME] Glue job name or pattern to pull. Use "*" for all jobs.
|
|
263
|
+
[TARGET_JOB] Optional local job name to write pulled artifacts to.
|
|
264
|
+
|
|
265
|
+
Options:
|
|
266
|
+
-f, --force Download even if the local config is newer or
|
|
267
|
+
equal to LastModifiedOn.
|
|
268
|
+
--dry-run Show what would be downloaded without writing
|
|
269
|
+
files.
|
|
270
|
+
-i, --include TEXT Include only specific components (config,
|
|
271
|
+
script, notebook, extra-py-files, extra-
|
|
272
|
+
files).
|
|
273
|
+
-x, --exclude TEXT Exclude specific components (config, script,
|
|
274
|
+
notebook, extra-py-files, extra-files).
|
|
275
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
276
|
+
[default: glue/configs]
|
|
277
|
+
--write-job-list / --no-write-job-list
|
|
278
|
+
Write glue/glue_full_job_list.csv during the
|
|
279
|
+
run. [default: write-job-list]
|
|
280
|
+
-p, --profile TEXT AWS CLI credential profile used for real AWS
|
|
281
|
+
Glue/S3 API calls; not a gluekit local test
|
|
282
|
+
profile.
|
|
283
|
+
--auto-login / --no-auto-login For real AWS profiles, automatically run 'aws
|
|
284
|
+
sso login' when credentials are missing or
|
|
285
|
+
expired. [default: auto-login]
|
|
286
|
+
--help Show this message and exit.
|
|
287
|
+
|
|
288
|
+
**Examples**
|
|
289
|
+
|
|
290
|
+
- `gluekit pull my-job --profile my-sso-profile`
|
|
291
|
+
|
|
292
|
+
- `gluekit pull source-job target-job --profile my-sso-profile`
|
|
293
|
+
|
|
294
|
+
- `gluekit pull "my-job-\*" --force --include config,script --exclude
|
|
295
|
+
notebook`
|
|
296
|
+
|
|
297
|
+
- `gluekit pull "\*" --dry-run --profile my-sso-profile --no-auto-login`
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
### `gluekit edit --help`
|
|
302
|
+
|
|
303
|
+
```text
|
|
304
|
+
Usage: gluekit edit [OPTIONS] [JOB_NAME]
|
|
305
|
+
|
|
306
|
+
Edit one local Glue job config with explicit mutation flags.
|
|
307
|
+
|
|
308
|
+
Arguments:
|
|
309
|
+
[JOB_NAME] Glue job name to edit. Defaults to the active checkout selection.
|
|
310
|
+
|
|
311
|
+
Options:
|
|
312
|
+
--description TEXT Set the job description.
|
|
313
|
+
--role TEXT Set the IAM role for the job.
|
|
314
|
+
--glue-version TEXT Set the Glue version.
|
|
315
|
+
--worker-type TEXT Set the worker type.
|
|
316
|
+
--number-of-workers INTEGER Set the number of workers.
|
|
317
|
+
--timeout INTEGER Set the job timeout in minutes.
|
|
318
|
+
--max-retries INTEGER Set the max retry count.
|
|
319
|
+
--execution-class TEXT Set the execution class.
|
|
320
|
+
--max-concurrent-runs INTEGER Set the max concurrent runs.
|
|
321
|
+
--job-run-queuing-enabled / --no-job-run-queuing-enabled
|
|
322
|
+
Enable or disable job run queuing.
|
|
323
|
+
--security-configuration TEXT Set the security configuration name.
|
|
324
|
+
--maintenance-window TEXT Set the maintenance window.
|
|
325
|
+
--log-uri TEXT Set the log URI.
|
|
326
|
+
--command-name TEXT Set Command.Name.
|
|
327
|
+
--python-version TEXT Set Command.PythonVersion.
|
|
328
|
+
--runtime TEXT Set Command.Runtime.
|
|
329
|
+
--remote-script-location TEXT Set Command.ScriptLocation.
|
|
330
|
+
--local-script-location TEXT Set SourceControlDetails.ScriptLocation.
|
|
331
|
+
--notebook-location TEXT Set SourceControlDetails.NotebookLocation and
|
|
332
|
+
NotebookPath.
|
|
333
|
+
--source-control-provider TEXT Set SourceControlDetails.Provider.
|
|
334
|
+
--source-control-owner TEXT Set SourceControlDetails.Owner.
|
|
335
|
+
--source-control-repository TEXT
|
|
336
|
+
Set SourceControlDetails.Repository.
|
|
337
|
+
--source-control-branch TEXT Set SourceControlDetails.Branch.
|
|
338
|
+
--source-control-folder TEXT Set SourceControlDetails.Folder.
|
|
339
|
+
--add-connection TEXT Add one or more Glue connections.
|
|
340
|
+
--remove-connection TEXT Remove one or more Glue connections.
|
|
341
|
+
--add-additional-python-modules TEXT
|
|
342
|
+
Add one or more values to --additional-python-
|
|
343
|
+
modules.
|
|
344
|
+
--remove-additional-python-modules TEXT
|
|
345
|
+
Remove one or more values from --additional-
|
|
346
|
+
python-modules.
|
|
347
|
+
--add-extra-py-files TEXT Track one or more local relative Python files
|
|
348
|
+
in SourceControlDetails.ExtraPyFiles and
|
|
349
|
+
--extra-py-files.
|
|
350
|
+
--remove-extra-py-files TEXT Remove one or more local relative Python files
|
|
351
|
+
from SourceControlDetails.ExtraPyFiles and
|
|
352
|
+
--extra-py-files.
|
|
353
|
+
--add-extra-jars TEXT Add one or more values to --extra-jars.
|
|
354
|
+
--remove-extra-jars TEXT Remove one or more values from --extra-jars.
|
|
355
|
+
--add-additional-python-files TEXT
|
|
356
|
+
Track one or more local paths in
|
|
357
|
+
SourceControlDetails.AdditionalPythonFiles and
|
|
358
|
+
--extra-py-files.
|
|
359
|
+
--remove-additional-python-files TEXT
|
|
360
|
+
Remove one or more local paths from
|
|
361
|
+
SourceControlDetails.AdditionalPythonFiles and
|
|
362
|
+
--extra-py-files.
|
|
363
|
+
--add-extra-files TEXT Track one or more local paths in
|
|
364
|
+
SourceControlDetails.ExtraFiles and --extra-
|
|
365
|
+
files.
|
|
366
|
+
--remove-extra-files TEXT Remove one or more local paths from
|
|
367
|
+
SourceControlDetails.ExtraFiles and --extra-
|
|
368
|
+
files.
|
|
369
|
+
--add-default-argument TEXT Set a DefaultArguments entry using KEY=VALUE.
|
|
370
|
+
Repeat as needed.
|
|
371
|
+
--remove-default-argument TEXT Remove a DefaultArguments entry by key. Repeat
|
|
372
|
+
as needed.
|
|
373
|
+
--add-non-overridable-argument TEXT
|
|
374
|
+
Set a NonOverridableArguments entry using
|
|
375
|
+
KEY=VALUE. Repeat as needed.
|
|
376
|
+
--remove-non-overridable-argument TEXT
|
|
377
|
+
Remove a NonOverridableArguments entry by key.
|
|
378
|
+
Repeat as needed.
|
|
379
|
+
--enable-metrics / --disable-metrics
|
|
380
|
+
Set DefaultArguments.--enable-metrics to true
|
|
381
|
+
or false.
|
|
382
|
+
--enable-observability-metrics / --disable-observability-metrics
|
|
383
|
+
Set DefaultArguments.--enable-observability-
|
|
384
|
+
metrics to true or false.
|
|
385
|
+
--enable-glue-datacatalog / --disable-glue-datacatalog
|
|
386
|
+
Set DefaultArguments.--enable-glue-datacatalog
|
|
387
|
+
to true or false.
|
|
388
|
+
--enable-continuous-cloudwatch-log / --disable-continuous-cloudwatch-log
|
|
389
|
+
Set DefaultArguments.--enable-continuous-
|
|
390
|
+
cloudwatch-log to true or false.
|
|
391
|
+
--enable-spark-ui / --disable-spark-ui
|
|
392
|
+
Set DefaultArguments.--enable-spark-ui to true
|
|
393
|
+
or false.
|
|
394
|
+
--enable-job-insights / --disable-job-insights
|
|
395
|
+
Set DefaultArguments.--enable-job-insights to
|
|
396
|
+
true or false.
|
|
397
|
+
--enable-auto-scaling / --disable-auto-scaling
|
|
398
|
+
Set DefaultArguments.--enable-auto-scaling to
|
|
399
|
+
true or false.
|
|
400
|
+
--job-bookmark-option TEXT Set DefaultArguments.--job-bookmark-option.
|
|
401
|
+
--temp-dir TEXT Set DefaultArguments.--TempDir.
|
|
402
|
+
--spark-event-logs-path TEXT Set DefaultArguments.--spark-event-logs-path.
|
|
403
|
+
--datalake-formats TEXT Set DefaultArguments.--datalake-formats.
|
|
404
|
+
--spark-conf TEXT Set DefaultArguments.--conf.
|
|
405
|
+
--continuous-log-log-group TEXT
|
|
406
|
+
Set DefaultArguments.--continuous-log-
|
|
407
|
+
logGroup.
|
|
408
|
+
--continuous-log-log-stream-prefix TEXT
|
|
409
|
+
Set DefaultArguments.--continuous-log-
|
|
410
|
+
logStreamPrefix.
|
|
411
|
+
--continuous-log-conversion-pattern TEXT
|
|
412
|
+
Set DefaultArguments.--continuous-log-
|
|
413
|
+
conversionPattern.
|
|
414
|
+
--executor-cores INTEGER Set DefaultArguments.--executor-cores.
|
|
415
|
+
--customer-driver-env-vars TEXT
|
|
416
|
+
Set DefaultArguments.--customer-driver-env-
|
|
417
|
+
vars.
|
|
418
|
+
--customer-executor-env-vars TEXT
|
|
419
|
+
Set DefaultArguments.--customer-executor-env-
|
|
420
|
+
vars.
|
|
421
|
+
--python-modules-installer-option TEXT
|
|
422
|
+
Set DefaultArguments.--python-modules-
|
|
423
|
+
installer-option.
|
|
424
|
+
--dry-run Show what would be updated without writing
|
|
425
|
+
files.
|
|
426
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
427
|
+
[default: glue/configs]
|
|
428
|
+
--help Show this message and exit.
|
|
429
|
+
|
|
430
|
+
**Examples**
|
|
431
|
+
|
|
432
|
+
- `gluekit edit my-job --description 'Updated job description' --glue-version
|
|
433
|
+
5.0`
|
|
434
|
+
|
|
435
|
+
- `gluekit edit --add-additional-python-files glue/libs/helper.py --add-extra-
|
|
436
|
+
files glue/resources/job.json`
|
|
437
|
+
|
|
438
|
+
- `gluekit edit my-job --temp-dir s3://bucket/tmp --remove-default-argument
|
|
439
|
+
legacy-arg --enable-metrics`
|
|
440
|
+
|
|
441
|
+
- `gluekit edit my-job --enable-auto-scaling --enable-job-insights --executor-
|
|
442
|
+
cores 8`
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
### `gluekit add --help`
|
|
447
|
+
|
|
448
|
+
```text
|
|
449
|
+
Usage: gluekit add [OPTIONS] [ARGS]...
|
|
450
|
+
|
|
451
|
+
Compatibility command for inferred artifact and module additions. Prefer edit
|
|
452
|
+
for explicit config changes.
|
|
453
|
+
|
|
454
|
+
Arguments:
|
|
455
|
+
[ARGS]... Paths or module specifiers to add to the selected Glue job config.
|
|
456
|
+
|
|
457
|
+
Options:
|
|
458
|
+
--job-name TEXT Override the active checked-out job for this command only.
|
|
459
|
+
--as-path Treat all items as local paths.
|
|
460
|
+
--as-pypi Treat all items as PyPI modules.
|
|
461
|
+
--package-whl Use the package wheel from dist/*.whl.
|
|
462
|
+
--dry-run Show what would be updated without writing files.
|
|
463
|
+
--config-dir PATH Directory containing Glue job config files. [default:
|
|
464
|
+
glue/configs]
|
|
465
|
+
--help Show this message and exit.
|
|
466
|
+
|
|
467
|
+
**Examples**
|
|
468
|
+
|
|
469
|
+
- `gluekit checkout my-job`
|
|
470
|
+
|
|
471
|
+
- `gluekit add dist/my-package.whl`
|
|
472
|
+
|
|
473
|
+
- `gluekit add --job-name other-job requests==2.32.3 --as-pypi`
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
### `gluekit convert --help`
|
|
478
|
+
|
|
479
|
+
```text
|
|
480
|
+
Usage: gluekit convert [OPTIONS] [JOB_NAME]
|
|
481
|
+
|
|
482
|
+
Convert Glue jobs between script and notebook formats.
|
|
483
|
+
|
|
484
|
+
Arguments:
|
|
485
|
+
[JOB_NAME] Glue job name to convert. Defaults to the active checkout
|
|
486
|
+
selection.
|
|
487
|
+
|
|
488
|
+
Options:
|
|
489
|
+
--from TEXT Source format (script or notebook). [default:
|
|
490
|
+
script]
|
|
491
|
+
--to TEXT Target format (script or notebook). [default:
|
|
492
|
+
notebook]
|
|
493
|
+
--use-config / --script-only Use config metadata (magics and paths) when
|
|
494
|
+
available. [default: use-config]
|
|
495
|
+
--dry-run Show what would be converted without writing
|
|
496
|
+
files.
|
|
497
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
498
|
+
[default: glue/configs]
|
|
499
|
+
--help Show this message and exit.
|
|
500
|
+
|
|
501
|
+
**Examples**
|
|
502
|
+
|
|
503
|
+
- `gluekit convert my-job --from script --to notebook --use-config`
|
|
504
|
+
|
|
505
|
+
- `gluekit convert my-job --from notebook --to script --script-only`
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
### `gluekit sync --help`
|
|
510
|
+
|
|
511
|
+
```text
|
|
512
|
+
Usage: gluekit sync [OPTIONS] [JOB_NAME]
|
|
513
|
+
|
|
514
|
+
Sync generated Glue config metadata cells in local script/notebook files.
|
|
515
|
+
|
|
516
|
+
Arguments:
|
|
517
|
+
[JOB_NAME] Glue job name to sync. Defaults to the active checkout selection.
|
|
518
|
+
|
|
519
|
+
Options:
|
|
520
|
+
--dry-run Show what would be updated without writing files.
|
|
521
|
+
--config-dir PATH Directory containing Glue job config files. [default:
|
|
522
|
+
glue/configs]
|
|
523
|
+
--help Show this message and exit.
|
|
524
|
+
|
|
525
|
+
**Examples**
|
|
526
|
+
|
|
527
|
+
- `gluekit sync my-job`
|
|
528
|
+
|
|
529
|
+
- `gluekit sync my-job --dry-run`
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
### `gluekit status --help`
|
|
534
|
+
|
|
535
|
+
```text
|
|
536
|
+
Usage: gluekit status [OPTIONS]
|
|
537
|
+
|
|
538
|
+
Show the active local checkout and its local-to-S3 artifact mappings.
|
|
539
|
+
|
|
540
|
+
Options:
|
|
541
|
+
--config-dir PATH Directory containing Glue job config files. [default:
|
|
542
|
+
glue/configs]
|
|
543
|
+
--help Show this message and exit.
|
|
544
|
+
|
|
545
|
+
**Examples**
|
|
546
|
+
|
|
547
|
+
- `gluekit status`
|
|
548
|
+
|
|
549
|
+
- `gluekit status --config-dir glue/configs`
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
### `gluekit run --help`
|
|
554
|
+
|
|
555
|
+
```text
|
|
556
|
+
Usage: gluekit run [OPTIONS] SCRIPT_PATH
|
|
557
|
+
|
|
558
|
+
Run a Glue script locally with emulated Glue libraries and mocked AWS
|
|
559
|
+
services.
|
|
560
|
+
|
|
561
|
+
Arguments:
|
|
562
|
+
SCRIPT_PATH Path to the Glue Python script to execute locally. [required]
|
|
563
|
+
|
|
564
|
+
Options:
|
|
565
|
+
--glue-arg TEXT Glue script argument in KEY=VALUE form; passed through
|
|
566
|
+
as --KEY VALUE.
|
|
567
|
+
--job-name TEXT Default JOB_NAME used when not provided in script args.
|
|
568
|
+
[default: local-glue-job]
|
|
569
|
+
--create-bucket TEXT Create a mocked S3 bucket only inside the local run.
|
|
570
|
+
Repeat as needed.
|
|
571
|
+
--ssm-parameter TEXT Seed a mocked SSM parameter only inside the local run as
|
|
572
|
+
NAME=VALUE. Repeat as needed.
|
|
573
|
+
--aws-region TEXT Mock AWS region used for local boto3 clients. Defaults
|
|
574
|
+
to us-east-1.
|
|
575
|
+
--config-file FILE Local fixture config file for mocked S3/SSM. Defaults to
|
|
576
|
+
.gluekit/local.json when local settings are checked out.
|
|
577
|
+
--help Show this message and exit.
|
|
578
|
+
|
|
579
|
+
**Examples**
|
|
580
|
+
|
|
581
|
+
- `gluekit run ../ppsc-survey/glue/scripts/job_a.py --create-bucket my-input-
|
|
582
|
+
bucket`
|
|
583
|
+
|
|
584
|
+
- `gluekit run glue/scripts/job-a.py --ssm-parameter /app/env=dev --glue-arg
|
|
585
|
+
report_date=2026-06-18`
|
|
586
|
+
|
|
587
|
+
- `gluekit run glue/scripts/job-a.py -- --JOB_NAME custom-local-job
|
|
588
|
+
--report_date 2026-06-18`
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
### `gluekit local --help`
|
|
593
|
+
|
|
594
|
+
```text
|
|
595
|
+
Usage: gluekit local [OPTIONS] COMMAND [ARGS]...
|
|
596
|
+
|
|
597
|
+
Manage local-only Glue development setups and mocked AWS fixtures.
|
|
598
|
+
|
|
599
|
+
Options:
|
|
600
|
+
--help Show this message and exit.
|
|
601
|
+
|
|
602
|
+
Commands:
|
|
603
|
+
setup Create or update and check out the local-only development setup.
|
|
604
|
+
status Show the active local development setup.
|
|
605
|
+
s3 Manage local mocked S3 fixture mappings; does not call AWS S3.
|
|
606
|
+
ssm Manage local mocked SSM Parameter Store values; does not call AWS...
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
### `gluekit local setup --help`
|
|
611
|
+
|
|
612
|
+
```text
|
|
613
|
+
Usage: gluekit local setup [OPTIONS]
|
|
614
|
+
|
|
615
|
+
Create or update and check out the local-only development setup.
|
|
616
|
+
|
|
617
|
+
Options:
|
|
618
|
+
--profile TEXT Optional gluekit/AWS profile name to associate with this
|
|
619
|
+
local setup in checkout state and .gluekit/local.json; this
|
|
620
|
+
command does not authenticate to AWS.
|
|
621
|
+
--s3-bucket TEXT Map a mocked S3 bucket to a local directory in {s3 bucket in
|
|
622
|
+
mocked profile}={local directory} form. Repeat as needed.
|
|
623
|
+
--s3-root PATH Map a local directory as the full mocked S3 namespace for
|
|
624
|
+
this setup/profile. Expected layout: {local s3
|
|
625
|
+
root}/{bucket}/{prefix/key}.
|
|
626
|
+
--ssm-param TEXT Map a mocked SSM parameter to a local value in {ssm
|
|
627
|
+
parameter in mocked profile}={local parameter value} form.
|
|
628
|
+
Repeat as needed.
|
|
629
|
+
--help Show this message and exit.
|
|
630
|
+
|
|
631
|
+
**Examples**
|
|
632
|
+
|
|
633
|
+
- `gluekit local setup --profile local-dev --s3-root sources/s3`
|
|
634
|
+
|
|
635
|
+
- `gluekit local setup --s3-bucket local-dev=tests/fixtures`
|
|
636
|
+
|
|
637
|
+
- `gluekit local setup --ssm-param /app/runtime=local`
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
### `gluekit local status --help`
|
|
642
|
+
|
|
643
|
+
```text
|
|
644
|
+
Usage: gluekit local status [OPTIONS]
|
|
645
|
+
|
|
646
|
+
Show the active local development setup.
|
|
647
|
+
|
|
648
|
+
Options:
|
|
649
|
+
--help Show this message and exit.
|
|
650
|
+
|
|
651
|
+
**Examples**
|
|
652
|
+
|
|
653
|
+
- `gluekit local status`
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
### `gluekit local s3 --help`
|
|
658
|
+
|
|
659
|
+
```text
|
|
660
|
+
Usage: gluekit local s3 [OPTIONS] COMMAND [ARGS]...
|
|
661
|
+
|
|
662
|
+
Manage local mocked S3 fixture mappings; does not call AWS S3.
|
|
663
|
+
|
|
664
|
+
Options:
|
|
665
|
+
--help Show this message and exit.
|
|
666
|
+
|
|
667
|
+
Commands:
|
|
668
|
+
cp Copy a local file or mocked S3 object in the fixture config;...
|
|
669
|
+
mount Map a local directory recursively into mocked S3 keys; does not...
|
|
670
|
+
unmount Remove a recursive local-directory-to-mocked-S3 mapping.
|
|
671
|
+
mv Move a local file or mocked S3 object in the fixture config;...
|
|
672
|
+
rm Remove mapped mocked S3 objects from the local fixture config.
|
|
673
|
+
ls List mocked S3 buckets inferred from mappings, or mapped objects.
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
### `gluekit local s3 cp --help`
|
|
678
|
+
|
|
679
|
+
```text
|
|
680
|
+
Usage: gluekit local s3 cp [OPTIONS] SOURCE DESTINATION
|
|
681
|
+
|
|
682
|
+
Copy a local file or mocked S3 object in the fixture config; does not call
|
|
683
|
+
AWS.
|
|
684
|
+
|
|
685
|
+
Arguments:
|
|
686
|
+
SOURCE Local path or mocked S3 URI source. [required]
|
|
687
|
+
DESTINATION Local path or mocked S3 URI destination. [required]
|
|
688
|
+
|
|
689
|
+
Options:
|
|
690
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
691
|
+
.gluekit/local.json.
|
|
692
|
+
--help Show this message and exit.
|
|
693
|
+
|
|
694
|
+
**Examples**
|
|
695
|
+
|
|
696
|
+
- `gluekit local s3 cp tests/fixtures/input.json s3://my-bucket/input.json`
|
|
697
|
+
|
|
698
|
+
- `gluekit local s3 cp s3://my-bucket/input.json s3://my-bucket/copy.json`
|
|
699
|
+
|
|
700
|
+
- `gluekit local s3 cp s3://my-bucket/input.json tmp/input.json`
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
### `gluekit local s3 mount --help`
|
|
705
|
+
|
|
706
|
+
```text
|
|
707
|
+
Usage: gluekit local s3 mount [OPTIONS] SOURCE_DIR DESTINATION
|
|
708
|
+
|
|
709
|
+
Map a local directory recursively into mocked S3 keys; does not call AWS.
|
|
710
|
+
|
|
711
|
+
Arguments:
|
|
712
|
+
SOURCE_DIR Local directory to map recursively. [required]
|
|
713
|
+
DESTINATION Mocked S3 bucket or prefix base for mapped files. [required]
|
|
714
|
+
|
|
715
|
+
Options:
|
|
716
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
717
|
+
.gluekit/local.json.
|
|
718
|
+
--help Show this message and exit.
|
|
719
|
+
|
|
720
|
+
**Examples**
|
|
721
|
+
|
|
722
|
+
- `gluekit local s3 mount tests/fixtures s3://local-dev/input/`
|
|
723
|
+
|
|
724
|
+
- `gluekit local s3 mount data/mock s3://bucket-a`
|
|
725
|
+
```
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
### `gluekit local s3 unmount --help`
|
|
729
|
+
|
|
730
|
+
```text
|
|
731
|
+
Usage: gluekit local s3 unmount [OPTIONS] TARGET
|
|
732
|
+
|
|
733
|
+
Remove a recursive local-directory-to-mocked-S3 mapping.
|
|
734
|
+
|
|
735
|
+
Arguments:
|
|
736
|
+
TARGET Local source directory or mocked S3 destination to remove. [required]
|
|
737
|
+
|
|
738
|
+
Options:
|
|
739
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
740
|
+
.gluekit/local.json.
|
|
741
|
+
--help Show this message and exit.
|
|
742
|
+
|
|
743
|
+
**Examples**
|
|
744
|
+
|
|
745
|
+
- `gluekit local s3 unmount tests/fixtures`
|
|
746
|
+
|
|
747
|
+
- `gluekit local s3 unmount s3://local-dev/input/`
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
### `gluekit local s3 mv --help`
|
|
752
|
+
|
|
753
|
+
```text
|
|
754
|
+
Usage: gluekit local s3 mv [OPTIONS] SOURCE DESTINATION
|
|
755
|
+
|
|
756
|
+
Move a local file or mocked S3 object in the fixture config; does not call
|
|
757
|
+
AWS.
|
|
758
|
+
|
|
759
|
+
Arguments:
|
|
760
|
+
SOURCE Local path or mocked S3 URI source. [required]
|
|
761
|
+
DESTINATION Local path or mocked S3 URI destination. [required]
|
|
762
|
+
|
|
763
|
+
Options:
|
|
764
|
+
--delete-local Delete the local source file after mapping a LocalPath to
|
|
765
|
+
S3.
|
|
766
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
767
|
+
.gluekit/local.json.
|
|
768
|
+
--help Show this message and exit.
|
|
769
|
+
|
|
770
|
+
**Examples**
|
|
771
|
+
|
|
772
|
+
- `gluekit local s3 mv s3://my-bucket/input.json s3://my-bucket/renamed.json`
|
|
773
|
+
|
|
774
|
+
- `gluekit local s3 mv s3://my-bucket/input.json tmp/input.json`
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
### `gluekit local s3 rm --help`
|
|
779
|
+
|
|
780
|
+
```text
|
|
781
|
+
Usage: gluekit local s3 rm [OPTIONS] URI
|
|
782
|
+
|
|
783
|
+
Remove mapped mocked S3 objects from the local fixture config.
|
|
784
|
+
|
|
785
|
+
Arguments:
|
|
786
|
+
URI Mapped mocked S3 object or prefix to remove. [required]
|
|
787
|
+
|
|
788
|
+
Options:
|
|
789
|
+
-r, --recursive Remove all mapped objects under the S3 prefix.
|
|
790
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
791
|
+
.gluekit/local.json.
|
|
792
|
+
--help Show this message and exit.
|
|
793
|
+
|
|
794
|
+
**Examples**
|
|
795
|
+
|
|
796
|
+
- `gluekit local s3 rm s3://my-bucket/input.json`
|
|
797
|
+
|
|
798
|
+
- `gluekit local s3 rm s3://my-bucket/prefix/ --recursive`
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
### `gluekit local ssm --help`
|
|
803
|
+
|
|
804
|
+
```text
|
|
805
|
+
Usage: gluekit local ssm [OPTIONS] COMMAND [ARGS]...
|
|
806
|
+
|
|
807
|
+
Manage local mocked SSM Parameter Store values; does not call AWS SSM.
|
|
808
|
+
|
|
809
|
+
Options:
|
|
810
|
+
--help Show this message and exit.
|
|
811
|
+
|
|
812
|
+
Commands:
|
|
813
|
+
put Create or update a mocked SSM parameter with local-only syntax.
|
|
814
|
+
get Show one mocked SSM parameter with local-only syntax.
|
|
815
|
+
rm Delete one mocked SSM parameter with local-only syntax.
|
|
816
|
+
ls List mocked SSM parameters with local-only syntax.
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
### `gluekit local ssm put --help`
|
|
821
|
+
|
|
822
|
+
```text
|
|
823
|
+
Usage: gluekit local ssm put [OPTIONS] NAME VALUE
|
|
824
|
+
|
|
825
|
+
Create or update a mocked SSM parameter with local-only syntax.
|
|
826
|
+
|
|
827
|
+
Arguments:
|
|
828
|
+
NAME Mocked SSM parameter name. [required]
|
|
829
|
+
VALUE Mocked SSM parameter value. [required]
|
|
830
|
+
|
|
831
|
+
Options:
|
|
832
|
+
--overwrite / --no-overwrite Overwrite an existing parameter. [default:
|
|
833
|
+
overwrite]
|
|
834
|
+
--config-file PATH Local fixture config file to update. Defaults to
|
|
835
|
+
.gluekit/local.json.
|
|
836
|
+
--help Show this message and exit.
|
|
837
|
+
|
|
838
|
+
**Examples**
|
|
839
|
+
|
|
840
|
+
- `gluekit local ssm put /app/env dev`
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
### `gluekit build --help`
|
|
845
|
+
|
|
846
|
+
```text
|
|
847
|
+
Usage: gluekit build [OPTIONS]
|
|
848
|
+
|
|
849
|
+
Build local artifacts; only touches AWS when --push is used.
|
|
850
|
+
|
|
851
|
+
Options:
|
|
852
|
+
--job-name TEXT Checked-out or explicit local Glue job to
|
|
853
|
+
update when using --package-whl or --push.
|
|
854
|
+
--dry-run Show what would be built and zipped without
|
|
855
|
+
running build commands.
|
|
856
|
+
--bump-version, --bump TEXT Bump pyproject.toml [project].version before
|
|
857
|
+
building: major, minor, patch, or X.Y.Z.
|
|
858
|
+
--build-tool TEXT Build frontend to use: auto, uv, or build.
|
|
859
|
+
[default: auto]
|
|
860
|
+
--out-dir PATH The output directory to which distributions
|
|
861
|
+
should be written.
|
|
862
|
+
--no-version-suffix Remove the version suffix from generated zip
|
|
863
|
+
artifact names.
|
|
864
|
+
-v, --verbose Print build commands before execution.
|
|
865
|
+
--package-whl After building, replace the tracked dist/*.whl
|
|
866
|
+
in the selected Glue config.
|
|
867
|
+
--push Push the selected Glue config and artifacts
|
|
868
|
+
after building.
|
|
869
|
+
-i, --include TEXT For --push, include only specific components
|
|
870
|
+
(script, notebook, additional-python-modules,
|
|
871
|
+
extra-files, job-config).
|
|
872
|
+
-x, --exclude TEXT For --push, exclude specific components
|
|
873
|
+
(script, notebook, additional-python-modules,
|
|
874
|
+
extra-files, job-config).
|
|
875
|
+
--update-config / --no-update-config
|
|
876
|
+
For --push, update Glue job configuration
|
|
877
|
+
after uploading files. [default: update-
|
|
878
|
+
config]
|
|
879
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
880
|
+
[default: glue/configs]
|
|
881
|
+
-p, --profile TEXT AWS CLI credential profile for profile-scoped
|
|
882
|
+
config params and, with --push, real AWS
|
|
883
|
+
Glue/S3 API calls.
|
|
884
|
+
--auto-login / --no-auto-login For --push with a real AWS profile,
|
|
885
|
+
automatically run 'aws sso login' when
|
|
886
|
+
credentials are missing or expired. [default:
|
|
887
|
+
auto-login]
|
|
888
|
+
--help Show this message and exit.
|
|
889
|
+
|
|
890
|
+
**Examples**
|
|
891
|
+
|
|
892
|
+
- `gluekit build`
|
|
893
|
+
|
|
894
|
+
- `gluekit build --build-tool uv`
|
|
895
|
+
|
|
896
|
+
- `gluekit build --out-dir build/artifacts --no-version-suffix`
|
|
897
|
+
|
|
898
|
+
- `gluekit build --build-tool build --dry-run`
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
### `gluekit push --help`
|
|
903
|
+
|
|
904
|
+
```text
|
|
905
|
+
Usage: gluekit push [OPTIONS] [JOB_NAME] [TARGET_JOB]
|
|
906
|
+
|
|
907
|
+
Upload local artifacts to real AWS Glue/S3 and optionally update the job
|
|
908
|
+
config.
|
|
909
|
+
|
|
910
|
+
Arguments:
|
|
911
|
+
[JOB_NAME] Glue job name or pattern to push. Use "*" for all configs.
|
|
912
|
+
[TARGET_JOB] Optional remote Glue job name to push to.
|
|
913
|
+
|
|
914
|
+
Options:
|
|
915
|
+
--dry-run Show what would be uploaded without writing
|
|
916
|
+
files.
|
|
917
|
+
-i, --include TEXT Include only specific components (script,
|
|
918
|
+
notebook, additional-python-modules, extra-
|
|
919
|
+
files, job-config).
|
|
920
|
+
-x, --exclude TEXT Exclude specific components (script, notebook,
|
|
921
|
+
additional-python-modules, extra-files, job-
|
|
922
|
+
config).
|
|
923
|
+
--update-config / --no-update-config
|
|
924
|
+
Update Glue job configuration after uploading
|
|
925
|
+
files. [default: update-config]
|
|
926
|
+
--build Build local package artifacts in the workspace
|
|
927
|
+
root before push.
|
|
928
|
+
--build-tool TEXT Build frontend for --build: auto, uv, or
|
|
929
|
+
build. [default: auto]
|
|
930
|
+
-v, --verbose Print local build command(s) before execution.
|
|
931
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
932
|
+
[default: glue/configs]
|
|
933
|
+
-p, --profile TEXT AWS CLI credential profile used for real AWS
|
|
934
|
+
Glue/S3 API calls; not a gluekit local test
|
|
935
|
+
profile.
|
|
936
|
+
--auto-login / --no-auto-login For real AWS profiles, automatically run 'aws
|
|
937
|
+
sso login' when credentials are missing or
|
|
938
|
+
expired. [default: auto-login]
|
|
939
|
+
--help Show this message and exit.
|
|
940
|
+
|
|
941
|
+
**Examples**
|
|
942
|
+
|
|
943
|
+
- `gluekit push my-job --profile my-sso-profile`
|
|
944
|
+
|
|
945
|
+
- `gluekit push source-job target-job --profile my-sso-profile`
|
|
946
|
+
|
|
947
|
+
- `gluekit push "my-job-\*" --include script,job-config --exclude notebook`
|
|
948
|
+
|
|
949
|
+
- `gluekit push my-job --build --build-tool auto --dry-run`
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
### `gluekit set --help`
|
|
954
|
+
|
|
955
|
+
```text
|
|
956
|
+
Usage: gluekit set [OPTIONS] [JOB_NAME]
|
|
957
|
+
|
|
958
|
+
Set reusable local key/value parameters for a Glue job.
|
|
959
|
+
|
|
960
|
+
Arguments:
|
|
961
|
+
[JOB_NAME] Glue job name to save params for.
|
|
962
|
+
|
|
963
|
+
Options:
|
|
964
|
+
--global Save params as global defaults for all jobs.
|
|
965
|
+
-p, --profile TEXT Save params under this gluekit profile scope, usually
|
|
966
|
+
matching an AWS CLI profile name; does not contact AWS.
|
|
967
|
+
--help Show this message and exit.
|
|
968
|
+
|
|
969
|
+
**Examples**
|
|
970
|
+
|
|
971
|
+
- `gluekit set my-job --script_location glue/scripts/my-job.py --extra_files
|
|
972
|
+
s3://my-bucket/shared/config.json`
|
|
973
|
+
|
|
974
|
+
- `gluekit pull my-job --profile my-sso-profile`
|
|
975
|
+
|
|
976
|
+
- `gluekit set --global --additional_python_modules "pydantic==2.11.7"`
|
|
977
|
+
|
|
978
|
+
- `gluekit push "my-job-\*" --profile my-sso-profile`
|
|
979
|
+
|
|
980
|
+
- `gluekit config set my-job --default_arguments.--TempDir s3://my-
|
|
981
|
+
bucket/tmp/`
|
|
982
|
+
|
|
983
|
+
- `gluekit config get my-job`
|
|
984
|
+
|
|
985
|
+
- `gluekit config get`
|
|
986
|
+
|
|
987
|
+
- `gluekit set my-job --extra_py_files s3://my-
|
|
988
|
+
bucket/dist/gluekit-0.0.1-py3-none-any.whl`
|
|
989
|
+
|
|
990
|
+
- `gluekit push my-job --build --build-tool auto --profile my-sso-profile`
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
### `gluekit config --help`
|
|
995
|
+
|
|
996
|
+
```text
|
|
997
|
+
Usage: gluekit config [OPTIONS] COMMAND [ARGS]...
|
|
998
|
+
|
|
999
|
+
Show and set local reusable Glue config parameters.
|
|
1000
|
+
|
|
1001
|
+
Options:
|
|
1002
|
+
--help Show this message and exit.
|
|
1003
|
+
|
|
1004
|
+
Commands:
|
|
1005
|
+
set Set reusable local Glue config params by job or globally.
|
|
1006
|
+
get Show stored local Glue config params.
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
### `gluekit config set --help`
|
|
1011
|
+
|
|
1012
|
+
```text
|
|
1013
|
+
Usage: gluekit config set [OPTIONS] [JOB_NAME]
|
|
1014
|
+
|
|
1015
|
+
Set reusable local Glue config params by job or globally.
|
|
1016
|
+
|
|
1017
|
+
Arguments:
|
|
1018
|
+
[JOB_NAME] Glue job name to save params for.
|
|
1019
|
+
|
|
1020
|
+
Options:
|
|
1021
|
+
--global Save params as global defaults for all jobs.
|
|
1022
|
+
-p, --profile TEXT Save params under this gluekit profile scope, usually
|
|
1023
|
+
matching an AWS CLI profile name; does not contact AWS.
|
|
1024
|
+
--help Show this message and exit.
|
|
1025
|
+
|
|
1026
|
+
**Examples**
|
|
1027
|
+
|
|
1028
|
+
- `gluekit config set my-job --default_arguments.--TempDir s3://my-
|
|
1029
|
+
bucket/tmp/`
|
|
1030
|
+
|
|
1031
|
+
- `gluekit config set --global --additional_python_modules "pydantic==2.11.7"`
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
### `gluekit config get --help`
|
|
1036
|
+
|
|
1037
|
+
```text
|
|
1038
|
+
Usage: gluekit config get [OPTIONS] [JOB_NAME]
|
|
1039
|
+
|
|
1040
|
+
Show stored local Glue config params.
|
|
1041
|
+
|
|
1042
|
+
Arguments:
|
|
1043
|
+
[JOB_NAME] Optional Glue job name to view merged params (global + job).
|
|
1044
|
+
|
|
1045
|
+
Options:
|
|
1046
|
+
-p, --profile TEXT Include params from this gluekit profile scope, usually
|
|
1047
|
+
matching an AWS CLI profile name; does not contact AWS.
|
|
1048
|
+
--help Show this message and exit.
|
|
1049
|
+
|
|
1050
|
+
**Examples**
|
|
1051
|
+
|
|
1052
|
+
- `gluekit config get my-job`
|
|
1053
|
+
|
|
1054
|
+
- `gluekit config get`
|
|
1055
|
+
```
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
### `gluekit list --help`
|
|
1059
|
+
|
|
1060
|
+
```text
|
|
1061
|
+
Usage: gluekit list [OPTIONS]
|
|
1062
|
+
|
|
1063
|
+
List real AWS Glue jobs in the configured AWS account.
|
|
1064
|
+
|
|
1065
|
+
Options:
|
|
1066
|
+
--help Show this message and exit.
|
|
1067
|
+
|
|
1068
|
+
**Examples**
|
|
1069
|
+
|
|
1070
|
+
- `gluekit list --help`
|
|
1071
|
+
|
|
1072
|
+
- `gluekit init --help`
|
|
1073
|
+
```
|
|
1074
|
+
|
|
1075
|
+
|
|
1076
|
+
### `gluekit init --help`
|
|
1077
|
+
|
|
1078
|
+
```text
|
|
1079
|
+
Usage: gluekit init [OPTIONS]
|
|
1080
|
+
|
|
1081
|
+
Initialize local repo-level Gluekit settings from AWS CLI profiles.
|
|
1082
|
+
|
|
1083
|
+
Options:
|
|
1084
|
+
--aws-config PATH Local AWS CLI config file to scan for
|
|
1085
|
+
credential profile names; defaults to
|
|
1086
|
+
AWS_CONFIG_FILE or ~/.aws/config.
|
|
1087
|
+
--config-dir PATH Directory containing Glue job config files.
|
|
1088
|
+
[default: glue/configs]
|
|
1089
|
+
--auto-login / --no-auto-login For selected real AWS profiles, automatically
|
|
1090
|
+
run 'aws sso login' when credentials are
|
|
1091
|
+
missing or expired. [default: auto-login]
|
|
1092
|
+
--detect-roles / --no-detect-roles
|
|
1093
|
+
Fetch the selected real AWS Glue job in each
|
|
1094
|
+
profile and save its Role as local gluekit
|
|
1095
|
+
params. [default: detect-roles]
|
|
1096
|
+
--detect-buckets / --no-detect-buckets
|
|
1097
|
+
Compare S3 URIs in real AWS Glue job configs
|
|
1098
|
+
across profiles and save local gluekit profile
|
|
1099
|
+
mappings. [default: detect-buckets]
|
|
1100
|
+
--match-threshold INTEGER Minimum rapidfuzz score for non-exact S3 key
|
|
1101
|
+
matches. [default: 85]
|
|
1102
|
+
--baseline-profile TEXT Selected AWS CLI profile to store as the first
|
|
1103
|
+
gluekit checkout scope and S3 comparison
|
|
1104
|
+
baseline.
|
|
1105
|
+
--profile-job TEXT Real AWS Glue job to inspect for an AWS CLI
|
|
1106
|
+
profile, as PROFILE=GLUE_JOB_NAME. May be
|
|
1107
|
+
repeated.
|
|
1108
|
+
--help Show this message and exit.
|
|
1109
|
+
|
|
1110
|
+
**Examples**
|
|
1111
|
+
|
|
1112
|
+
- `gluekit init`
|
|
1113
|
+
```
|
|
1114
|
+
<!-- END: CLI_HELP -->
|
|
1115
|
+
|
|
1116
|
+
## Getting started with your project
|
|
1117
|
+
|
|
1118
|
+
### 1. Create a New Repository
|
|
1119
|
+
|
|
1120
|
+
First, create a repository on GitHub with the same name as this project, and then run the following commands:
|
|
1121
|
+
|
|
1122
|
+
```bash
|
|
1123
|
+
git init -b main
|
|
1124
|
+
git add .
|
|
1125
|
+
git commit -m "init commit"
|
|
1126
|
+
git remote add origin git@github.com:mbkranz/gluekit.git
|
|
1127
|
+
git push -u origin main
|
|
1128
|
+
```
|
|
1129
|
+
|
|
1130
|
+
### 2. Set Up Your Development Environment
|
|
1131
|
+
|
|
1132
|
+
Then, install the environment and the pre-commit hooks with
|
|
1133
|
+
|
|
1134
|
+
```bash
|
|
1135
|
+
make install
|
|
1136
|
+
```
|
|
1137
|
+
|
|
1138
|
+
This will also generate your `uv.lock` file
|
|
1139
|
+
|
|
1140
|
+
### 3. Run the pre-commit hooks
|
|
1141
|
+
|
|
1142
|
+
Initially, the CI/CD pipeline might be failing due to formatting issues. To resolve those run:
|
|
1143
|
+
|
|
1144
|
+
```bash
|
|
1145
|
+
uv run pre-commit run -a
|
|
1146
|
+
```
|
|
1147
|
+
|
|
1148
|
+
### 4. Commit the changes
|
|
1149
|
+
|
|
1150
|
+
Lastly, commit the changes made by the two steps above to your repository.
|
|
1151
|
+
|
|
1152
|
+
```bash
|
|
1153
|
+
git add .
|
|
1154
|
+
git commit -m 'Fix formatting issues'
|
|
1155
|
+
git push origin main
|
|
1156
|
+
```
|
|
1157
|
+
|
|
1158
|
+
You are now ready to start development on your project!
|
|
1159
|
+
The CI/CD pipeline will be triggered when you open a pull request, merge to main, or when you create a new release.
|
|
1160
|
+
|
|
1161
|
+
To finalize the set-up for publishing to PyPI, see [here](https://fpgmaas.github.io/cookiecutter-uv/features/publishing/#set-up-for-pypi).
|
|
1162
|
+
For activating the automatic documentation with MkDocs, see [here](https://fpgmaas.github.io/cookiecutter-uv/features/mkdocs/#enabling-the-documentation-on-github).
|
|
1163
|
+
To enable the code coverage reports, see [here](https://fpgmaas.github.io/cookiecutter-uv/features/codecov/).
|
|
1164
|
+
|
|
1165
|
+
## Releasing a new version
|
|
1166
|
+
|
|
1167
|
+
- Create an API Token on [PyPI](https://pypi.org/).
|
|
1168
|
+
- Add the API Token to your projects secrets with the name `PYPI_TOKEN` by visiting [this page](https://github.com/mbkranz/gluekit/settings/secrets/actions/new).
|
|
1169
|
+
- Create a [new release](https://github.com/mbkranz/gluekit/releases/new) on Github.
|
|
1170
|
+
- Create a new tag in the form `*.*.*`.
|
|
1171
|
+
|
|
1172
|
+
For more details, see [here](https://fpgmaas.github.io/cookiecutter-uv/features/cicd/#how-to-trigger-a-release).
|
|
1173
|
+
|
|
1174
|
+
---
|
|
1175
|
+
|
|
1176
|
+
Repository initiated with [fpgmaas/cookiecutter-uv](https://github.com/fpgmaas/cookiecutter-uv).
|