geo-mlops-sdk 0.0.1__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.
@@ -0,0 +1,87 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(./black.sh --fix)",
5
+ "Bash(./black.sh)",
6
+ "Bash(./flake8.sh)",
7
+ "Bash(./isort.sh --fix)",
8
+ "Bash(./isort.sh)",
9
+ "Bash(./mypy.sh)",
10
+ "Bash(./pytest.sh)",
11
+ "Bash(find *)",
12
+ "Bash(git commit *)",
13
+ "Bash(git diff *)",
14
+ "Bash(git log *)",
15
+ "Bash(grep *)",
16
+ "Bash(tree *)",
17
+ "WebFetch(domain:docs.anthropic.com)",
18
+ "WebFetch(domain:github.com)",
19
+ "WebSearch"
20
+ ],
21
+ "deny": ["Bash(python *)", "Bash(pip *)", "Bash(npm *)", "Bash(npx *)"],
22
+ "ask": ["Bash(./python *)"]
23
+ },
24
+ "hooks": {
25
+ "Notification": [
26
+ {
27
+ "matcher": "permission_prompt",
28
+ "hooks": [
29
+ {
30
+ "type": "command",
31
+ "command": "notify-send 'Geo-MLOps-SDK - claude-code' 'Permission requests'"
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "matcher": "idle_prompt",
37
+ "hooks": [
38
+ {
39
+ "type": "command",
40
+ "command": "notify-send 'Geo-MLOps-SDK - claude-code' 'Awaiting your input'"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "matcher": "elicitation_dialog",
46
+ "hooks": [
47
+ {
48
+ "type": "command",
49
+ "command": "notify-send 'Geo-MLOps-SDK - claude-code' 'MCP tool input required'"
50
+ }
51
+ ]
52
+ }
53
+ ],
54
+ "PostToolUse": [
55
+ {
56
+ "matcher": "(Write|Edit)",
57
+ "hooks": [
58
+ {
59
+ "type": "command",
60
+ "command": "./black.sh --fix",
61
+ "statusMessage": "Formatting with black"
62
+ },
63
+ {
64
+ "type": "command",
65
+ "command": "./isort.sh --fix",
66
+ "statusMessage": "Sorting imports with isort"
67
+ },
68
+ {
69
+ "type": "command",
70
+ "command": "./flake8.sh",
71
+ "statusMessage": "Linting with flake8"
72
+ },
73
+ {
74
+ "type": "command",
75
+ "command": "./mypy.sh",
76
+ "statusMessage": "Type checking with mypy"
77
+ },
78
+ {
79
+ "type": "command",
80
+ "command": "./pytest.sh",
81
+ "statusMessage": "Running tests with pytest"
82
+ }
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ }
@@ -0,0 +1,38 @@
1
+ name: python-deploy
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '[0-9]+.[0-9]+.[0-9]+'
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ deploy:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v5
21
+ with:
22
+ enable-cache: true
23
+ cache-dependency-glob: 'uv.lock'
24
+
25
+ - name: Setup Python 3.14
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: '3.14'
29
+ allow-prereleases: true
30
+
31
+ - name: Build package
32
+ run: uv build
33
+
34
+ - name: Publish package
35
+ uses: pypa/gh-action-pypi-publish@release/v1
36
+ with:
37
+ user: __token__
38
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,47 @@
1
+ name: python-test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v5
21
+ with:
22
+ enable-cache: true
23
+ cache-dependency-glob: 'uv.lock'
24
+
25
+ - name: Setup Python 3.14
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: '3.14'
29
+ allow-prereleases: true
30
+
31
+ - name: Install dependencies
32
+ run: uv sync --group dev
33
+
34
+ - name: Black
35
+ run: ./black.sh
36
+
37
+ - name: Flake8
38
+ run: ./flake8.sh
39
+
40
+ - name: Isort
41
+ run: ./isort.sh
42
+
43
+ - name: Mypy
44
+ run: ./mypy.sh
45
+
46
+ - name: Pytest
47
+ run: ./pytest.sh
@@ -0,0 +1,150 @@
1
+ # git ignore file.
2
+
3
+ #############
4
+ ### Linux ###
5
+ *~
6
+
7
+ # KDE directory preferences
8
+ .directory
9
+
10
+ # Linux trash folder which might appear on any partition or disk
11
+ .Trash-*
12
+
13
+ ###########
14
+ ### OSX ###
15
+ .DS_Store
16
+ .AppleDouble
17
+ .LSOverride
18
+
19
+ # Icon must end with two \r
20
+ Icon
21
+
22
+ # Thumbnails
23
+ ._*
24
+
25
+ # Files that might appear in the root of a volume
26
+ .DocumentRevisions-V100
27
+ .fseventsd
28
+ .Spotlight-V100
29
+ .TemporaryItems
30
+ .Trashes
31
+ .VolumeIcon.icns
32
+
33
+ # Directories potentially created on remote AFP share
34
+ .AppleDB
35
+ .AppleDesktop
36
+ Network Trash Folder
37
+ Temporary Items
38
+ .apdisk
39
+
40
+ ###############
41
+ ### Windows ###
42
+
43
+ # Windows image file caches
44
+ Thumbs.db
45
+ ehthumbs.db
46
+
47
+ # Folder config file
48
+ Desktop.ini
49
+
50
+ # Recycle Bin used on file shares
51
+ .BIN/
52
+
53
+ # Windows Installer files
54
+ *.cab
55
+ *.msi
56
+ *.msm
57
+ *.msp
58
+
59
+ # Windows shortcuts
60
+ *.lnk
61
+
62
+ ###################
63
+ ### Executables ###
64
+ *.exe
65
+ *.out
66
+ *.app
67
+ *.i*86
68
+ *.x86_64
69
+ *.hex
70
+
71
+ ######################
72
+ ### Temporary file ###
73
+ *.log
74
+
75
+ ##############
76
+ ### Python ###
77
+
78
+ # Byte-compiled / optimized / DLL files
79
+ __pycache__/
80
+ *.py[cod]
81
+ *$py.class
82
+
83
+ # Distribution / packaging
84
+ .Python
85
+ build/
86
+ develop-eggs/
87
+ dist/
88
+ downloads/
89
+ eggs/
90
+ .eggs/
91
+ lib/
92
+ lib64/
93
+ parts/
94
+ sdist/
95
+ var/
96
+ wheels/
97
+ pip-wheel-metadata/
98
+ share/python-wheels/
99
+ *.egg-info/
100
+ .installed.cfg
101
+ *.egg
102
+ MANIFEST
103
+
104
+ # Unit test / coverage reports
105
+ .mypy_cache/
106
+ .pytest_cache/
107
+ .sphinx_cache/
108
+ .sphinx_locale/
109
+ .tox/
110
+ .coverage
111
+
112
+ # isort
113
+ *.isorted
114
+
115
+ #############
116
+ ### C/C++ ###
117
+ *.so
118
+ *.dll
119
+
120
+ ############
121
+ ### IDEA ###
122
+ .idea
123
+
124
+ ##########################
125
+ ### Visual Studio Code ###
126
+ .vscode
127
+
128
+ #####################
129
+ ### Visual Studio ###
130
+ *.suo
131
+ *.sln
132
+
133
+ ######################
134
+ ### asynctasks.vim ###
135
+ .tasks
136
+
137
+ ###################
138
+ ### vimspector ###
139
+ .vimspector.json
140
+
141
+ ###################
142
+ ### claude-code ###
143
+ .claude/settings.local.json
144
+ .mcp.json
145
+
146
+ ###############
147
+ ### Project ###
148
+ .env*
149
+ .venv/
150
+ .taskmaster/
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,70 @@
1
+ # CLAUDE.md
2
+
3
+ Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
4
+
5
+ **Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
6
+
7
+ ## 1. Think Before Coding
8
+
9
+ **Don't assume. Don't hide confusion. Surface tradeoffs.**
10
+
11
+ Before implementing:
12
+
13
+ - State your assumptions explicitly. If uncertain, ask.
14
+ - If multiple interpretations exist, present them - don't pick silently.
15
+ - If a simpler approach exists, say so. Push back when warranted.
16
+ - If something is unclear, stop. Name what's confusing. Ask.
17
+
18
+ ## 2. Simplicity First
19
+
20
+ **Minimum code that solves the problem. Nothing speculative.**
21
+
22
+ - No features beyond what was asked.
23
+ - No abstractions for single-use code.
24
+ - No "flexibility" or "configurability" that wasn't requested.
25
+ - No error handling for impossible scenarios.
26
+ - If you write 200 lines and it could be 50, rewrite it.
27
+
28
+ Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
29
+
30
+ ## 3. Surgical Changes
31
+
32
+ **Touch only what you must. Clean up only your own mess.**
33
+
34
+ When editing existing code:
35
+
36
+ - Don't "improve" adjacent code, comments, or formatting.
37
+ - Don't refactor things that aren't broken.
38
+ - Match existing style, even if you'd do it differently.
39
+ - If you notice unrelated dead code, mention it - don't delete it.
40
+
41
+ When your changes create orphans:
42
+
43
+ - Remove imports/variables/functions that YOUR changes made unused.
44
+ - Don't remove pre-existing dead code unless asked.
45
+
46
+ The test: Every changed line should trace directly to the user's request.
47
+
48
+ ## 4. Goal-Driven Execution
49
+
50
+ **Define success criteria. Loop until verified.**
51
+
52
+ Transform tasks into verifiable goals:
53
+
54
+ - "Add validation" → "Write tests for invalid inputs, then make them pass"
55
+ - "Fix the bug" → "Write a test that reproduces it, then make it pass"
56
+ - "Refactor X" → "Ensure tests pass before and after"
57
+
58
+ For multi-step tasks, state a brief plan:
59
+
60
+ ```
61
+ 1. [Step] → verify: [check]
62
+ 2. [Step] → verify: [check]
63
+ 3. [Step] → verify: [check]
64
+ ```
65
+
66
+ Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
67
+
68
+ ---
69
+
70
+ **These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
@@ -0,0 +1,55 @@
1
+ Metadata-Version: 2.4
2
+ Name: geo-mlops-sdk
3
+ Version: 0.0.1
4
+ Summary: MLOps SDK
5
+ Author-email: zer0 <osom8979@gmail.com>
6
+ Maintainer-email: zer0 <osom8979@gmail.com>
7
+ License-Expression: MIT
8
+ Keywords: machine-learning,mlops,sdk
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: Information Technology
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: Topic :: Scientific/Engineering
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Classifier: Topic :: Utilities
20
+ Requires-Python: >=3.14
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Geo-MLOps-SDK
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ pip install geo-mlops-sdk
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ```python
34
+ import geo_mlops_sdk
35
+
36
+ print(geo_mlops_sdk.__version__)
37
+ ```
38
+
39
+ ## Development
40
+
41
+ This project uses [uv](https://docs.astral.sh/uv/) for dependency management.
42
+
43
+ ```bash
44
+ uv sync --group dev
45
+ ```
46
+
47
+ Quality tooling (wrappers run the tool from the project root):
48
+
49
+ ```bash
50
+ ./black.sh # format check (use --fix to edit in place)
51
+ ./isort.sh # import order check (use --fix to edit in place)
52
+ ./flake8.sh # lint
53
+ ./mypy.sh # type check
54
+ ./pytest.sh # tests with coverage
55
+ ```
@@ -0,0 +1,33 @@
1
+ # Geo-MLOps-SDK
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ pip install geo-mlops-sdk
7
+ ```
8
+
9
+ ## Usage
10
+
11
+ ```python
12
+ import geo_mlops_sdk
13
+
14
+ print(geo_mlops_sdk.__version__)
15
+ ```
16
+
17
+ ## Development
18
+
19
+ This project uses [uv](https://docs.astral.sh/uv/) for dependency management.
20
+
21
+ ```bash
22
+ uv sync --group dev
23
+ ```
24
+
25
+ Quality tooling (wrappers run the tool from the project root):
26
+
27
+ ```bash
28
+ ./black.sh # format check (use --fix to edit in place)
29
+ ./isort.sh # import order check (use --fix to edit in place)
30
+ ./flake8.sh # lint
31
+ ./mypy.sh # type check
32
+ ./pytest.sh # tests with coverage
33
+ ```
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)
4
+
5
+ USAGE="
6
+ Usage: ${BASH_SOURCE[0]} [options]
7
+
8
+ Available options are:
9
+ -h, --help Print this message.
10
+ -f, --fix Edit files in place.
11
+ -i, --in-place Same '--fix' flag.
12
+ -- Stop handling options.
13
+ "
14
+
15
+ FIX_FLAG=0
16
+
17
+ function print_error
18
+ {
19
+ # shellcheck disable=SC2145
20
+ echo -e "\033[31m$@\033[0m" 1>&2
21
+ }
22
+
23
+ function print_message
24
+ {
25
+ # shellcheck disable=SC2145
26
+ echo -e "\033[32m$@\033[0m"
27
+ }
28
+
29
+ function on_interrupt_trap
30
+ {
31
+ print_error "An interrupt signal was detected."
32
+ exit 1
33
+ }
34
+
35
+ function print_usage
36
+ {
37
+ echo "$USAGE"
38
+ }
39
+
40
+ trap on_interrupt_trap INT
41
+
42
+ while [[ -n $1 ]]; do
43
+ case $1 in
44
+ -h|--help)
45
+ print_usage
46
+ exit 0
47
+ ;;
48
+ -f|--fix|-i|--in-place)
49
+ FIX_FLAG=1
50
+ shift
51
+ ;;
52
+ --)
53
+ shift
54
+ break
55
+ ;;
56
+ *)
57
+ print_error "Unknown option: $1"
58
+ exit 1
59
+ ;;
60
+ esac
61
+ done
62
+
63
+ ARGS=("--target-version" "py314")
64
+ if [[ $FIX_FLAG -eq 0 ]]; then
65
+ ARGS+=("--check" "--diff" "--color")
66
+ fi
67
+
68
+ print_message "black ${ARGS[*]}"
69
+
70
+ uv --directory "$ROOT_DIR" run black "${ARGS[@]}" \
71
+ "$ROOT_DIR/src/" \
72
+ "$ROOT_DIR/tester/"
@@ -0,0 +1,11 @@
1
+ # flake8 configuration
2
+
3
+ [flake8]
4
+ max-line-length = 88
5
+ extend-ignore =
6
+ E203, W503
7
+ exclude =
8
+ */.git,
9
+ */.venv
10
+ filename = *.py
11
+ format=%(path)s:%(row)d:%(col)d: %(code)s %(text)s
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)
4
+
5
+ function print_error
6
+ {
7
+ # shellcheck disable=SC2145
8
+ echo -e "\033[31m$@\033[0m" 1>&2
9
+ }
10
+
11
+ function print_message
12
+ {
13
+ # shellcheck disable=SC2145
14
+ echo -e "\033[32m$@\033[0m"
15
+ }
16
+
17
+ function on_interrupt_trap
18
+ {
19
+ print_error "An interrupt signal was detected."
20
+ exit 1
21
+ }
22
+
23
+ trap on_interrupt_trap INT
24
+
25
+ ARGS=("--config=${ROOT_DIR}/flake8.ini")
26
+
27
+ if [[ ${#*} -eq 0 ]]; then
28
+ ARGS+=(
29
+ "$ROOT_DIR/src/"
30
+ "$ROOT_DIR/tester/"
31
+ )
32
+ else
33
+ ARGS+=("$@")
34
+ fi
35
+
36
+ print_message "flake8 ${ARGS[*]}"
37
+
38
+ uv --directory "$ROOT_DIR" run flake8 "${ARGS[@]}"
@@ -0,0 +1,9 @@
1
+ # isort configuration
2
+
3
+ [isort]
4
+ py_version = 314
5
+ profile = black
6
+ src_paths = src,tester
7
+ skip_gitignore = True
8
+ known_first_party =
9
+ geo_mlops_sdk
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)
4
+
5
+ USAGE="
6
+ Usage: ${BASH_SOURCE[0]} [options]
7
+
8
+ Available options are:
9
+ -h, --help Print this message.
10
+ -f, --fix Edit files in place.
11
+ -i, --in-place Same '--fix' flag.
12
+ -- Stop handling options.
13
+ "
14
+
15
+ FIX_FLAG=0
16
+
17
+ function print_error
18
+ {
19
+ # shellcheck disable=SC2145
20
+ echo -e "\033[31m$@\033[0m" 1>&2
21
+ }
22
+
23
+ function print_message
24
+ {
25
+ # shellcheck disable=SC2145
26
+ echo -e "\033[32m$@\033[0m"
27
+ }
28
+
29
+ function on_interrupt_trap
30
+ {
31
+ print_error "An interrupt signal was detected."
32
+ exit 1
33
+ }
34
+
35
+ function print_usage
36
+ {
37
+ echo "$USAGE"
38
+ }
39
+
40
+ trap on_interrupt_trap INT
41
+
42
+ while [[ -n $1 ]]; do
43
+ case $1 in
44
+ -h|--help)
45
+ print_usage
46
+ exit 0
47
+ ;;
48
+ -f|--fix|-i|--in-place)
49
+ FIX_FLAG=1
50
+ shift
51
+ ;;
52
+ --)
53
+ shift
54
+ break
55
+ ;;
56
+ *)
57
+ print_error "Unknown option: $1"
58
+ exit 1
59
+ ;;
60
+ esac
61
+ done
62
+
63
+ ARGS=("--settings-path=$ROOT_DIR/isort.cfg")
64
+ if [[ $FIX_FLAG -eq 0 ]]; then
65
+ ARGS+=("--check" "--diff" "--color")
66
+ fi
67
+
68
+ print_message "isort ${ARGS[*]}"
69
+
70
+ uv --directory "$ROOT_DIR" run isort "${ARGS[@]}" \
71
+ "$ROOT_DIR/src/" \
72
+ "$ROOT_DIR/tester/"
@@ -0,0 +1,10 @@
1
+ # mypy configuration
2
+
3
+ [mypy]
4
+ ignore_missing_imports = True
5
+ show_error_context = True
6
+ show_column_numbers = True
7
+ show_error_codes = True
8
+ pretty = True
9
+ exclude = (/.git|/.venv)
10
+ cache_dir = .mypy_cache