Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v0.3 #103

Merged
merged 105 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
f28375a
Move developer notes into separate document
rlskoeser Jun 6, 2024
23892ae
Update contributing document
rlskoeser Jun 6, 2024
71c4c82
Move all-contributors to a separate file
rlskoeser Jun 6, 2024
5079204
Reorganize examples and add a readme
rlskoeser Jun 6, 2024
bcbe63b
Reword link to contributor doc
rlskoeser Jun 6, 2024
22d20b2
Add some example usage for undate objects to readme
rlskoeser Jun 6, 2024
ed93bfd
Add example usage for date intervals
rlskoeser Jun 6, 2024
9eda929
Add and use local copy of S&co events dataset
rlskoeser Jun 6, 2024
4e9cd07
Add jupyter checkpoints to gitignore
rlskoeser Jun 6, 2024
46406c8
Add treon step to check workflow to verify jupyter notebooks run
rlskoeser Jun 6, 2024
a9c146d
Describe S&co events dataset and use cases
rlskoeser Jun 6, 2024
436431b
Spike on using numpy datetime64 instead of python builtin datetime
rlskoeser Jun 6, 2024
220dc7e
Set min/max year for np.datetime64 day range
rlskoeser Jun 6, 2024
3306bde
Simplify np.datetime64 subclass thanks to stack overflow
rlskoeser Jun 6, 2024
e66eeff
Merge pull request #81 from dh-tech/feature/readme-cleanup
rlskoeser Jul 11, 2024
b4d28d6
Update README.md
rlskoeser Jul 11, 2024
9614cb8
Update README.md
rlskoeser Jul 11, 2024
9ae8abf
Update Shakespeare README
ColeDCrawford Jul 11, 2024
219d5cd
Merge pull request #82 from dh-tech/feature/75-example-usage
rlskoeser Jul 11, 2024
ffe8b70
Update requirements for treon/nbconvert/lxml issue
rlskoeser Jul 11, 2024
00ede70
Add more detail about justification/impact of undate for S&co data
rlskoeser Jul 11, 2024
2280254
Merge pull request #83 from dh-tech/feature/76-jupyter-ci
rlskoeser Jul 12, 2024
428d8dc
Consolidate setup.cfg and pyproject.toml; drop tox
rlskoeser Jul 19, 2024
2be7739
Install test dependencies only in ci, not all dev deps
rlskoeser Jul 19, 2024
38bb264
Update sphinx docs build; drop dependency on tox
rlskoeser Jul 19, 2024
4f1f784
Integrate github docs with sphinx; turn on relative links
rlskoeser Jul 19, 2024
795ec28
Add setuptools to docs dependencies for sphinx/m2r2
rlskoeser Jul 19, 2024
0ddc395
Run checks with python 3.12
rlskoeser Jul 19, 2024
5028000
Switch to newer version of sphinx and sphinx theme
rlskoeser Jul 19, 2024
703a9c4
Try working version of sphinx 7.x
rlskoeser Jul 19, 2024
448d2d1
Adjust capitalization
rlskoeser Jul 19, 2024
66a5657
Add preliminary logo and add dh-tech to docs sidebar
rlskoeser Jul 19, 2024
011dd50
Try adding undate logo to readme
rlskoeser Jul 19, 2024
517542b
Try version with transparent background
rlskoeser Jul 19, 2024
476007a
Require newer version of m2r2
rlskoeser Jul 19, 2024
867ce93
Move pytest config into pyproject.toml
rlskoeser Jul 20, 2024
09d46b9
Switch to myst-parser and reconfigure markdown in sphinx docs
rlskoeser Jul 20, 2024
129b82e
Document more contributions
rlskoeser Aug 16, 2024
0396a64
Move numpy date shim into separate file
rlskoeser Aug 16, 2024
1a75640
Add unit tests for date class
rlskoeser Aug 16, 2024
329fa3d
Update type hints
rlskoeser Aug 16, 2024
418837f
Make EDTF parser available as undate formatter; handle 5+ digit years
rlskoeser Aug 16, 2024
c62eeea
Add and test properties for accessing month/day/year as 4/2-digit string
rlskoeser Aug 29, 2024
a81f68f
Move edtf formatter out of init
rlskoeser Aug 29, 2024
2e41685
Revise date precision ordering / comparison logic
rlskoeser Aug 29, 2024
e508524
Revise EDTF string formatting
rlskoeser Aug 29, 2024
c65bc3e
Handle possible unset values when creating edtf date string
rlskoeser Aug 29, 2024
640705c
Require formatter to_string to support undate and undate interval
rlskoeser Aug 29, 2024
a8802d6
Add string format and parse methods to undate and undate interval
rlskoeser Aug 29, 2024
a4a3675
Configure mypy pre-commit check
rlskoeser Aug 29, 2024
eaacbf2
Merge pull request #91 from dh-tech/feature/mypy-precommit-check
rlskoeser Sep 5, 2024
a375e93
Merge pull request #88 from dh-tech/feature/pyproject-setup-refactor
rlskoeser Sep 5, 2024
282432e
Merge branch 'develop' into experiment/numpy-datetime64
rlskoeser Sep 27, 2024
616ae2f
Switch from black to ruff and fix imports
rlskoeser Sep 27, 2024
2a7de40
Clean up based on code review and linters
rlskoeser Sep 27, 2024
2327d7b
Improve numpy duration & timedelta handling
rlskoeser Sep 27, 2024
039ff0e
Improve duration handling for unknown years
rlskoeser Sep 27, 2024
cbc929e
Add branching guidelines to contributor documentation (#94)
rlskoeser Oct 3, 2024
825c9f4
Revise optional dependency groups so dev implies test
rlskoeser Oct 24, 2024
996c882
Merge pull request #96 from dh-tech/fix-dev-deps
rlskoeser Oct 24, 2024
7527a05
Test against python 3.13
rlskoeser Oct 24, 2024
fcacf38
Merge pull request #97 from dh-tech/feature/support-python3.13
rlskoeser Oct 24, 2024
47fc7fc
New notebook to demonstrate & confirm EDTF spec support.
rlskoeser Oct 24, 2024
605d456
Add examples for more of L1/L2 EDTF spec
rlskoeser Oct 24, 2024
590996c
Support negative years for five digit+ years
rlskoeser Oct 24, 2024
56eac4b
Allow importing main undate objects from top level namespace
rlskoeser Oct 24, 2024
5e90973
Handle negative 4-digit years
rlskoeser Oct 24, 2024
8760c33
Handle level 2 fully-unspecified year
rlskoeser Oct 24, 2024
71cddb8
Don't use signed int for year since + is unsupported
rlskoeser Oct 24, 2024
8a4b67e
Clean items flagged by @ColeDCrawford in code review
rlskoeser Nov 7, 2024
ed3f493
Use union syntax for py3.9 type hints
rlskoeser Nov 7, 2024
e197cb2
Switch CI check from black to ruff
rlskoeser Nov 7, 2024
61be76f
Clean up to pass ruff and mypy checks
rlskoeser Nov 7, 2024
e494d7a
Update project classifiers
rlskoeser Nov 7, 2024
0806dc9
Merge branch 'develop' into experiment/numpy-datetime64
rlskoeser Nov 7, 2024
5c97e4b
Merge pull request #84 from dh-tech/experiment/numpy-datetime64
rlskoeser Nov 7, 2024
5668c52
Merge branch 'develop' into feature/edtf-formatter
rlskoeser Nov 7, 2024
3913997
Merge branch 'feature/edtf-formatter' into feature/parse-format
rlskoeser Nov 7, 2024
25ba4ad
Cleanup unused assertion flagged by kypso-bot
rlskoeser Nov 7, 2024
540bd10
Add tests for lines missing coverage
rlskoeser Nov 7, 2024
6ca21f7
Merge pull request #89 from dh-tech/feature/edtf-formatter
rlskoeser Nov 8, 2024
759ec58
Merge pull request #90 from dh-tech/feature/parse-format
rlskoeser Nov 8, 2024
5086d1b
Rename formatters submodule and classes to converters
rlskoeser Nov 8, 2024
d7b32d3
Add converters to sphinx docs; document how to add a new converter #86
rlskoeser Nov 8, 2024
26c3958
Handle empty string; add more invalid test cases
rlskoeser Nov 8, 2024
2368f2e
Update notebook for formatter -> converter refactor
rlskoeser Nov 8, 2024
37d8623
Adjustments and documentation suggested by @coderabbitai
rlskoeser Nov 8, 2024
2b26e45
Drop python-dateutil from dependencies, since it's currently unused
rlskoeser Nov 8, 2024
ee26ed1
Merge pull request #101 from dh-tech/feature/rename-formatter-converter
rlskoeser Nov 8, 2024
241b572
Merge branch 'develop' into feature/edtf-demo-notebook
rlskoeser Nov 8, 2024
7b4081f
Update EDTF demo/validation notebook for formatter/converter refactor
rlskoeser Nov 8, 2024
f829a97
Remove unsupported note for negative years
rlskoeser Nov 8, 2024
3531bb9
Clean up items flagged by ruff check
rlskoeser Nov 8, 2024
b821923
Improve test coverage and error handling for EDTF
rlskoeser Nov 8, 2024
e450a01
Merge pull request #98 from dh-tech/feature/edtf-demo-notebook
rlskoeser Nov 15, 2024
1cb41b0
Update formatting examples and clarify current limitations
rlskoeser Nov 15, 2024
4f4b4c3
Improve & test handling for edtf parse error
rlskoeser Nov 15, 2024
7a83553
Document changes included in v0.3 and impact of including numpy
rlskoeser Nov 15, 2024
c753336
Document more changes included in v0.3
rlskoeser Nov 15, 2024
1b94c78
Remove unused variable
rlskoeser Nov 15, 2024
867c5ca
Clean up, improve documentation, and prep for release
rlskoeser Nov 18, 2024
f1a57e6
Use absolute url to example notebooks to avoid sphinx error
rlskoeser Nov 18, 2024
e3c6f65
More @coderabbitai nit picks
rlskoeser Nov 18, 2024
7073a7d
Update pyproject.toml
rlskoeser Nov 18, 2024
69eca57
Simplify cache check in github actions
rlskoeser Nov 18, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions .all-contributorsrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"files": [
"README.md"
"CONTRIBUTORS.md"
],
"imageSize": 100,
"commit": true,
Expand All @@ -14,7 +14,8 @@
"contributions": [
"code",
"review",
"test"
"test",
"ideas"
]
},
{
Expand All @@ -38,7 +39,9 @@
"avatar_url": "https://avatars.githubusercontent.com/u/1488847?v=4",
"profile": "https://github.com/robcast",
"contributions": [
"data"
"data",
"ideas",
"review"
]
},
{
Expand All @@ -50,7 +53,8 @@
"code",
"review",
"test",
"eventOrganizing"
"eventOrganizing",
"ideas"
]
},
{
Expand All @@ -72,5 +76,6 @@
"repoType": "github",
"repoHost": "https://github.com",
"projectName": "undate-python",
"projectOwner": "dh-tech"
"projectOwner": "dh-tech",
"badgeTemplate": "![All Contributors](https://img.shields.io/github/all-contributors/dh-tech/undate-python?color=ee8449&style=flat-square)"
}
27 changes: 14 additions & 13 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,27 @@ jobs:

steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.10"
python-version: "3.12"
cache: 'pip'
cache-dependency-path: '**/setup.cfg'
- name: Install package with dependencies
cache-dependency-path: '**/pyproject.toml'
- name: Install package with development dependencies
run: pip install -e ".[dev]"
if: steps.python-cache.outputs.cache-hit != 'true'

# check code style
- name: Run black
run: black src --check --diff
# check with ruff
- name: Run ruff
run: ruff check

# check docs
- name: Check that documentation can be built
run: tox -e docs
# check docs build
- name: Check that documentation builds with no errors or warnings
run: sphinx-build docs docs/_build --fail-on-warning

# check types with mypy
- name: Install mypy
run: pip install mypy
- name: Check types in python src directory; install needed types
run: mypy --install-types --non-interactive src

# use treon to make sure that example notebooks run
- name: Check jupyter notebooks with treon
run: treon
15 changes: 6 additions & 9 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ on:

env:
# python version used to calculate and submit code coverage
COV_PYTHON_VERSION: "3.11"
COV_PYTHON_VERSION: "3.12"

jobs:
python-unit:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.9", "3.10", "3.11", "3.12"]
python: ["3.9", "3.10", "3.11", "3.12", "3.13"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Python 3.13 compatibility needs attention

The dependencies have the following Python version requirements:

  • lark: >=3.8
  • numpy: >=3.10

While these version constraints don't explicitly exclude Python 3.13, numpy is typically conservative with supporting alpha/beta Python versions. Since Python 3.13 is currently in alpha, it's recommended to:

  • Remove Python 3.13 from the test matrix until it reaches beta/stable status
  • Monitor numpy's compatibility status with Python 3.13
🔗 Analysis chain

Verify Python 3.13 compatibility

Including Python 3.13 in the test matrix is forward-looking, but as it's currently in alpha, we should verify that all dependencies support it.


Let me check the dependencies more thoroughly to verify Python 3.13 compatibility.


Let me try one more verification approach to check the dependencies directly from package registries.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if dependencies in pyproject.toml specify Python version constraints

# Find and examine pyproject.toml files
fd pyproject.toml --exec cat {} | grep -A 10 "dependencies\|requires-python"

Length of output: 641


Script:

#!/bin/bash
# Check specific version constraints for lark and numpy
fd requirements.txt --exec cat {}
fd setup.py --exec cat {} | grep -A 10 "install_requires\|python_requires"

Length of output: 116


Script:

#!/bin/bash
# Check if the main dependencies (lark and numpy) support Python 3.13
curl -s https://pypi.org/pypi/lark/json | jq -r '.info.requires_python'
curl -s https://pypi.org/pypi/numpy/json | jq -r '.info.requires_python'

Length of output: 157

defaults:
run:
working-directory: .
Expand All @@ -30,21 +30,18 @@ jobs:
with:
python-version: ${{ matrix.python }}
cache: 'pip'
cache-dependency-path: '**/setup.cfg'
cache-dependency-path: '**/pyproject.toml'
- name: Install package with dependencies
run: |
pip install -e ".[dev]"
python -m pip install tox tox-gh-actions
if: steps.python-cache.outputs.cache-hit != 'true'
run: pip install -e ".[test]"

# for all versions but the one we use for code coverage, run normally
- name: Run unit tests normally
run: tox
run: pytest
if: ${{ matrix.python != env.COV_PYTHON_VERSION }}

# run code coverage in one version only
- name: Run unit tests with code coverage reporting
run: tox -e coverage
run: pytest --cov=undate
if: ${{ matrix.python == env.COV_PYTHON_VERSION }}
- name: Upload test coverage to Codecov
uses: codecov/codecov-action@v3
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,6 @@ venv.bak/
# code coverage
.coverage
coverage.xml

# jupyter
.ipynb_checkpoints/
15 changes: 11 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
files: \.py
repos:
- repo: https://github.com/psf/black
rev: 22.10.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.3.4
hooks:
- id: black
- id: ruff
args: [ --fix, --exit-non-zero-on-fix ]
- id: ruff-format
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
Expand All @@ -12,4 +14,9 @@ repos:
- id: debug-statements
- id: end-of-file-fixer
- id: mixed-line-ending
- id: trailing-whitespace
- id: trailing-whitespace
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.13.0
hooks:
- id: mypy
additional_dependencies: [numpy]
1 change: 1 addition & 0 deletions .pythonversion
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Python 3.12.7
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Change Log

## 0.3

- Updated to use numpy `datetime64` to support a greater range of years beyond the 4-digit years supported by python's builtin ``datetime.date`
- Custom `Date` and `Timedelta` objects as shims to make numpy datetime64 and timedelta64 act more like python `datetime` objects
- Renamed formatters to converters for more flexibility / scope
- Support using different converters with new `format` and `parse` methods on `Undate`
- Improved EDTF support:
- Support 5+ digit years with leading Y (thanks to numpy.datetime64)
- Jupyter notebook demonstrating / validating EDTF support
- Full support for Level 0 Date and Time Interval (no Date and Time support)
- Level 1:
- Letter-prefixed cbalendar year
- Unspecified digit from the right
- Partial support for extended interval
- Level 2: unspecified digit anywhere in the date
- Improved readme with example usage and disclaimers about current functionality
- Improved documentation for adding new converters
- Improved documentation for branching guidelines in contributing
- Restructured sphinx documentation and added more code documentation
- Added a project logo
- Switch from black to ruff for pre-commit formatting

### numpy impact

Performance differences seem to be negligible, but it does increase payloud size. The virtualenv for installing version 0.2 was 14MB; when installing the newer version with numpy, the virtualenv is 46MB (the numpy folder in site packages is 31MB on its own).

## 0.2

- Undate and UndateInterval now include an optional label for named dates or time periods
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ authors:
family-names: Casties
affiliation: Max Planck Institute for the History of Science
orcid: https://orcid.org/0009-0008-9370-1303
version: '0.2'
date-released: 2024-04-25
version: '0.3'
date-released: 2024-11-18
repository-code: https://github.com/dh-tech/undate-python
license: Apache 2
47 changes: 41 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,58 @@
# Contributing to Undate - A fuzzy date Python library

# Contributing to undate

Hey there!

If you found your way here that probably means you are curious about how to contribute to this project. This is great! We are always looking for new contributors. If you can't find the information you are looking for in this document or anywhere else in the repo, please consider [opening a ticket](https://github.com/dh-tech/undate-python/issues) so we know there is something we need to address.

## Project Setup
Instructions on how to set up the project locally and how to run the tests can be found [in the Readme file](README.md).
Instructions on how to set up the project locally and how to run the tests can be found in [Developer Notes](DEVELOPER_NOTES.md).

## Submitting Changes
If you would like to contribute by submitting bug fixes, improvements, or new features, please fork the repository and then make a pull request to our main branch when you are ready. For details see [this description of the Forking Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow).

If you would like to contribute by submitting bug fixes, improvements, or new features, please fork the repository and then make a pull request to undate **develop** branch when you are ready. If you haven't contributed like this before, we recommend reading [GitHub's documentation on Contributing to a Project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project).

We use **git flow** branching conventions, so the current release is on the **main** branch and new feature development happens on **develop**. Pull requests for new features or bug fixes should be made to **develop** for inclusion in the next release. For more details, read a longer explanation of the [Git Flow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)

Recommended branch naming conventions:

- For a new feature, create a branch named `feature/i##-short-name` where `##` is the relevant GitHub issue number (if there is one) and `short-name` is a brief label that relates to the changes or feature

In most cases branches should be created from the most recent **develop** branch. Make sure you check out develop and pull any remote changes.
```sh
git checkout develop
git pull
```

If you have `git flow` installed, you can start, you can use:
```sh
git flow feature start i##-short-name
```

If not, you can do the same thing with git commands:
```sh
git checkout -b feature/i##-short-name
```

When you are ready to contribute your changes, open a pull request from your branch to the main undate repository. Please be sure to link to the GitHub issue in your pull request comments.

Ideally contributions should include documentation and tests for the proposed changes, but if that is a barrier please let us know when you submit a pull request.

Please be aware that any contributions will fall under the existing Apache 2.0 license applied to this software.

## Submitting Bug Reports and Feature Requests

If you find a bug or can think a feature you would really like to see being implemented, you can [create a new issue](https://github.com/dh-tech/undate-python/issues). Please first look through the existing issues, however, to avoid duplication of issues.

If you report a bug, please include any error messages you get and a full description of the steps to reproduce the bug. For new feature requests, please clearly describe the functionality you are looking for and, if applicable, why any existing workflow does not suffice. Please also consider, fixing bugs and implementing new features yourself and submit pull request! :)
If you report a bug, please include any error messages you get and a full description of the steps to reproduce the bug. For new feature requests, please clearly describe the functionality you are looking for and, if applicable, why any existing workflow does not suffice. Please also consider fixing bugs and implementing new features yourself and submitting them via pull request! :)

## Submitting Use Cases and Example Data

We are particularly interested in collecting more use cases and example data where undate would be helpful!

Example data can be added to the [examples/](https://github.com/dh-tech/undate-python/tree/main/examples/) folder by a pull request.

## Getting Help
The best and recommended way to get help is to join the [DHTech Slack](https://dh-tech.github.io/join/) and ask for help there. Only in cases when this is not feasible at all, you can open a new issue and tag it with "Help Request".
The best and recommended way to get help is to join the [DHTech Slack](https://dh-tech.github.io/join/) and ask for help there. Only in cases when this is not feasible at all, you can open a new issue and tag it with "Help Request".

## DHTech
This project started during the DHTech 2022 Hackathon. If you do technical work in the digital humanities and are intersted in meeting like-minded people, [consider joining](https://dh-tech.github.io/join/)!
51 changes: 51 additions & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# All Contributors

We use [All Contributors](https://allcontributors.org/) because we recognize that all kinds of contributions are valuable and important.

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
![All Contributors](https://img.shields.io/github/all-contributors/dh-tech/undate-python?color=ee8449&style=flat-square)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

## Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ColeDCrawford"><img src="https://avatars.githubusercontent.com/u/16374762?v=4?s=100" width="100px;" alt="Cole Crawford"/><br /><sub><b>Cole Crawford</b></sub></a><br /><a href="https://github.com/dh-tech/undate-python/commits?author=ColeDCrawford" title="Code">💻</a> <a href="https://github.com/dh-tech/undate-python/pulls?q=is%3Apr+reviewed-by%3AColeDCrawford" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/dh-tech/undate-python/commits?author=ColeDCrawford" title="Tests">⚠️</a> <a href="#ideas-ColeDCrawford" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://rlskoeser.github.io"><img src="https://avatars.githubusercontent.com/u/691231?v=4?s=100" width="100px;" alt="Rebecca Sutton Koeser"/><br /><sub><b>Rebecca Sutton Koeser</b></sub></a><br /><a href="https://github.com/dh-tech/undate-python/commits?author=rlskoeser" title="Code">💻</a> <a href="https://github.com/dh-tech/undate-python/pulls?q=is%3Apr+reviewed-by%3Arlskoeser" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/dh-tech/undate-python/commits?author=rlskoeser" title="Tests">⚠️</a> <a href="#blog-rlskoeser" title="Blogposts">📝</a> <a href="#example-rlskoeser" title="Examples">💡</a> <a href="https://github.com/dh-tech/undate-python/commits?author=rlskoeser" title="Documentation">📖</a> <a href="#platform-rlskoeser" title="Packaging/porting to new platform">📦</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/robcast"><img src="https://avatars.githubusercontent.com/u/1488847?v=4?s=100" width="100px;" alt="Robert Casties"/><br /><sub><b>Robert Casties</b></sub></a><br /><a href="#data-robcast" title="Data">🔣</a> <a href="#ideas-robcast" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/dh-tech/undate-python/pulls?q=is%3Apr+reviewed-by%3Arobcast" title="Reviewed Pull Requests">👀</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jdamerow"><img src="https://avatars.githubusercontent.com/u/8881141?v=4?s=100" width="100px;" alt="Julia Damerow"/><br /><sub><b>Julia Damerow</b></sub></a><br /><a href="https://github.com/dh-tech/undate-python/commits?author=jdamerow" title="Code">💻</a> <a href="https://github.com/dh-tech/undate-python/pulls?q=is%3Apr+reviewed-by%3Ajdamerow" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/dh-tech/undate-python/commits?author=jdamerow" title="Tests">⚠️</a> <a href="#eventOrganizing-jdamerow" title="Event Organizing">📋</a> <a href="#ideas-jdamerow" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/maltevogl"><img src="https://avatars.githubusercontent.com/u/20907912?v=4?s=100" width="100px;" alt="Malte Vogl"/><br /><sub><b>Malte Vogl</b></sub></a><br /><a href="https://github.com/dh-tech/undate-python/commits?author=maltevogl" title="Code">💻</a> <a href="https://github.com/dh-tech/undate-python/pulls?q=is%3Apr+reviewed-by%3Amaltevogl" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/dh-tech/undate-python/commits?author=maltevogl" title="Tests">⚠️</a> <a href="https://github.com/dh-tech/undate-python/commits?author=maltevogl" title="Documentation">📖</a></td>
</tr>
</tbody>
<tfoot>
<tr>
<td align="center" size="13px" colspan="7">
<img src="https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg">
<a href="https://all-contributors.js.org/docs/en/bot/usage">Add your contributions</a>
</img>
</td>
</tr>
</tfoot>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

### Related blog posts

(blog-rlskoeser)=
#### [by Rebecca Sutton Koeser](#blog-rlskoeser)
- [Join me for a DHTech hackathon? It’s an un-date!](https://dh-tech.github.io/blog/2023-02-09-hackathon-summary/) 2023-02-09 on DHTech blog
Loading
Loading