python-kanka 2.2.0__tar.gz → 2.3.0__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.
Files changed (81) hide show
  1. {python_kanka-2.2.0 → python_kanka-2.3.0}/.bumpversion.cfg +5 -1
  2. {python_kanka-2.2.0 → python_kanka-2.3.0}/.github/renovate.json +2 -1
  3. {python_kanka-2.2.0 → python_kanka-2.3.0}/.github/workflows/ci.yml +12 -18
  4. {python_kanka-2.2.0 → python_kanka-2.3.0}/.github/workflows/publish.yml +20 -24
  5. {python_kanka-2.2.0 → python_kanka-2.3.0}/.gitignore +1 -0
  6. {python_kanka-2.2.0 → python_kanka-2.3.0}/.pre-commit-config.yaml +4 -4
  7. {python_kanka-2.2.0 → python_kanka-2.3.0}/CLAUDE.md +62 -2
  8. {python_kanka-2.2.0 → python_kanka-2.3.0}/Makefile +24 -16
  9. {python_kanka-2.2.0/src/python_kanka.egg-info → python_kanka-2.3.0}/PKG-INFO +28 -45
  10. {python_kanka-2.2.0 → python_kanka-2.3.0}/README.md +11 -1
  11. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/migration.py +42 -84
  12. {python_kanka-2.2.0 → python_kanka-2.3.0}/pyproject.toml +61 -5
  13. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/_version.py +1 -1
  14. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/client.py +8 -8
  15. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/managers.py +16 -24
  16. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/models/base.py +9 -10
  17. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/models/common.py +18 -18
  18. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/models/entities.py +50 -52
  19. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/types.py +1 -2
  20. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/base.py +5 -4
  21. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/run_integration_tests.py +1 -0
  22. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/utils.py +4 -4
  23. python_kanka-2.3.0/uv.lock +1166 -0
  24. python_kanka-2.2.0/PKG-INFO +0 -377
  25. python_kanka-2.2.0/dev-requirements.txt +0 -20
  26. python_kanka-2.2.0/requirements.txt +0 -3
  27. python_kanka-2.2.0/setup.cfg +0 -4
  28. python_kanka-2.2.0/setup.py +0 -72
  29. python_kanka-2.2.0/src/python_kanka.egg-info/SOURCES.txt +0 -78
  30. python_kanka-2.2.0/src/python_kanka.egg-info/dependency_links.txt +0 -1
  31. python_kanka-2.2.0/src/python_kanka.egg-info/not-zip-safe +0 -1
  32. python_kanka-2.2.0/src/python_kanka.egg-info/requires.txt +0 -13
  33. python_kanka-2.2.0/src/python_kanka.egg-info/top_level.txt +0 -1
  34. {python_kanka-2.2.0 → python_kanka-2.3.0}/API_REFERENCE.md +0 -0
  35. {python_kanka-2.2.0 → python_kanka-2.3.0}/CHANGELOG.md +0 -0
  36. {python_kanka-2.2.0 → python_kanka-2.3.0}/LICENSE +0 -0
  37. {python_kanka-2.2.0 → python_kanka-2.3.0}/MANIFEST.in +0 -0
  38. {python_kanka-2.2.0 → python_kanka-2.3.0}/PUBLISHING.md +0 -0
  39. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/crud_operations.py +0 -0
  40. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/error_handling.py +0 -0
  41. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/filtering.py +0 -0
  42. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/posts.py +0 -0
  43. {python_kanka-2.2.0 → python_kanka-2.3.0}/examples/quickstart.py +0 -0
  44. {python_kanka-2.2.0 → python_kanka-2.3.0}/pytest.ini +0 -0
  45. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/__init__.py +0 -0
  46. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/exceptions.py +0 -0
  47. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/models/__init__.py +0 -0
  48. {python_kanka-2.2.0 → python_kanka-2.3.0}/src/kanka/py.typed +0 -0
  49. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/__init__.py +0 -0
  50. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/README.md +0 -0
  51. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/__init__.py +0 -0
  52. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/full_test_output_fixed.txt +0 -0
  53. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/setup_test_env.py +0 -0
  54. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_calendars_integration.py +0 -0
  55. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_calendars_simple.py +0 -0
  56. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_characters_integration.py +0 -0
  57. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_creatures_integration.py +0 -0
  58. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_entities_api_integration.py +0 -0
  59. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_entity_tags_integration.py +0 -0
  60. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_events_integration.py +0 -0
  61. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_families_integration.py +0 -0
  62. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_journals_integration.py +0 -0
  63. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_locations_integration.py +0 -0
  64. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_mentions_integration.py +0 -0
  65. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_notes_integration.py +0 -0
  66. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_organisations_integration.py +0 -0
  67. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_posts_integration.py +0 -0
  68. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_quests_integration.py +0 -0
  69. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_races_integration.py +0 -0
  70. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_rate_limiting.py +0 -0
  71. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_search_integration.py +0 -0
  72. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_tag_colour.py +0 -0
  73. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/integration/test_tags_integration.py +0 -0
  74. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/mypy.ini +0 -0
  75. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_client.py +0 -0
  76. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_client_advanced.py +0 -0
  77. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_entity_models.py +0 -0
  78. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_exceptions.py +0 -0
  79. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_managers.py +0 -0
  80. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_models.py +0 -0
  81. {python_kanka-2.2.0 → python_kanka-2.3.0}/tests/test_models_advanced.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 2.2.0
2
+ current_version = 2.3.0
3
3
  commit = True
4
4
  tag = True
5
5
  tag_name = v{new_version}
@@ -8,3 +8,7 @@ message = Bump version: {current_version} → {new_version}
8
8
  [bumpversion:file:src/kanka/_version.py]
9
9
  search = __version__ = "{current_version}"
10
10
  replace = __version__ = "{new_version}"
11
+
12
+ [bumpversion:file:pyproject.toml]
13
+ search = version = "{current_version}"
14
+ replace = version = "{new_version}"
@@ -7,7 +7,8 @@
7
7
  ":disableRateLimiting",
8
8
  ":separateMajorReleases",
9
9
  ":combinePatchMinorReleases",
10
- ":ignoreUnstable"
10
+ ":ignoreUnstable",
11
+ ":pinVersions"
11
12
  ],
12
13
  "timezone": "America/Chicago",
13
14
  "assignees": [
@@ -12,42 +12,36 @@ jobs:
12
12
  strategy:
13
13
  fail-fast: false
14
14
  matrix:
15
- python-version: ["3.9", "3.10", "3.11", "3.12"]
15
+ python-version: ["3.12", "3.13", "3.14"]
16
16
 
17
17
  steps:
18
- - uses: actions/checkout@v4
18
+ - uses: actions/checkout@v6
19
19
 
20
- - name: Set up Python ${{ matrix.python-version }}
21
- uses: actions/setup-python@v5
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v7
22
22
  with:
23
- python-version: ${{ matrix.python-version }}
23
+ enable-cache: true
24
+ cache-dependency-glob: "uv.lock"
24
25
 
25
- - name: Cache pip dependencies
26
- uses: actions/cache@v4
27
- with:
28
- path: ~/.cache/pip
29
- key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/dev-requirements.txt') }}
30
- restore-keys: |
31
- ${{ runner.os }}-pip-
26
+ - name: Set up Python ${{ matrix.python-version }}
27
+ run: uv python install ${{ matrix.python-version }}
32
28
 
33
29
  - name: Install dependencies
34
30
  run: |
35
- python -m pip install --upgrade pip
36
- pip install -r requirements.txt
37
- pip install -r dev-requirements.txt
38
- pip install -e .
31
+ uv sync --all-groups
32
+ uv pip install -e .
39
33
 
40
34
  - name: Run all quality checks
41
35
  run: |
42
36
  make check
43
37
 
44
38
  - name: Generate coverage report
45
- if: matrix.python-version == '3.11'
39
+ if: matrix.python-version == '3.14'
46
40
  run: |
47
41
  make coverage
48
42
 
49
43
  - name: Upload coverage reports to Codecov
50
- if: matrix.python-version == '3.11'
44
+ if: matrix.python-version == '3.14'
51
45
  uses: codecov/codecov-action@v5
52
46
  env:
53
47
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -16,22 +16,24 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  strategy:
18
18
  matrix:
19
- python-version: ["3.9", "3.10", "3.11", "3.12"]
19
+ python-version: ["3.12", "3.13", "3.14"]
20
20
 
21
21
  steps:
22
- - uses: actions/checkout@v4
22
+ - uses: actions/checkout@v6
23
23
 
24
- - name: Set up Python ${{ matrix.python-version }}
25
- uses: actions/setup-python@v5
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v7
26
26
  with:
27
- python-version: ${{ matrix.python-version }}
27
+ enable-cache: true
28
+ cache-dependency-glob: "uv.lock"
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ run: uv python install ${{ matrix.python-version }}
28
32
 
29
33
  - name: Install dependencies
30
34
  run: |
31
- python -m pip install --upgrade pip
32
- pip install -r requirements.txt
33
- pip install -r dev-requirements.txt
34
- pip install -e .
35
+ uv sync --all-groups
36
+ uv pip install -e .
35
37
 
36
38
  - name: Run all quality checks
37
39
  run: |
@@ -41,26 +43,20 @@ jobs:
41
43
  needs: test
42
44
  runs-on: ubuntu-latest
43
45
  steps:
44
- - uses: actions/checkout@v4
46
+ - uses: actions/checkout@v6
45
47
 
46
- - name: Set up Python
47
- uses: actions/setup-python@v5
48
- with:
49
- python-version: '3.13'
48
+ - name: Install uv
49
+ uses: astral-sh/setup-uv@v7
50
50
 
51
- - name: Install build dependencies
52
- run: |
53
- python -m pip install --upgrade pip
54
- pip install build twine
51
+ - name: Set up Python
52
+ run: uv python install 3.14
55
53
 
56
54
  - name: Build package
57
- run: python -m build
58
-
59
- - name: Check package
60
- run: twine check dist/*
55
+ run: |
56
+ uv build
61
57
 
62
58
  - name: Upload artifacts
63
- uses: actions/upload-artifact@v4
59
+ uses: actions/upload-artifact@v5
64
60
  with:
65
61
  name: dist
66
62
  path: dist/
@@ -75,7 +71,7 @@ jobs:
75
71
 
76
72
  steps:
77
73
  - name: Download artifacts
78
- uses: actions/download-artifact@v4
74
+ uses: actions/download-artifact@v6
79
75
  with:
80
76
  name: dist
81
77
  path: dist/
@@ -111,6 +111,7 @@ celerybeat.pid
111
111
 
112
112
  # Environments
113
113
  .env
114
+ .envrc
114
115
  .venv
115
116
  env/
116
117
  venv/
@@ -2,7 +2,7 @@
2
2
  # See https://pre-commit.com/hooks.html for more hooks
3
3
  repos:
4
4
  - repo: https://github.com/pre-commit/pre-commit-hooks
5
- rev: v4.5.0
5
+ rev: v6.0.0
6
6
  hooks:
7
7
  - id: trailing-whitespace
8
8
  - id: end-of-file-fixer
@@ -15,19 +15,19 @@ repos:
15
15
  - id: mixed-line-ending
16
16
 
17
17
  - repo: https://github.com/psf/black
18
- rev: 23.12.1
18
+ rev: 26.1.0
19
19
  hooks:
20
20
  - id: black
21
21
  language_version: python3
22
22
 
23
23
  - repo: https://github.com/pycqa/isort
24
- rev: 5.13.2
24
+ rev: 8.0.0
25
25
  hooks:
26
26
  - id: isort
27
27
  args: ["--profile", "black"]
28
28
 
29
29
  - repo: https://github.com/astral-sh/ruff-pre-commit
30
- rev: v0.1.9
30
+ rev: v0.15.2
31
31
  hooks:
32
32
  - id: ruff
33
33
  args: ["--fix"]
@@ -4,10 +4,15 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
4
 
5
5
  ## Key Development Commands
6
6
 
7
+ This project uses [uv](https://docs.astral.sh/uv/) for dependency management. All commands are wrapped in the Makefile for convenience:
8
+
7
9
  ```bash
8
- # Install development environment
10
+ # Install development environment (uses uv sync)
9
11
  make install
10
12
 
13
+ # Sync dependencies without updating lock file
14
+ make sync
15
+
11
16
  # Run unit tests only (no integration tests)
12
17
  make test
13
18
 
@@ -31,12 +36,67 @@ make typecheck
31
36
  make check
32
37
 
33
38
  # Build the package
34
- python -m build
39
+ make build
35
40
 
36
41
  # Generate coverage report
37
42
  make coverage
38
43
  ```
39
44
 
45
+ ### Direct uv commands
46
+
47
+ ```bash
48
+ # Install dependencies
49
+ uv sync --all-groups
50
+
51
+ # Run a command in the environment
52
+ uv run pytest
53
+
54
+ # Add a new dependency
55
+ uv add package-name
56
+
57
+ # Add a dev dependency
58
+ uv add --group dev package-name
59
+
60
+ # Update dependencies
61
+ uv lock --upgrade
62
+
63
+ # Build the package
64
+ uv build
65
+ ```
66
+
67
+ ## Git Commit Message Format
68
+
69
+ This project uses conventional commits format:
70
+ ```
71
+ <type>(<scope>): <subject>
72
+
73
+ <body>
74
+
75
+ <footer>
76
+ ```
77
+
78
+ **Types:**
79
+ - `feat`: New feature
80
+ - `fix`: Bug fix
81
+ - `docs`: Documentation only changes
82
+ - `style`: Code style changes (formatting, missing semicolons, etc)
83
+ - `refactor`: Code change that neither fixes a bug nor adds a feature
84
+ - `test`: Adding missing tests or correcting existing tests
85
+ - `chore`: Changes to build process, dependencies, or auxiliary tools
86
+
87
+ **Examples:**
88
+ - `feat: add pagination properties to EntityManager`
89
+ - `fix: replace is_private with visibility_id parameter for posts`
90
+ - `chore(deps): update dependency ruff to v0.11.13`
91
+ - `refactor: reorganize package structure for PyPI publishing`
92
+
93
+ **Note:** When Claude generates commits, they should include the attribution at the end of the commit body:
94
+ ```
95
+ 🤖 Generated with [Claude Code](https://claude.ai/code)
96
+
97
+ Co-Authored-By: Claude <noreply@anthropic.com>
98
+ ```
99
+
40
100
  ## Architecture Overview
41
101
 
42
102
  The SDK follows a **Client → Manager → Model** pattern that requires understanding across multiple files:
@@ -1,9 +1,10 @@
1
- .PHONY: install test lint format typecheck check clean coverage help
1
+ .PHONY: install test lint format typecheck check clean coverage help sync build
2
2
 
3
3
  # Default target
4
4
  help:
5
5
  @echo "Available commands:"
6
- @echo " make install - Install development dependencies"
6
+ @echo " make install - Install development dependencies with uv"
7
+ @echo " make sync - Sync dependencies with uv.lock"
7
8
  @echo " make test - Run all tests"
8
9
  @echo " make lint - Run code linting"
9
10
  @echo " make typecheck - Run type checking with mypy"
@@ -11,36 +12,39 @@ help:
11
12
  @echo " make check - Run all checks (lint + typecheck + test)"
12
13
  @echo " make clean - Clean up temporary files"
13
14
  @echo " make coverage - Run tests with coverage report"
15
+ @echo " make build - Build the package"
14
16
 
15
- # Install development dependencies
17
+ # Install development dependencies and sync with lock file
16
18
  install:
17
- pip install -r requirements.txt
18
- pip install -r dev-requirements.txt
19
- pip install -e .
19
+ uv sync --all-groups
20
+
21
+ # Sync dependencies without updating lock file
22
+ sync:
23
+ uv sync --all-groups
20
24
 
21
25
  # Run all tests
22
26
  test:
23
- pytest tests/ -v
27
+ uv run pytest tests/ -v
24
28
 
25
29
  # Run linting
26
30
  lint:
27
- ruff check .
28
- black --check .
29
- isort --check-only .
31
+ uv run ruff check .
32
+ uv run black --check .
33
+ uv run isort --check-only .
30
34
 
31
35
  # Run type checking
32
36
  typecheck:
33
- mypy src/kanka tests examples --ignore-missing-imports
37
+ uv run mypy src/kanka tests examples --ignore-missing-imports
34
38
 
35
39
  # Format code
36
40
  format:
37
- black .
38
- isort .
39
- ruff check --fix .
41
+ uv run black .
42
+ uv run isort .
43
+ uv run ruff check --fix .
40
44
 
41
45
  # Run pre-commit hooks on all files
42
46
  pre-commit:
43
- pre-commit run --all-files
47
+ uv run pre-commit run --all-files
44
48
 
45
49
  # Run all checks
46
50
  check: lint typecheck test
@@ -62,4 +66,8 @@ clean:
62
66
 
63
67
  # Run tests with coverage
64
68
  coverage:
65
- pytest tests/ -v --cov=src/kanka --cov-report=html --cov-report=term
69
+ uv run pytest tests/ -v --cov=src/kanka --cov-report=html --cov-report=term
70
+
71
+ # Build the package
72
+ build:
73
+ uv build
@@ -1,57 +1,30 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-kanka
3
- Version: 2.2.0
4
- Summary: A modern Python client for the Kanka API with full typing support
5
- Home-page: https://github.com/ervwalter/python-kanka
6
- Author: Erv Walter
7
- Author-email: erv@ewal.net
8
- License: MIT
9
- Project-URL: Bug Reports, https://github.com/ervwalter/python-kanka/issues
10
- Project-URL: Source, https://github.com/ervwalter/python-kanka
3
+ Version: 2.3.0
4
+ Summary: Python client for the Kanka API
5
+ Project-URL: Homepage, https://github.com/ervwalter/python-kanka
11
6
  Project-URL: Documentation, https://github.com/ervwalter/python-kanka#readme
12
- Project-URL: Kanka API, https://kanka.io/en-US/docs/1.0
13
- Keywords: kanka api client worldbuilding rpg campaign tabletop ttrpg dnd pathfinder
7
+ Project-URL: Repository, https://github.com/ervwalter/python-kanka
8
+ Project-URL: Issues, https://github.com/ervwalter/python-kanka/issues
9
+ Author-email: Erv Walter <erv@ewal.net>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: api,campaign,dnd,kanka,pathfinder,rpg,tabletop,ttrpg,worldbuilding
14
13
  Classifier: Development Status :: 4 - Beta
15
14
  Classifier: Intended Audience :: Developers
16
- Classifier: Topic :: Games/Entertainment :: Role-Playing
17
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
15
  Classifier: License :: OSI Approved :: MIT License
19
16
  Classifier: Programming Language :: Python :: 3
20
- Classifier: Programming Language :: Python :: 3.9
21
- Classifier: Programming Language :: Python :: 3.10
22
- Classifier: Programming Language :: Python :: 3.11
23
17
  Classifier: Programming Language :: Python :: 3.12
24
- Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Games/Entertainment :: Role-Playing
21
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
22
  Classifier: Typing :: Typed
26
- Requires-Python: >=3.9
23
+ Requires-Python: >=3.12
24
+ Requires-Dist: pydantic==2.12.5
25
+ Requires-Dist: requests-toolbelt==1.0.0
26
+ Requires-Dist: requests==2.32.5
27
27
  Description-Content-Type: text/markdown
28
- License-File: LICENSE
29
- Requires-Dist: requests==2.32.4
30
- Requires-Dist: requests_toolbelt>=0.9.1
31
- Requires-Dist: pydantic==2.11.5
32
- Provides-Extra: dev
33
- Requires-Dist: pytest>=7.0.0; extra == "dev"
34
- Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
35
- Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
36
- Requires-Dist: black>=23.0.0; extra == "dev"
37
- Requires-Dist: isort>=5.12.0; extra == "dev"
38
- Requires-Dist: ruff>=0.1.0; extra == "dev"
39
- Requires-Dist: mypy>=1.0.0; extra == "dev"
40
- Requires-Dist: pre-commit>=3.0.0; extra == "dev"
41
- Dynamic: author
42
- Dynamic: author-email
43
- Dynamic: classifier
44
- Dynamic: description
45
- Dynamic: description-content-type
46
- Dynamic: home-page
47
- Dynamic: keywords
48
- Dynamic: license
49
- Dynamic: license-file
50
- Dynamic: project-url
51
- Dynamic: provides-extra
52
- Dynamic: requires-dist
53
- Dynamic: requires-python
54
- Dynamic: summary
55
28
 
56
29
  # python-kanka
57
30
 
@@ -81,10 +54,20 @@ Install from PyPI:
81
54
  pip install python-kanka
82
55
  ```
83
56
 
84
- Or install from source:
57
+ ### From Source (using uv)
85
58
  ```bash
86
59
  git clone https://github.com/ervwalter/python-kanka.git
87
60
  cd python-kanka
61
+ uv sync --all-groups
62
+ uv pip install -e .
63
+ ```
64
+
65
+ ### From Source (using pip)
66
+ ```bash
67
+ git clone https://github.com/ervwalter/python-kanka.git
68
+ cd python-kanka
69
+ pip install -r requirements.txt
70
+ pip install -r dev-requirements.txt
88
71
  pip install -e .
89
72
  ```
90
73
 
@@ -26,10 +26,20 @@ Install from PyPI:
26
26
  pip install python-kanka
27
27
  ```
28
28
 
29
- Or install from source:
29
+ ### From Source (using uv)
30
30
  ```bash
31
31
  git clone https://github.com/ervwalter/python-kanka.git
32
32
  cd python-kanka
33
+ uv sync --all-groups
34
+ uv pip install -e .
35
+ ```
36
+
37
+ ### From Source (using pip)
38
+ ```bash
39
+ git clone https://github.com/ervwalter/python-kanka.git
40
+ cd python-kanka
41
+ pip install -r requirements.txt
42
+ pip install -r dev-requirements.txt
33
43
  pip install -e .
34
44
  ```
35
45