HttpSession (cookie persistence via http.cookiejar, GET with query params, form-encoded POST, default/per-request header merging, HTTPError-to-response conversion) and the HttpResponse frozen-dataclass refactor live on feature/20 as separate refactor and feat commits. 14 new unit tests covering HttpResponse semantics and HttpSession behavior pass via tox -e unit-py313; the test file adds no new mypy errors beyond the repo-wide baseline. develop working tree clean of http/client.py changes.
280 lines
8.6 KiB
Text
280 lines
8.6 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: in-progress
|
|
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.
|