This repository is part of the Find Case Law project at The National Archives. For more information on the project, check the documentation.
This repository predominantly contains information about the courts in the Find Case Law project.
pypi name: ds-caselaw-utils
python import name: ds_caselaw_utils
from ds_caselaw_utils import neutral_url
neutral_url("[2022] EAT 1") # '/eat/2022/4'
from ds_caselaw_utils import courts
courts.get_all() # return a list of all courts
courts.get_by_param("ewhc/ch") # get a court by its parameter value
courts.get_selectable() # returns a list of all courts that are whitelisted to
# appear as searchable options
courts.get_listable_groups() # returns a grouped list of courts that are whitelisted to
# be listed publicly
courts.get_listable_courts() # returns a list of all *courts* (ie not tribunals)
# which are whitelisted to be listed publicly
courts.get_listable_tribunals() # return a list of all *tribunals* which are
# whitelisted to be listed publicly
The list of courts is defined in src/ds_caselaw_utils/data/court_names.yml
. The format is as follows:
- name: high_court # Internal name of a group of courts to be displayed together
display_name: "High Court" # An optional public facing name for this group.
is_tribunal: false # Whether this group contains courts or tribunals
courts: # List of courts to be displayed under this group
-
# An internal code for this court:
code: EWHC-SeniorCourtsCosts
# The public facing name of the court:
name: High Court (Senior Courts Costs Office)
# An optional alternative wording for use when displayed in grouped format (defaults to 'name'):
grouped_name: Senior Court Costs Office
# A URL to link to for more information on this court:
link: https://www.gov.uk/courts-tribunals/senior-courts-costs-office
# A regex matching neutral citations for this court's judgments:
ncn: \[(\d{4})\] (EWHC) (\d+) \((SCCO)\)
# The canonical parameter value used in searches for this court:
param: 'ewhc/scco'
# Any additional parameter aliases which display judgments from this court:
extra_params: ['ewhc/costs']
# The year of the first judgment we have on file for this court:
start_year: 2003
# The year of the last judgment we have on file for this court
# (optional, defaults to current year):
end_year: ~
# Whether to expose this court publicly as selectable in search filters:
selectable: true
# Whether to expose this court publicly in listings:
listable: true
$ poetry shell
$ cd src/ds_caselaw_utils
$ python -m unittest
$ rm -rf dist
$ poetry build
$ python3 -m twine upload --repository testpypi dist/* --verbose
When making a new release, update the changelog in the release pull request.
The package will only be released to PyPI if a new tag is created. A merge to main alone will not trigger a release to PyPI.
If the release fails to push to PyPI, you can delete the tag with git pull
, git push --delete origin v1.2.3
and try again.
To create a release:
- Update the version number in
pyproject.toml
- Create a branch
release/v{major}.{minor}.{patch}
- Update
CHANGELOG.md
andpyproject.toml
for the release - Commit and push
- Open a PR from that branch to main
- Get approval on the PR
- Tag the HEAD of the PR
v{major}.{minor}.{patch}
and push the tag - Merge the PR to main and push
- Add a new release to Github for that tag for consistency's sake