2025-05-27 12:21:22 +02:00
# Changelog
2025-05-26 17:44:34 +02:00
2025-12-25 11:01:10 +01:00
## 0.12.0 "The Color Update"
2025-12-12 11:03:10 +01:00
2025-12-12 11:34:37 +01:00
* All `AuthSrc()` derivatives, deprecated and never used, have been removed.
2025-12-12 11:03:10 +01:00
* New module `mat` adds a shallow reimplementation of `Matrix()` in order to implement matrix multiplication
2025-12-12 11:34:37 +01:00
* Removed obsolete `configparse` implementation that has been around since 0.3 and shelved since 0.4.
2025-12-25 11:01:10 +01:00
* `color` : added support for conversion from RGB to sRGB, XYZ, OKLab and OKLCH.
2025-12-12 11:03:10 +01:00
2025-12-05 17:45:15 +01:00
## 0.11.2
+ increase test coverage of `validators`
2025-12-01 10:23:59 +01:00
## 0.11.1
+ make `yesno()` accept boolean types
2025-11-28 10:21:26 +01:00
## 0.11.0
+ **Breaking** : sessions returned by `SQLAlchemy()` are now wrapped by default. Restore original behavior by passing `wrap=False` to the constructor or to `begin()`
+ Slate unused `require_auth()` and derivatives for removal in 0.14.0
+ Add `cb32lencode()`
+ `Snowflake()` : add `.from_cb32()` , `.from_base64()` , `.from_oct()` , `.from_hex()` classmethods
+ Add `SpitText()`
+ Add `Lawyer()` with seven methods
+ Style changes to docstrings
2025-11-27 19:50:33 +01:00
## 0.10.2 and 0.7.11
+ fix incorrect types on `cb32decode()`
2025-11-23 21:52:01 +01:00
## 0.10.1 and 0.7.10
+ `peewee` : fix missing imports
2025-11-23 19:13:14 +01:00
## 0.10.0
+ `peewee` : add `SnowflakeField` class
2025-11-16 10:34:49 +01:00
## 0.9.0
+ Fix to make experimental `Waiter` usable
+ Suspend `glue()` release indefinitely
+ Add `yesno()`
+ Document validators
2025-11-10 17:18:13 +01:00
## 0.8.2 and 0.7.9
+ `.color` : fix `chalk` not behaving as expected
## 0.8.1 and 0.7.8
+ Fix missing type guard in `unbound_fk()` and `bound_fk()`
2025-11-05 10:47:08 +01:00
## 0.8.0
+ Add `username_column()` to `.sqlalchemy`
+ Improve (experimental) `Waiter`
## 0.7.7
+ Fix imports in `.sqlalchemy`
2025-11-01 09:29:20 +01:00
## 0.7.5
+ Delay release of `FakeModule` to 0.9.0
+ Update dependencies: `.sqlalchemy` now requires `flask_sqlalchemy` regardless of use of Flask
2025-10-29 09:28:59 +01:00
## 0.7.4
+ Delay release of `@glue()`
+ Add docs and some tests to `.iding`
+ Fix bug in `SiqGen()` that may prevent generation in short amounts of time
2025-10-18 14:48:32 +02:00
## 0.7.3
+ Fixed some broken imports in `.sqlalchemy`
2025-11-01 09:29:20 +01:00
+ Stage `@glue()` for release in ~~0.8.0~~ 0.9.0
2025-10-18 14:48:32 +02:00
+ Add docs to `.sqlalchemy`
2025-10-11 18:39:06 +02:00
## 0.7.2
+ `@future()` now can take a `version=` argument
+ `Waiter()` got marked `@future` indefinitely
+ Stage `username_column()` for release in 0.8.0
+ Explicit support for Python 3.14 (aka python pi)
2025-10-11 11:07:50 +02:00
## 0.7.1
+ Add documentation ([Read The Docs ](https://suou.readthedocs.io/ ))
+ Improved decorator typing
2025-09-19 13:34:51 +02:00
## 0.7.0 "The Lucky Update"
2025-09-19 15:39:44 +02:00
+ Add RNG/random selection overloads such as `luck()` , `rng_overload()`
+ Add 7 new throwable exceptions
2025-09-23 12:52:11 +02:00
+ Add color utilities: `chalk` object and `WebColor()`
2025-09-19 17:22:00 +02:00
+ Add `.terminal` module, to ease TUI development
+ `calendar` : add `parse_time()`
2025-09-23 12:52:11 +02:00
+ Add validators `not_greater_than()` , `not_less_than()`
+ Add `@future()` decorator: it signals features not yet intended to be public, for instance, backported as a part of a bug fix.
2025-09-19 13:34:51 +02:00
2025-09-13 21:04:22 +02:00
## 0.6.1
- First release on PyPI under the name `suou` .
2025-09-19 19:02:46 +02:00
- **BREAKING**: if you installed `sakuragasaki46-suou<=0.6.0` you need to uninstall and reinstall or things may break.
2025-09-13 21:04:22 +02:00
- Fix `sqlalchemy.asyncio.SQLAlchemy()` to use context vars; `expire_on_commit=` is now configurable at instantiation. Fix some missing re-exports.
2025-09-01 22:36:55 +02:00
## 0.6.0
2025-09-13 21:04:22 +02:00
+ `.sqlalchemy` has been made a subpackage and split; `sqlalchemy_async` (moved to `sqlalchemy.asyncio` ) has been deprecated. Update your imports.
2025-09-04 09:29:38 +02:00
+ Add several new utilities to `.sqlalchemy` : `BitSelector` , `secret_column` , `a_relationship` , `SessionWrapper` ,
2025-09-09 16:45:12 +02:00
`wrap=` argument to SQLAlchemy. Also removed dead batteries
2025-09-11 20:38:27 +02:00
+ Add `.waiter` module. For now, non-functional ~
2025-09-04 01:25:25 +02:00
+ Add `ArgConfigSource` to `.configparse`
2025-09-09 16:45:12 +02:00
+ Add Z85 (`z85encode()` `z85decode()` ) encoding support
2025-09-05 21:50:17 +02:00
+ Add more strings to `.legal` module
2025-09-09 16:45:12 +02:00
+ `.signing` module is now covered by tests
2025-09-09 22:05:57 +02:00
+ New decorator `dei_args()` . Now offensive naming is no more a worry!
2025-09-01 22:36:55 +02:00
## 0.5.3
2025-09-04 09:49:31 +02:00
- Added docstring to `SQLAlchemy()` .
- More type fixes.
2025-09-01 22:36:55 +02:00
2025-08-25 07:27:07 +02:00
## 0.5.2
- Fixed poorly handled merge conflict leaving `.sqlalchemy` modulem unusable
2025-08-23 15:01:51 +02:00
## 0.5.1
- Fixed return types for `.sqlalchemy` module
2025-07-22 22:15:11 +02:00
## 0.5.0
2025-07-24 09:48:01 +02:00
+ `sqlalchemy` : add `unbound_fk()` , `bound_fk()`
2025-08-08 07:58:17 +02:00
+ Add `sqlalchemy_async` module with `SQLAlchemy()` async database binding.
* Supports being used as an async context manager
2025-08-15 14:13:35 +02:00
* Automatically handles commit and rollback
+ `sqlalchemy_async` also offers `async_query()`
+ Changed `sqlalchemy.parent_children()` to use `lazy='selectin'` by default
2025-08-15 20:37:33 +02:00
+ Add `timed_cache()` , `alru_cache()` , `TimedDict()` , `none_pass()` , `twocolon_list()` , `quote_css_string()` , `must_be()`
2025-07-30 02:01:11 +02:00
+ Add module `calendar` with `want_*` date type conversion utilities and `age_and_days()`
2025-07-24 11:44:24 +02:00
+ Move obsolete stuff to `obsolete` package (includes configparse 0.3 as of now)
2025-07-30 10:54:09 +02:00
+ Add `redact` module with `redact_url_password()`
2025-07-30 13:00:41 +02:00
+ Add more exceptions: `NotFoundError()` , `BabelTowerError()`
2025-07-31 22:53:44 +02:00
+ Add `sass` module
2025-08-10 09:09:20 +02:00
+ Add `quart` module with `negotiate()` , `add_rest()` , `add_i18n()` , `WantsContentType`
2025-08-11 09:53:01 +02:00
+ Add `dei` module: it implements a compact and standardized representation for pronouns, inspired by the one in use at PronounDB
2025-07-22 22:15:11 +02:00
2025-08-23 15:01:51 +02:00
## 0.4.1
- Fixed return types for `.sqlalchemy` module.
- `sqlalchemy.parent_children()` now takes a `lazy` parameter. Backported from 0.5.1.
2025-07-06 22:40:43 +02:00
## 0.4.0
2025-07-22 02:28:44 +02:00
+ `pydantic` is now a hard dependency
+ `ConfigProperty` has now been generalized: check out `classtools.ValueProperty`
+ **BREAKING** : Changed the behavior of `makelist()` : **different behavior when used with callables** .
* When applied as a decorator on callable, it converts its return type to a list.
* Pass `wrap=False` to treat callables as simple objects, restoring the 0.3 behavior.
+ New module `lex` to make tokenization more affordable — with functions `symbol_table()` and `lex()`
+ Add `dorks` module and `flask.harden()` . `dorks` contains common endpoints which may be target by hackers
2025-07-19 11:31:01 +02:00
+ Add `sqlalchemy.bool_column()` : make making flags painless
2025-07-19 23:09:16 +02:00
+ Introduce `rb64encode()` and `rb64decode()` to deal with issues about Base64 and padding
2025-07-22 02:28:44 +02:00
* `b64encode()` and `b64decode()` pad to the right
* `rb64encode()` and `rb64decode()` pad to the left, then strip leading `'A'` in output
2025-07-19 23:09:16 +02:00
+ Added `addattr()` , `PrefixIdentifier()` , `mod_floor()` , `mod_ceil()`
2025-07-22 02:28:44 +02:00
+ First version to have unit tests! (Coverage is not yet complete)
2025-07-19 23:09:16 +02:00
2025-08-23 14:54:58 +02:00
## 0.3.8
- Fixed return types for `.sqlalchemy` module.
2025-08-23 15:01:51 +02:00
- `sqlalchemy.parent_children()` now takes a `lazy` parameter. Backported from 0.5.1.
2025-08-23 14:54:58 +02:00
2025-07-19 23:09:16 +02:00
## 0.3.7
- Fixed a bug in `b64decode()` padding handling which made the function inconsistent and non injective. Now, leading `'A'` is NEVER stripped.
2025-07-06 22:40:43 +02:00
2025-07-09 17:15:42 +02:00
## 0.3.6
2025-07-11 09:58:08 +02:00
- Fixed `ConfigValue` behavior with multiple sources. It used to iterate through all the sources, possibly overwriting; now, iteration stops at first non-missing value
2025-07-09 17:15:42 +02:00
## 0.3.5
2025-07-11 09:58:08 +02:00
- Fixed cb32 handling. Now leading zeros in SIQ's are stripped, and `.from_cb32()` was implemented
2025-07-09 17:15:42 +02:00
2025-07-06 22:40:43 +02:00
## 0.3.4
- Bug fixes in `.flask_restx` regarding error handling
- Fixed a bug in `.configparse` dealing with unset values from multiple sources
2025-06-18 10:17:00 +02:00
## 0.3.3
- Fixed leftovers in `snowflake` module from unchecked code copying — i.e. `SnowflakeGen.generate_one()` used to require an unused typ= parameter
2025-06-18 16:30:02 +02:00
- Fixed a bug in `id_column()` that made it fail to provide a working generator — again, this won't be backported
2025-06-18 10:17:00 +02:00
2025-06-18 10:04:04 +02:00
## 0.3.2
2025-06-18 09:59:58 +02:00
- Fixed bugs in Snowflake generation and serialization of negative values
2025-06-01 10:51:32 +02:00
## 0.3.0
2025-06-17 20:13:40 +02:00
- Fixed `cb32encode()` and `b32lencode()` doing wrong padding — **UNSOLVED in 0.2.x** which is out of support, effective immediately
- **Changed behavior** of `kwargs_prefix()` which now removes keys from original mapping by default
2025-06-11 14:38:22 +02:00
- Add SQLAlchemy auth loaders i.e. `sqlalchemy.require_auth_base()` , `flask_sqlalchemy` .
What auth loaders do is loading user token and signature into app
2025-06-18 08:40:37 +02:00
- `sqlalchemy` : add `parent_children()` and `create_session()`
2025-06-11 14:38:22 +02:00
- Implement `UserSigner()`
2025-06-01 10:51:32 +02:00
- Improve JSON handling in `flask_restx`
2025-06-11 14:38:22 +02:00
- Add base2048 (i.e. [BIP-39 ](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki )) codec
2025-06-18 08:40:37 +02:00
- Add `split_bits()` , `join_bits()` , `ltuple()` , `rtuple()` , `ssv_list()` , `additem()`
2025-06-11 14:38:22 +02:00
- Add `markdown` extensions
2025-06-17 20:13:40 +02:00
- Add Snowflake manipulation utilities
2025-06-01 10:51:32 +02:00
2025-05-27 16:04:09 +02:00
## 0.2.3
- Bug fixes in `classtools` and `sqlalchemy`
2025-05-27 12:21:22 +02:00
## 0.2.1
2025-05-26 17:44:34 +02:00
2025-05-27 12:21:22 +02:00
- Add `codecs.jsonencode`
2025-05-26 17:44:34 +02:00
## 0.2.0
- Add `i18n` , `itertools`
- Add `toml` as a hard dependency
- Add support for Python dicts as `ConfigSource`
2025-05-27 01:29:52 +02:00
- Implement ULID -> SIQ migrator (with flaws)
2025-05-26 17:44:34 +02:00
- First release on pip under name `sakuragasaki46-suou`
- Improve sqlalchemy support