py-utils/TODO
2026-06-06 14:55:06 +02:00

280 lines
8.5 KiB
Text

--ISSUE
Content-Type: application/sprints
Sprints:
--ISSUE
Content-Type: application/issue
ID: 1
Type: feature
Title: implement KMP algorithm for string searching
Status: hold
Priority: high
Created: 2025-05-03
Relationships:
Description: Implement the Knuth-Morris-Pratt algorithm for string searching.
I require this for matching RFC 9112 boundaries of entities against
a circular buffer.
--ISSUE
Content-Type: application/issue
ID: 2
Type: feature
Title: implement circular buffer
Status: done
Priority: high
Created: 2025-05-04
Relationships:
Description: implement a simple circular buffer
--ISSUE
Content-Type: application/issue
ID: 3
Type: bugfix
Title: move unit tests to subdirectory
Status: done
Priority: high
Created: 2025-05-04
Relationships:
Description: move the unit test suites to a unit/ subdirectory so that
integration tests and benchmarks can be cleanly separated
--ISSUE
Content-Type: application/issue
ID: 4
Type: feature
Title: implement Rabin-Karp rolling hash algorithm
Status: done
Priority: high
Created: 2025-05-05
Relationships:
Description: After testing a couple of string search algorithms, I've ditched
the idea of using KMP as my use-case gives no advantage compared to
naive searching. In addition I've came upon the challenge that many
string search algorithms are optimized for search on a linear
buffer, which in my case is not applicable as the implementation
the search algorithm is for uses a circular buffer. Rabin-Karp
seemed promising. I've come up with a different approach though,
which is still based on rolling hashes, therefore, as a base, I
need an implementation of the original Rabin-Karp rolling hash
algorithm
--ISSUE
Content-Type: application/issue
ID: 5
Type: feature
Title: implement chunked rolling hash algorithm
Status: in-progress
Priority: high
Created: 2025-05-05
Relationships:
Description: Implement my custom algorithm for doing rolling hash string search
against a fixed length ring buffer
--ISSUE
Content-Type: application/issue
ID: 6
Type: feature
Title: implement importlib.resources handler for urllib
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: A handler that can be registered with an urllib.request
OpenerDirector to open importlib.resources package files.
--ISSUE
Content-Type: application/issue
ID: 7
Type: feature
Title: setup advanced testing environment
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: copy the testing environment setup from
byteb4rb1e.sphinxcontrib.ext
--ISSUE
Content-Type: application/issue
ID: 8
Type: bugfix
Title: rename package
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: use dot namespaces to make the package a little more elegant
--ISSUE
Content-Type: application/issue
ID: 9
Type: bugfix
Title: fix LICENSE reference
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: license specification is no longer a trove classifier in
pyproject.toml, hence the reference to LICENSE must be changed
--ISSUE
Content-Type: application/issue
ID: 10
Type: feature
Title: pytest current test context fixtures
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: add fixtures for doing things in relation to the active testing
context
--ISSUE
Content-Type: application/issue
ID: 11
Type: bugfix
Title: move testing utils out of utils
Status: done
Priority: high
Created: 2025-06-20
Relationships:
Description: to shorten the namespace and also indicate that testing utilities
are different from regular utilities
--ISSUE
Content-Type: application/issue
ID: 12
Type: feature
Title: simplify testing.fixtures.mock_pkg
Status: done
Priority: high
Created: 2025-06-21
Relationships:
Description: Only bootstrap a package mock with the minimum requirements for a
Python module and let the consumer handle the directory layout.
--ISSUE
Content-Type: application/issue
ID: 13
Type: bugfix
Title: fix unit tests for urllib PkgHandler
Status: done
Priority: high
Created: 2025-06-21
Relationships:
Description: change of issue 12 wasn't properly reflected in urllib PkgHandler
unit tests
--ISSUE
Content-Type: application/issue
ID: 14
Type: feature
Title: add compression support for urllib PkgHandler
Status: done
Priority: high
Created: 2025-06-21
Relationships:
Description: with a proper content-type of the PkgHandler addinfourl object, a
consumer can determine whether the file is compressed or not.
--ISSUE
Content-Type: application/issue
ID: 15
Type: bugfix
Title: modularize module containers
Status: open
Priority: high
Created: 2025-06-28
Relationships:
Description: Even though importlib can find submodules through traversing paths
instead of relying on __init__.py for every ancestor module, this
is not supported by some modules like sphinx.ext.autosummary
--ISSUE
Content-Type: application/issue
ID: 16
Type: feature
Title: SQL-aware dataclass
Status: in-progress
Priority: low
Created: 2025-12-31
Relationships:
Description: A dataclass that transparently maps onto an SQL datastore, with
command generation for syncing data between data class and store
--ISSUE
Content-Type: application/issue
ID: 17
Type: feature
Title: recursive-descent HTML (DOM) parser
Status: in-progress
Priority: high
Created: 2025-12-31
Relationships:
Description: Extend the built-in event-driven parser to be modeled after DOM
recursive-descent HTML parser
--ISSUE
Content-Type: application/issue
ID: 18
Type: feature
Title: implement saas wrapper for Forgejo
Status: open
Priority: medium
Created: 2026-06-06
Relationships:
Description: Add a new sub-package byteb4rb1e.utils.saas.forgejo, supporting the
same/similar operations as the Bitbucket wrapper
(byteb4rb1e.utils.saas.bitbucket) against the Forgejo REST API:
token-based authentication headers, repository existence checks,
repository creation within an owner/organization, and clone URL
construction. Implement as a thin layer over
byteb4rb1e.utils.http.client, consistent with the existing
Bitbucket and GitHub modules.
Unlike Bitbucket (one global SaaS instance, hence the hardcoded
api.bitbucket.org), Forgejo is self-hosted (e.g.
git.code.tiararodney.com). The wrapper MUST take a host/instance
URL parameter (or read one from config) rather than baking any
specific instance in. This is the biggest API-surface difference
from the bitbucket module.
Bitbucket's clone_url constructs SSH only. Forgejo's repository
API returns both clone_url (HTTPS) and ssh_url, and HTTPS is
needed in CI (no SSH host keys on the Woodpecker runner). The
wrapper SHOULD expose both, either as ssh_clone_url and
https_clone_url, or a single clone_url(..., scheme="ssh"|"https").
--ISSUE
Content-Type: application/issue
ID: 19
Type: feature
Title: config framework with CLI integration
Status: done
Priority: medium
Created: 2026-06-06
Relationships:
Description: Add byteb4rb1e.utils.config: INI-backed config dataclasses where a
dataclass is the single source of truth for settings, with three
layers (field defaults, INI file sections, CLI overrides). Includes
INI loading/writing (load_ini, ensure_ini, ensure_ini_multi,
format_section), per-flag CLI integration (add_config_arguments,
apply_cli_overrides), dotted-path overrides via a unified --config
KEY=VALUE flag (apply_overrides, format_help), and the companion
argparse KeyValueAction (byteb4rb1e.utils.argparse.actions) that
accumulates KEY=VALUE pairs into a dict.
--ISSUE
Content-Type: application/issue
ID: 20
Type: feature
Title: cookie-persisting HTTP session client
Status: done
Priority: medium
Created: 2026-06-06
Relationships:
Description: Extend byteb4rb1e.utils.http.client with an HttpSession class that
persists cookies across requests via http.cookiejar (suitable for
login followed by cookie-authenticated page fetches), supporting
GET with query params, form-encoded POST, default/per-request
header merging, and HTTPError-to-response conversion. Also refactor
HttpResponse into a frozen dataclass with text as a derived
property.