fjc-idb 0.0.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.
Files changed (49) hide show
  1. fjc_idb-0.0.2/.editorconfig +31 -0
  2. fjc_idb-0.0.2/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
  3. fjc_idb-0.0.2/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
  4. fjc_idb-0.0.2/.github/dependabot.yml +57 -0
  5. fjc_idb-0.0.2/.github/workflows/ci.yml +119 -0
  6. fjc_idb-0.0.2/.github/workflows/publish.yml +34 -0
  7. fjc_idb-0.0.2/.gitignore +141 -0
  8. fjc_idb-0.0.2/.pre-commit-config.yaml +32 -0
  9. fjc_idb-0.0.2/.python-version +1 -0
  10. fjc_idb-0.0.2/CHANGELOG.md +43 -0
  11. fjc_idb-0.0.2/CODE_OF_CONDUCT.md +79 -0
  12. fjc_idb-0.0.2/CONTRIBUTING.md +54 -0
  13. fjc_idb-0.0.2/LICENSE +15 -0
  14. fjc_idb-0.0.2/PKG-INFO +164 -0
  15. fjc_idb-0.0.2/README.md +138 -0
  16. fjc_idb-0.0.2/docs/advanced.md +166 -0
  17. fjc_idb-0.0.2/docs/changelog.md +1 -0
  18. fjc_idb-0.0.2/docs/code_of_conduct.md +1 -0
  19. fjc_idb-0.0.2/docs/codebooks/appellate.md +393 -0
  20. fjc_idb-0.0.2/docs/codebooks/civil.md +280 -0
  21. fjc_idb-0.0.2/docs/codebooks/criminal.md +333 -0
  22. fjc_idb-0.0.2/docs/codebooks/includes/appellate_nos.md +97 -0
  23. fjc_idb-0.0.2/docs/codebooks/includes/civil_nos.md +95 -0
  24. fjc_idb-0.0.2/docs/codebooks/includes/offenses.md +275 -0
  25. fjc_idb-0.0.2/docs/contributing.md +1 -0
  26. fjc_idb-0.0.2/docs/css/material.css +4 -0
  27. fjc_idb-0.0.2/docs/css/mkdocstrings.css +28 -0
  28. fjc_idb-0.0.2/docs/index.md +1 -0
  29. fjc_idb-0.0.2/docs/license.md +1 -0
  30. fjc_idb-0.0.2/docs/recipes.md +149 -0
  31. fjc_idb-0.0.2/docs/scripts/gen_ref_nav.py +38 -0
  32. fjc_idb-0.0.2/docs/tutorial.md +140 -0
  33. fjc_idb-0.0.2/mkdocs.yml +161 -0
  34. fjc_idb-0.0.2/pyproject.toml +204 -0
  35. fjc_idb-0.0.2/src/fjc_idb/__init__.py +12 -0
  36. fjc_idb-0.0.2/src/fjc_idb/__main__.py +156 -0
  37. fjc_idb-0.0.2/src/fjc_idb/base.py +387 -0
  38. fjc_idb-0.0.2/src/fjc_idb/downloader.py +258 -0
  39. fjc_idb-0.0.2/src/fjc_idb/main.py +761 -0
  40. fjc_idb-0.0.2/src/fjc_idb/options.py +44 -0
  41. fjc_idb-0.0.2/src/fjc_idb/rules/__init__.py +14 -0
  42. fjc_idb-0.0.2/src/fjc_idb/rules/appellate.py +223 -0
  43. fjc_idb-0.0.2/src/fjc_idb/rules/civil.py +149 -0
  44. fjc_idb-0.0.2/src/fjc_idb/rules/courts.py +1099 -0
  45. fjc_idb-0.0.2/src/fjc_idb/rules/criminal.py +86 -0
  46. fjc_idb-0.0.2/src/fjc_idb/rules/offenses.py +155 -0
  47. fjc_idb-0.0.2/tests/test_download.py +96 -0
  48. fjc_idb-0.0.2/tests/test_main.py +360 -0
  49. fjc_idb-0.0.2/uv.lock +1911 -0
@@ -0,0 +1,31 @@
1
+ # Sets default formatting options for many editors and IDEs
2
+
3
+ # https://editorconfig.org/
4
+
5
+ root = true
6
+
7
+ [*]
8
+ charset = utf-8
9
+ insert_final_newline = true
10
+ indent_size = 4
11
+ indent_style = space
12
+ trim_trailing_whitespace = true
13
+
14
+ # Docstrings and comments use max_line_length = 79
15
+ [*.py]
16
+ max_line_length = 80
17
+
18
+ # The JSON files contain newlines inconsistently
19
+ [*.json]
20
+ indent_size = 2
21
+ insert_final_newline = ignore
22
+
23
+ # Makefiles always use tabs for indentation
24
+ [Makefile]
25
+ indent_style = tab
26
+
27
+ [*.{yml, yaml, toml, html}]
28
+ indent_size = 2
29
+
30
+ [*.md]
31
+ trim_trailing_whitespace = false
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: unconfirmed
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+
12
+ A clear and concise description of what the bug is.
13
+
14
+ **To Reproduce**
15
+
16
+ Steps to reproduce the behavior:
17
+ 1. Go to '...'
18
+ 2. Run command '...'
19
+ 3. Scroll down to '...'
20
+ 4. See error
21
+
22
+ **Expected behavior**
23
+
24
+ A clear and concise description of what you expected to happen.
25
+
26
+ **Screenshots**
27
+
28
+ If applicable, add screenshots to help explain your problem.
29
+
30
+ **System (please complete the following information):**
31
+
32
+ - `fjc idb` version: [e.g. 0.2.1]
33
+ - Python version: [e.g. 3.9]
34
+ - OS: [Windows/Linux/MacOS]
35
+
36
+ **Additional context**
37
+ Add any other context about the problem here.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: feature
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+
12
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
13
+
14
+ **Describe the solution you'd like**
15
+
16
+ A clear and concise description of what you want to happen.
17
+
18
+ **Describe alternatives you've considered**
19
+
20
+ A clear and concise description of any alternative solutions or features you've considered.
21
+
22
+ **Additional context**
23
+
24
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,57 @@
1
+ # Automatically updates dependency versions using dependabot.
2
+
3
+ # version: 2
4
+ # updates:
5
+
6
+ # Maintains dependencies for Python via `pip`
7
+ # - package-ecosystem: pip
8
+ # directory: "/"
9
+ # # Always updates to a newer version. If you want a less aggressive strategy,
10
+ # # change the value to "increase-if-necessary"
11
+ # versioning-strategy: increase
12
+ # schedule:
13
+ # interval: weekly
14
+ # time: "5:00"
15
+
16
+ # # Maintains dependencies for GitHub Actions
17
+ # - package-ecosystem: github-actions
18
+ # directory: "/"
19
+ # schedule:
20
+ # interval: "weekly"
21
+ # time: "6:00"
22
+
23
+ version: 2
24
+ updates:
25
+ - package-ecosystem: pip
26
+ directory: "/docs"
27
+ schedule:
28
+ interval: daily
29
+ time: "04:00"
30
+ timezone: "Europe/Berlin"
31
+ labels:
32
+ - "cookiecutter"
33
+ - "dependencies"
34
+ - "python"
35
+ open-pull-requests-limit: 99
36
+ - package-ecosystem: pip
37
+ directory: "/.github/workflows"
38
+ schedule:
39
+ interval: daily
40
+ time: "04:00"
41
+ timezone: "Europe/Berlin"
42
+ labels:
43
+ - "cookiecutter"
44
+ - "dependencies"
45
+ - "python"
46
+ open-pull-requests-limit: 99
47
+ - package-ecosystem: github-actions
48
+ directory: "/"
49
+ schedule:
50
+ interval: daily
51
+ time: "04:00"
52
+ timezone: "Europe/Berlin"
53
+ labels:
54
+ - "cookiecutter"
55
+ - "dependencies"
56
+ - "github_actions"
57
+ open-pull-requests-limit: 99
@@ -0,0 +1,119 @@
1
+ # Automatically performs jobs upon a commit push or pull-request
2
+
3
+ # This Action builds, tests, and lints the package. Then, it builds the
4
+ # documentation and deploys it on GitHub Pages.
5
+
6
+ # If the commit message matches a semantic version (e.g. "v0.1.2"), a GitHub
7
+ # release will be created by the `create_github_release` job.
8
+
9
+ name: continuous integration
10
+
11
+ # Allows this Action to be called by a push or pull request
12
+ on: [push, pull_request]
13
+
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+
18
+ env:
19
+ DISABLE_MKDOCS_2_WARNING: "true"
20
+
21
+ jobs:
22
+
23
+ build_and_test:
24
+ runs-on: ${{ matrix.os }}
25
+ strategy:
26
+ fail-fast: false
27
+ matrix:
28
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
29
+ os: [ubuntu-latest, macos-latest, windows-latest]
30
+
31
+ steps:
32
+ - name: checkout repository
33
+ uses: actions/checkout@v7
34
+
35
+ - name: install python
36
+ uses: actions/setup-python@v7
37
+ with:
38
+ python-version: ${{ matrix.python-version }}
39
+
40
+ - name: install uv
41
+ uses: astral-sh/setup-uv@v10.2.0
42
+
43
+ - name: install dependencies
44
+ run: uv sync --python ${{ matrix.python-version }}
45
+
46
+ - name: run pre-commit
47
+ run: uv run pre-commit run -a --show-diff-on-failure
48
+
49
+ - name: run tests
50
+ run: uv run pytest tests
51
+
52
+ lint_and_format:
53
+ runs-on: ubuntu-latest
54
+
55
+ steps:
56
+ - name: checkout repository
57
+ uses: actions/checkout@v7
58
+
59
+ - name: install uv
60
+ uses: astral-sh/setup-uv@v10.2.0
61
+
62
+ - name: install dependencies
63
+ run: uv sync
64
+
65
+ - name: run ruff
66
+ run: uv run ruff check --no-fix --output-format=github
67
+
68
+ - name: run mypy
69
+ run: uv run mypy
70
+
71
+ document_and_deploy:
72
+ runs-on: ubuntu-latest
73
+
74
+ steps:
75
+ - name: checkout repository
76
+ uses: actions/checkout@v7
77
+
78
+ - name: install uv
79
+ uses: astral-sh/setup-uv@v10.2.0
80
+
81
+ - name: install dependencies
82
+ run: uv sync
83
+
84
+ - name: build documentation with mkdocs
85
+ run: uv run mkdocs build
86
+
87
+ - name: deploy documentation to github pages
88
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
89
+ run: uv run mkdocs gh-deploy --force --clean --verbose
90
+
91
+ # Only creates a release if a line of the commit message is a semantic version
92
+ # (e.g. "v0.1.2"), which can be followed by other lines, such as a
93
+ # "Co-Authored-By:" trailer. The release notes are generated by GitHub.
94
+ create_github_release:
95
+ name: create github release
96
+ if: github.event_name == 'push'
97
+ runs-on: ubuntu-latest
98
+
99
+ steps:
100
+ - name: initiate github release
101
+ env:
102
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
103
+ COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
104
+ run: |
105
+ semver='[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?'
106
+ version=$(printf '%s\n' "$COMMIT_MESSAGE" | tr -d '\r' \
107
+ | grep -E -m 1 "^v${semver}$" || true)
108
+ if [ -z "$version" ]; then
109
+ echo "The commit message has no version, so no release was created."
110
+ exit 0
111
+ fi
112
+ # A version with a pre-release identifier (e.g. "v1.0.0-beta.1") is
113
+ # marked as a pre-release.
114
+ prerelease=$(case "${version%%+*}" in *-*) echo --prerelease;; esac)
115
+ gh release create "$version" \
116
+ --repo "$GITHUB_REPOSITORY" \
117
+ --target "$GITHUB_SHA" \
118
+ --title "Release: $version" \
119
+ --generate-notes $prerelease
@@ -0,0 +1,34 @@
1
+ # Securely publishes the repository on PyPI
2
+
3
+
4
+ # To make this action work, you need to configure PyPI properly, using this
5
+ # guide: https://docs.pypi.org/trusted-publishers/adding-a-publisher/
6
+
7
+ name: publish
8
+
9
+ # Allows this Action to be called by other Actions or through GitHub
10
+ on: [workflow_call, workflow_dispatch]
11
+
12
+ jobs:
13
+
14
+ pypi_publish:
15
+ name: publish to pypi
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ # This permission is needed for private repositories.
19
+ contents: read
20
+ # IMPORTANT: this permission is mandatory for trusted publishing
21
+ id-token: write
22
+
23
+ steps:
24
+ - name: get repository
25
+ uses: actions/checkout@v7
26
+
27
+ - name: install uv
28
+ uses: astral-sh/setup-uv@v10.2.0
29
+
30
+ - name: build package
31
+ run: uv build
32
+
33
+ - name: push to pypi
34
+ run: uv publish
@@ -0,0 +1,141 @@
1
+ # Byte-compiled
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer Logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit Testing
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ *.py,cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+ db.sqlite3-journal
61
+
62
+ # Flask
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy
67
+ .scrapy
68
+
69
+ # Sphinx
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter
76
+ .ipynb_checkpoints
77
+
78
+ # IPython
79
+ profile_default/
80
+ ipython_config.py
81
+
82
+ # pyenv (.python-version is kept in the repository to pin Python 3.11)
83
+
84
+ # pipenv
85
+ Pipfile.lock
86
+
87
+ # Celery
88
+ celerybeat-schedule
89
+ celerybeat.pid
90
+
91
+ # SageMath
92
+ *.sage.py
93
+
94
+ # Environments
95
+ .env
96
+ .venv
97
+ env/
98
+ venv/
99
+ ENV/
100
+ env.bak/
101
+ venv.bak/
102
+
103
+ # Spyder
104
+ .spyderproject
105
+ .spyproject
106
+
107
+ # Rope
108
+ .ropeproject
109
+
110
+ # MkDocs
111
+ /site
112
+
113
+ # mypy
114
+ .mypy_cache/
115
+ .dmypy.json
116
+ dmypy.json
117
+
118
+ # Pyre
119
+ .pyre/
120
+
121
+ # VS Code
122
+ .vscode/
123
+
124
+ # VS Code counter
125
+ .VSCodeCounter/
126
+
127
+ # PyCharm
128
+ .idea/
129
+
130
+ # PDM
131
+ .copier-answers.yml
132
+ .idea/
133
+ .pdm-plugins/
134
+ .pdm-python
135
+ __pypackages__/
136
+
137
+ # Cython
138
+ cython_debug/
139
+
140
+ # Ruff
141
+ /.ruff_cache/
@@ -0,0 +1,32 @@
1
+ repos:
2
+
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: "v6.0.0"
5
+ hooks:
6
+ - id: check-added-large-files
7
+ - id: check-ast
8
+ - id: check-json
9
+ - id: check-toml
10
+ - id: detect-private-key
11
+ - id: end-of-file-fixer
12
+ - id: trailing-whitespace
13
+
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ # Ruff version.
16
+ rev: v0.16.9
17
+ hooks:
18
+ # Run the linter.
19
+ - id: ruff
20
+ args: [ --fix ]
21
+
22
+ - repo: https://github.com/astral-sh/uv-pre-commit
23
+ # uv version.
24
+ rev: 0.12.20
25
+ hooks:
26
+ - id: uv-lock
27
+
28
+ - repo: https://github.com/jsh9/pydoclint
29
+ rev: 0.10.1
30
+ hooks:
31
+ - id: pydoclint
32
+ args: [--style=google, --check-return-types=False, --arg-type-hints-in-docstring=False]
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,43 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ <!-- insertion marker -->
6
+
7
+ ## 0.0.2
8
+
9
+ ### Added
10
+
11
+ - Parsing for three types of FJC Integrated Database (IDB) files: courts of
12
+ appeals, civil cases in the district courts, and criminal defendants in the
13
+ district courts. The parsing follows the current FJC codebooks and has been
14
+ tested on the files from 2008 through 2026.
15
+ - `run` exports a range of years to a CSV file, one yearly file at a time to
16
+ keep memory use low. `import_data`, `parse_data`, and `export_data` work on
17
+ the data in memory.
18
+ - `download` and `list_files` get the yearly SAS files and codebooks from the
19
+ FJC website.
20
+ - The `fjc-idb` command (also `python -m fjc_idb`) with `--start-year`,
21
+ `--stop-year`, `--data-folder`, `--rename-columns`, `--fix-city-spellings`,
22
+ `--download`, `--download-only`, and `--overwrite`.
23
+ - Descriptive column names, labels in place of codes (circuits, districts,
24
+ courthouses, agencies, dispositions, and more), and correct handling of the
25
+ IDB's missing-value codes.
26
+ - Pending cases are kept only from the latest yearly file, so combining years
27
+ does not count a case more than once.
28
+ - Added columns: indicators for appeal types and for groups of criminal
29
+ offenses and natures of suit, the days between key dates, counts of
30
+ concurrences and dissents, whether a decision was published, whether any
31
+ party was pro se, and a standard appellate docket number.
32
+ - Documentation: a tutorial, an advanced user guide, recipes, an API
33
+ reference, and codebooks for the appellate, criminal, and civil CSV files.
34
+
35
+ ### Fixed
36
+
37
+ - Continuous integration: removed Python 3.10 from the test matrix (pandas 3
38
+ requires Python 3.11 or later), fixed ruff and mypy errors, removed the
39
+ ruff-format pre-commit hook, and replaced the outdated release action.
40
+
41
+ ## 0.0.1
42
+
43
+ Initial Commit
@@ -0,0 +1,79 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to make participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies within all project spaces, and it also applies when
49
+ an individual is representing the project or its community in public spaces.
50
+ Examples of representing a project or community include using an official
51
+ project e-mail address, posting via an official social media account, or acting
52
+ as an appointed representative at an online or offline event. Representation of
53
+ a project may be further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting any of the following people:
59
+
60
+ * Corey Rayburn Yung (coreyrayburnyung@gmail.com)
61
+
62
+ All complaints will be reviewed and investigated and will result in a response that
63
+ is deemed necessary and appropriate to the circumstances. The project team is
64
+ obligated to maintain confidentiality with regard to the reporter of an incident.
65
+ Further details of specific enforcement policies may be posted separately.
66
+
67
+ Project maintainers who do not follow or enforce the Code of Conduct in good
68
+ faith may face temporary or permanent repercussions as determined by other
69
+ members of the project's leadership.
70
+
71
+ ## Attribution
72
+
73
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
74
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
75
+
76
+ [homepage]: https://www.contributor-covenant.org
77
+
78
+ For answers to common questions about this code of conduct, see
79
+ https://www.contributor-covenant.org/faq
@@ -0,0 +1,54 @@
1
+ # Contributing
2
+
3
+ Contributions are welcome and greatly appreciated!
4
+ Every little bit helps, and credit will always be given.
5
+ Environment Setup
6
+
7
+ ## Development
8
+
9
+ Follow this basic process:
10
+
11
+ 1. Fork and clone the repositor.
12
+ 2. Create a new branch: `git checkout -b feature-or-bugfix-name`.
13
+ 3. Edit the code.
14
+ 4. If you added functionality or features, update the documentation accordingly.
15
+
16
+ If you are unsure about how to fix or ignore a warning, just let the continuous
17
+ integration fail, and we will help you during review.
18
+
19
+ Don't bother updating the changelog, we will take care of this.
20
+
21
+ ## Pull requests guidelines
22
+
23
+ Link to any related issue in the Pull Request message.
24
+
25
+ During the review, we recommend using fixups:
26
+
27
+ ```bash
28
+ # SHA is the SHA of the commit you want to fix
29
+ git commit --fixup=SHA
30
+ ```
31
+
32
+ Once all the changes are approved, you can squash your commits:
33
+
34
+ ```bash
35
+ git rebase -i --autosquash main
36
+ ```
37
+
38
+ And force-push:
39
+
40
+ ```bash
41
+ git push -f
42
+ ```
43
+
44
+ If this seems all too complicated, you can push or force-push each new commit,
45
+ and we will squash them ourselves if needed, before merging.
46
+
47
+ ## Style Guidelines
48
+
49
+ This package follows the [Google
50
+ Python Style Guide](https://google.github.io/styleguide/pyguide.html) with two
51
+ notable exceptions:
52
+
53
+ 1. It always adds spaces around "=". This not only violates the Google guide, it violates [PEP8](https://peps.python.org/pep-0008/), the foundational Python style guide from which all other resources are derived. I defy this strong, long-standign norm because I find it more readable. My brain and eyes have trouble seeing two separate objects when an equal sign is in the middle. I imagine that I am not alone in this accessibility issue. Further, as PEP8 itself notes, required spaces around equal signs are becoming increasing common with type annotations becoming part of best practices (and, as a result, signatures to classes, functions, and methods regularly include spaces around the equal signs). I realize that this will seem alien to many coders, but it is far easier on my eyes.
54
+ 2. I use some so-called "power features", primarily dunder methods, to make my interfaces easier to access and use. This is disfavored in the Google Python Style Guide because such code is often more difficult for others to read. To address that concern, I try to document and comment as to what the code is doing whenever I used any of the "power features" of Python.
fjc_idb-0.0.2/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ Apache Software License 2.0
2
+
3
+ Copyright (c) 2026, Corey Rayburn Yung
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.