intflow-authctl 0.2.0__tar.gz → 0.2.2__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.
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/.gitignore +8 -8
- intflow_authctl-0.2.2/PKG-INFO +136 -0
- intflow_authctl-0.2.2/README.md +115 -0
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/pyproject.toml +86 -86
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/__init__.py +3 -3
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/api_client.py +146 -141
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/audit.py +39 -39
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/cli.py +57 -57
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/clients.py +180 -173
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/command_utils.py +36 -36
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/commands.py +308 -234
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/config.py +270 -204
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/constants.py +7 -7
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/credentials.py +57 -57
- intflow_authctl-0.2.2/src/intflow_authctl/discovery.py +54 -0
- intflow_authctl-0.2.2/src/intflow_authctl/errors.py +14 -0
- intflow_authctl-0.2.2/src/intflow_authctl/external_access.py +47 -0
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/output.py +185 -166
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/parser.py +800 -695
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/py.typed +1 -1
- intflow_authctl-0.2.2/src/intflow_authctl/secret_output.py +84 -0
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/tokens.py +107 -63
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/users.py +119 -119
- {intflow_authctl-0.2.0 → intflow_authctl-0.2.2}/src/intflow_authctl/validation.py +217 -218
- intflow_authctl-0.2.0/PKG-INFO +0 -62
- intflow_authctl-0.2.0/README.md +0 -41
- intflow_authctl-0.2.0/src/intflow_authctl/errors.py +0 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/dist/
|
|
2
|
-
/.coverage*
|
|
3
|
-
/coverage*.json
|
|
4
|
-
/.pytest_cache/
|
|
5
|
-
/.mypy_cache/
|
|
6
|
-
/.ruff_cache/
|
|
7
|
-
/**/__pycache__/
|
|
8
|
-
*.egg-info/
|
|
1
|
+
/dist/
|
|
2
|
+
/.coverage*
|
|
3
|
+
/coverage*.json
|
|
4
|
+
/.pytest_cache/
|
|
5
|
+
/.mypy_cache/
|
|
6
|
+
/.ruff_cache/
|
|
7
|
+
/**/__pycache__/
|
|
8
|
+
*.egg-info/
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: intflow-authctl
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Intflow Auth operator CLI.
|
|
5
|
+
Author: Intflow
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: httpx<1,>=0.28
|
|
9
|
+
Requires-Dist: keyring<26,>=25
|
|
10
|
+
Provides-Extra: dev
|
|
11
|
+
Requires-Dist: build<2,>=1.2; extra == 'dev'
|
|
12
|
+
Requires-Dist: hatchling==1.31.0; extra == 'dev'
|
|
13
|
+
Requires-Dist: mypy<3,>=1.13; extra == 'dev'
|
|
14
|
+
Requires-Dist: packaging<27,>=24; extra == 'dev'
|
|
15
|
+
Requires-Dist: pytest-cov<8,>=6; extra == 'dev'
|
|
16
|
+
Requires-Dist: pytest-timeout<3,>=2.4; extra == 'dev'
|
|
17
|
+
Requires-Dist: pytest<10,>=8; extra == 'dev'
|
|
18
|
+
Requires-Dist: ruff<1,>=0.9; extra == 'dev'
|
|
19
|
+
Requires-Dist: twine<7,>=6; extra == 'dev'
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# intflow-authctl
|
|
23
|
+
|
|
24
|
+
`intflow-authctl` is the Python operator CLI package for Intflow Auth.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
```powershell
|
|
29
|
+
py -3.12 -m pip install --user --upgrade intflow-authctl
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## CLI
|
|
33
|
+
|
|
34
|
+
```powershell
|
|
35
|
+
intflow-authctl login
|
|
36
|
+
intflow-authctl whoami
|
|
37
|
+
intflow-authctl users list
|
|
38
|
+
intflow-authctl tokens create-no-expiry
|
|
39
|
+
intflow-authctl clients list
|
|
40
|
+
intflow-authctl clients rotate-secret <oauth-client-id> --grace-seconds 0
|
|
41
|
+
intflow-authctl logout --revoke
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The CLI is intended for authorized Intflow operators. It manages local operator
|
|
45
|
+
credentials through the supported credential backends and communicates with an
|
|
46
|
+
Intflow Auth deployment over the Admin API.
|
|
47
|
+
|
|
48
|
+
After CLI login, an `admin`-role user can run `tokens create-no-expiry` to
|
|
49
|
+
verify the current CLI identity and open the browser-only issuance page on the
|
|
50
|
+
same Auth service. Use `--no-browser` to print the URL only. The CLI bearer token
|
|
51
|
+
is never added to the URL or passed to the browser.
|
|
52
|
+
|
|
53
|
+
Failed commands return a nonzero exit code and write a bounded diagnostic to
|
|
54
|
+
stderr. Admin HTTP failures include only the status, a validated service error
|
|
55
|
+
code when present, and bounded `Retry-After` guidance. Upstream descriptions,
|
|
56
|
+
malformed bodies, credentials, and raw transport causes are not rendered.
|
|
57
|
+
Automation should parse JSON stdout only after a successful command.
|
|
58
|
+
|
|
59
|
+
## Package Scope
|
|
60
|
+
|
|
61
|
+
This distribution contains only the operator CLI, Admin API client, output and
|
|
62
|
+
validation logic, and credential-store adapters. It does not contain the Auth
|
|
63
|
+
service, database models, migrations, or service bootstrap commands.
|
|
64
|
+
|
|
65
|
+
## Requirements
|
|
66
|
+
|
|
67
|
+
- Python 3.12 or later.
|
|
68
|
+
- Access to an authorized Intflow Auth deployment.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## Discover commands and diagnose access
|
|
72
|
+
|
|
73
|
+
No repository checkout is needed to explore the installed CLI:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
intflow-authctl --help
|
|
77
|
+
intflow-authctl docs
|
|
78
|
+
intflow-authctl login
|
|
79
|
+
intflow-authctl doctor
|
|
80
|
+
intflow-authctl clients create --help
|
|
81
|
+
intflow-authctl users find --help
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Every command has `--help`, including nested commands. `docs` works offline and
|
|
85
|
+
prints onboarding guidance plus links to the API documentation and OpenAPI.
|
|
86
|
+
`docs --open` opens the documentation only when requested; use `--base-url` for
|
|
87
|
+
a different Auth deployment. `doctor` makes one read-only `whoami` request and
|
|
88
|
+
shows the current identity, effective scopes and token metadata without printing
|
|
89
|
+
the bearer token. Missing/expired credentials return exit code 2 with login guidance.
|
|
90
|
+
|
|
91
|
+
A company account does not automatically grant Auth management access. A 403
|
|
92
|
+
explains the required token scope where known, but server roles and target
|
|
93
|
+
restrictions still apply. When using `login --scope`, repeat it for **all** needed
|
|
94
|
+
scopes; it replaces the default scope selection. `logout --revoke` requires
|
|
95
|
+
`admin:tokens:write`; if remote revocation fails, local credentials remain.
|
|
96
|
+
|
|
97
|
+
## Save a client secret without printing it
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
intflow-authctl clients create --name "Internal app" --client-type confidential --redirect-uri https://app.example/callback --scope openid --scope email --scope profile --secret-file /private/new-client.json
|
|
101
|
+
intflow-authctl clients rotate-secret CLIENT_ID --grace-seconds 60 --secret-file /private/new-rotation.json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Choose a new file in a private existing directory outside the repository. The
|
|
105
|
+
file contains the complete response JSON, including `client_secret`; stdout
|
|
106
|
+
contains metadata and `client_secret_file` instead. The CLI refuses to overwrite
|
|
107
|
+
an existing file and protects the empty file **before** contacting the server
|
|
108
|
+
(POSIX 0600; Windows current-user DACL with inherited access removed).
|
|
109
|
+
If storage fails after the server changes the client, inspect the client and
|
|
110
|
+
rotate to a working destination; do not repeat creation. Without `--secret-file`,
|
|
111
|
+
the existing one-time secret JSON output remains unchanged. Transfer the file
|
|
112
|
+
through your approved secret delivery mechanism and remove it when no longer needed.
|
|
113
|
+
|
|
114
|
+
Public clients cannot hold secrets. Use confidential clients for trusted backends,
|
|
115
|
+
register exact callback URLs, and use PKCE S256. Add `offline_access` only when
|
|
116
|
+
refresh tokens are needed. App administrator assignment is a separate operation.
|
|
117
|
+
|
|
118
|
+
## Recovery and local diagnostics
|
|
119
|
+
|
|
120
|
+
`intflow-authctl --version` identifies the installed version and distribution.
|
|
121
|
+
`doctor` remains read-only; `doctor --check-store` explicitly tests local storage
|
|
122
|
+
with a temporary nonsecret write/read/delete probe and needs no login or server.
|
|
123
|
+
Login runs the same preflight before requesting browser approval.
|
|
124
|
+
|
|
125
|
+
Login polling honors server intervals and bounded HTTP 429 Retry-After guidance.
|
|
126
|
+
It does not retry transport failures or 5xx responses, because one-time redemption
|
|
127
|
+
may already have succeeded. Re-login never revokes server tokens. It removes only
|
|
128
|
+
a previous local entry owned by the same config; legacy/shared entries are retained
|
|
129
|
+
with a warning to preserve other profiles. Local logout can clear a config whose
|
|
130
|
+
keyring entry is already missing. Use `logout --revoke` for explicit remote revocation.
|
|
131
|
+
|
|
132
|
+
`tokens create --name automation --ttl 1h --secret-file /private/new-token.json`
|
|
133
|
+
stores the full one-time response in a new protected file and returns `token_file`
|
|
134
|
+
instead of the bearer. Without that option, existing one-time JSON stdout is unchanged.
|
|
135
|
+
If issuance succeeds but storage fails, inspect and explicitly revoke the unused
|
|
136
|
+
token before repeating issuance. File output uses the same protections as client secrets.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# intflow-authctl
|
|
2
|
+
|
|
3
|
+
`intflow-authctl` is the Python operator CLI package for Intflow Auth.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```powershell
|
|
8
|
+
py -3.12 -m pip install --user --upgrade intflow-authctl
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI
|
|
12
|
+
|
|
13
|
+
```powershell
|
|
14
|
+
intflow-authctl login
|
|
15
|
+
intflow-authctl whoami
|
|
16
|
+
intflow-authctl users list
|
|
17
|
+
intflow-authctl tokens create-no-expiry
|
|
18
|
+
intflow-authctl clients list
|
|
19
|
+
intflow-authctl clients rotate-secret <oauth-client-id> --grace-seconds 0
|
|
20
|
+
intflow-authctl logout --revoke
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The CLI is intended for authorized Intflow operators. It manages local operator
|
|
24
|
+
credentials through the supported credential backends and communicates with an
|
|
25
|
+
Intflow Auth deployment over the Admin API.
|
|
26
|
+
|
|
27
|
+
After CLI login, an `admin`-role user can run `tokens create-no-expiry` to
|
|
28
|
+
verify the current CLI identity and open the browser-only issuance page on the
|
|
29
|
+
same Auth service. Use `--no-browser` to print the URL only. The CLI bearer token
|
|
30
|
+
is never added to the URL or passed to the browser.
|
|
31
|
+
|
|
32
|
+
Failed commands return a nonzero exit code and write a bounded diagnostic to
|
|
33
|
+
stderr. Admin HTTP failures include only the status, a validated service error
|
|
34
|
+
code when present, and bounded `Retry-After` guidance. Upstream descriptions,
|
|
35
|
+
malformed bodies, credentials, and raw transport causes are not rendered.
|
|
36
|
+
Automation should parse JSON stdout only after a successful command.
|
|
37
|
+
|
|
38
|
+
## Package Scope
|
|
39
|
+
|
|
40
|
+
This distribution contains only the operator CLI, Admin API client, output and
|
|
41
|
+
validation logic, and credential-store adapters. It does not contain the Auth
|
|
42
|
+
service, database models, migrations, or service bootstrap commands.
|
|
43
|
+
|
|
44
|
+
## Requirements
|
|
45
|
+
|
|
46
|
+
- Python 3.12 or later.
|
|
47
|
+
- Access to an authorized Intflow Auth deployment.
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## Discover commands and diagnose access
|
|
51
|
+
|
|
52
|
+
No repository checkout is needed to explore the installed CLI:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
intflow-authctl --help
|
|
56
|
+
intflow-authctl docs
|
|
57
|
+
intflow-authctl login
|
|
58
|
+
intflow-authctl doctor
|
|
59
|
+
intflow-authctl clients create --help
|
|
60
|
+
intflow-authctl users find --help
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every command has `--help`, including nested commands. `docs` works offline and
|
|
64
|
+
prints onboarding guidance plus links to the API documentation and OpenAPI.
|
|
65
|
+
`docs --open` opens the documentation only when requested; use `--base-url` for
|
|
66
|
+
a different Auth deployment. `doctor` makes one read-only `whoami` request and
|
|
67
|
+
shows the current identity, effective scopes and token metadata without printing
|
|
68
|
+
the bearer token. Missing/expired credentials return exit code 2 with login guidance.
|
|
69
|
+
|
|
70
|
+
A company account does not automatically grant Auth management access. A 403
|
|
71
|
+
explains the required token scope where known, but server roles and target
|
|
72
|
+
restrictions still apply. When using `login --scope`, repeat it for **all** needed
|
|
73
|
+
scopes; it replaces the default scope selection. `logout --revoke` requires
|
|
74
|
+
`admin:tokens:write`; if remote revocation fails, local credentials remain.
|
|
75
|
+
|
|
76
|
+
## Save a client secret without printing it
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
intflow-authctl clients create --name "Internal app" --client-type confidential --redirect-uri https://app.example/callback --scope openid --scope email --scope profile --secret-file /private/new-client.json
|
|
80
|
+
intflow-authctl clients rotate-secret CLIENT_ID --grace-seconds 60 --secret-file /private/new-rotation.json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Choose a new file in a private existing directory outside the repository. The
|
|
84
|
+
file contains the complete response JSON, including `client_secret`; stdout
|
|
85
|
+
contains metadata and `client_secret_file` instead. The CLI refuses to overwrite
|
|
86
|
+
an existing file and protects the empty file **before** contacting the server
|
|
87
|
+
(POSIX 0600; Windows current-user DACL with inherited access removed).
|
|
88
|
+
If storage fails after the server changes the client, inspect the client and
|
|
89
|
+
rotate to a working destination; do not repeat creation. Without `--secret-file`,
|
|
90
|
+
the existing one-time secret JSON output remains unchanged. Transfer the file
|
|
91
|
+
through your approved secret delivery mechanism and remove it when no longer needed.
|
|
92
|
+
|
|
93
|
+
Public clients cannot hold secrets. Use confidential clients for trusted backends,
|
|
94
|
+
register exact callback URLs, and use PKCE S256. Add `offline_access` only when
|
|
95
|
+
refresh tokens are needed. App administrator assignment is a separate operation.
|
|
96
|
+
|
|
97
|
+
## Recovery and local diagnostics
|
|
98
|
+
|
|
99
|
+
`intflow-authctl --version` identifies the installed version and distribution.
|
|
100
|
+
`doctor` remains read-only; `doctor --check-store` explicitly tests local storage
|
|
101
|
+
with a temporary nonsecret write/read/delete probe and needs no login or server.
|
|
102
|
+
Login runs the same preflight before requesting browser approval.
|
|
103
|
+
|
|
104
|
+
Login polling honors server intervals and bounded HTTP 429 Retry-After guidance.
|
|
105
|
+
It does not retry transport failures or 5xx responses, because one-time redemption
|
|
106
|
+
may already have succeeded. Re-login never revokes server tokens. It removes only
|
|
107
|
+
a previous local entry owned by the same config; legacy/shared entries are retained
|
|
108
|
+
with a warning to preserve other profiles. Local logout can clear a config whose
|
|
109
|
+
keyring entry is already missing. Use `logout --revoke` for explicit remote revocation.
|
|
110
|
+
|
|
111
|
+
`tokens create --name automation --ttl 1h --secret-file /private/new-token.json`
|
|
112
|
+
stores the full one-time response in a new protected file and returns `token_file`
|
|
113
|
+
instead of the bearer. Without that option, existing one-time JSON stdout is unchanged.
|
|
114
|
+
If issuance succeeds but storage fails, inspect and explicitly revoke the unused
|
|
115
|
+
token before repeating issuance. File output uses the same protections as client secrets.
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["hatchling
|
|
3
|
-
build-backend = "hatchling.build"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "intflow-authctl"
|
|
7
|
-
version = "0.2.
|
|
8
|
-
description = "Intflow Auth operator CLI."
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.12"
|
|
11
|
-
license = { text = "Proprietary" }
|
|
12
|
-
authors = [
|
|
13
|
-
{ name = "Intflow" }
|
|
14
|
-
]
|
|
15
|
-
dependencies = [
|
|
16
|
-
"httpx>=0.28,<1",
|
|
17
|
-
"keyring>=25,<26"
|
|
18
|
-
]
|
|
19
|
-
|
|
20
|
-
[project.scripts]
|
|
21
|
-
intflow-authctl = "intflow_authctl.cli:authctl_main"
|
|
22
|
-
|
|
23
|
-
[project.optional-dependencies]
|
|
24
|
-
dev = [
|
|
25
|
-
"build>=1.2,<2",
|
|
26
|
-
"hatchling
|
|
27
|
-
"mypy>=1.13,<3",
|
|
28
|
-
"packaging>=24,<27",
|
|
29
|
-
"pytest>=8,<10",
|
|
30
|
-
"pytest-cov>=6,<8",
|
|
31
|
-
"pytest-timeout>=2.4,<3",
|
|
32
|
-
"ruff>=0.9,<1",
|
|
33
|
-
"twine>=6,<7"
|
|
34
|
-
]
|
|
35
|
-
|
|
36
|
-
[tool.hatch.build.targets.wheel]
|
|
37
|
-
packages = ["src/intflow_authctl"]
|
|
38
|
-
|
|
39
|
-
[tool.hatch.build.targets.sdist]
|
|
40
|
-
ignore-vcs = true
|
|
41
|
-
include = [
|
|
42
|
-
"/README.md",
|
|
43
|
-
"/pyproject.toml",
|
|
44
|
-
"/src/intflow_authctl"
|
|
45
|
-
]
|
|
46
|
-
exclude = [
|
|
47
|
-
"/.gitignore"
|
|
48
|
-
]
|
|
49
|
-
|
|
50
|
-
[tool.pytest.ini_options]
|
|
51
|
-
testpaths = ["tests"]
|
|
52
|
-
pythonpath = ["src"]
|
|
53
|
-
timeout = 30
|
|
54
|
-
filterwarnings = [
|
|
55
|
-
"error"
|
|
56
|
-
]
|
|
57
|
-
|
|
58
|
-
[tool.coverage.run]
|
|
59
|
-
source = ["intflow_authctl"]
|
|
60
|
-
branch = true
|
|
61
|
-
|
|
62
|
-
[tool.coverage.report]
|
|
63
|
-
fail_under = 0
|
|
64
|
-
show_missing = true
|
|
65
|
-
skip_covered = true
|
|
66
|
-
|
|
67
|
-
[tool.mypy]
|
|
68
|
-
python_version = "3.12"
|
|
69
|
-
show_error_codes = true
|
|
70
|
-
warn_unused_configs = true
|
|
71
|
-
files = ["src/intflow_authctl"]
|
|
72
|
-
|
|
73
|
-
[tool.ruff]
|
|
74
|
-
line-length = 100
|
|
75
|
-
target-version = "py312"
|
|
76
|
-
src = ["src", "tests"]
|
|
77
|
-
|
|
78
|
-
[tool.ruff.lint]
|
|
79
|
-
select = [
|
|
80
|
-
"E",
|
|
81
|
-
"F",
|
|
82
|
-
"I",
|
|
83
|
-
"UP",
|
|
84
|
-
"B",
|
|
85
|
-
"SIM"
|
|
86
|
-
]
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling==1.31.0"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "intflow-authctl"
|
|
7
|
+
version = "0.2.2"
|
|
8
|
+
description = "Intflow Auth operator CLI."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = { text = "Proprietary" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Intflow" }
|
|
14
|
+
]
|
|
15
|
+
dependencies = [
|
|
16
|
+
"httpx>=0.28,<1",
|
|
17
|
+
"keyring>=25,<26"
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.scripts]
|
|
21
|
+
intflow-authctl = "intflow_authctl.cli:authctl_main"
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
dev = [
|
|
25
|
+
"build>=1.2,<2",
|
|
26
|
+
"hatchling==1.31.0",
|
|
27
|
+
"mypy>=1.13,<3",
|
|
28
|
+
"packaging>=24,<27",
|
|
29
|
+
"pytest>=8,<10",
|
|
30
|
+
"pytest-cov>=6,<8",
|
|
31
|
+
"pytest-timeout>=2.4,<3",
|
|
32
|
+
"ruff>=0.9,<1",
|
|
33
|
+
"twine>=6,<7"
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[tool.hatch.build.targets.wheel]
|
|
37
|
+
packages = ["src/intflow_authctl"]
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.sdist]
|
|
40
|
+
ignore-vcs = true
|
|
41
|
+
include = [
|
|
42
|
+
"/README.md",
|
|
43
|
+
"/pyproject.toml",
|
|
44
|
+
"/src/intflow_authctl"
|
|
45
|
+
]
|
|
46
|
+
exclude = [
|
|
47
|
+
"/.gitignore"
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[tool.pytest.ini_options]
|
|
51
|
+
testpaths = ["tests"]
|
|
52
|
+
pythonpath = ["src"]
|
|
53
|
+
timeout = 30
|
|
54
|
+
filterwarnings = [
|
|
55
|
+
"error"
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
[tool.coverage.run]
|
|
59
|
+
source = ["intflow_authctl"]
|
|
60
|
+
branch = true
|
|
61
|
+
|
|
62
|
+
[tool.coverage.report]
|
|
63
|
+
fail_under = 0
|
|
64
|
+
show_missing = true
|
|
65
|
+
skip_covered = true
|
|
66
|
+
|
|
67
|
+
[tool.mypy]
|
|
68
|
+
python_version = "3.12"
|
|
69
|
+
show_error_codes = true
|
|
70
|
+
warn_unused_configs = true
|
|
71
|
+
files = ["src/intflow_authctl"]
|
|
72
|
+
|
|
73
|
+
[tool.ruff]
|
|
74
|
+
line-length = 100
|
|
75
|
+
target-version = "py312"
|
|
76
|
+
src = ["src", "tests"]
|
|
77
|
+
|
|
78
|
+
[tool.ruff.lint]
|
|
79
|
+
select = [
|
|
80
|
+
"E",
|
|
81
|
+
"F",
|
|
82
|
+
"I",
|
|
83
|
+
"UP",
|
|
84
|
+
"B",
|
|
85
|
+
"SIM"
|
|
86
|
+
]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"""Internal implementation package for the Intflow Auth operator CLI."""
|
|
2
|
-
|
|
3
|
-
__version__ = "0.2.
|
|
1
|
+
"""Internal implementation package for the Intflow Auth operator CLI."""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.2.2"
|