suou/CHANGELOG.md
2025-09-19 19:02:46 +02:00

5.8 KiB

Changelog

0.7.0 "The Lucky Update"

  • Add RNG/random selection overloads such as luck(), rng_overload()
  • Add 7 new throwable exceptions
  • Add color utilities: chalk module
  • Add .terminal module, to ease TUI development
  • calendar: add parse_time()
  • Add validator not_greater_than()
  • Add @future() decorator

0.6.1

  • First release on PyPI under the name suou.
    • BREAKING: if you installed sakuragasaki46-suou<=0.6.0 you need to uninstall and reinstall or things may break.
  • Fix sqlalchemy.asyncio.SQLAlchemy() to use context vars; expire_on_commit= is now configurable at instantiation. Fix some missing re-exports.

0.6.0

  • .sqlalchemy has been made a subpackage and split; sqlalchemy_async (moved to sqlalchemy.asyncio) has been deprecated. Update your imports.
  • Add several new utilities to .sqlalchemy: BitSelector, secret_column, a_relationship, SessionWrapper, wrap= argument to SQLAlchemy. Also removed dead batteries
  • Add .waiter module. For now, non-functional ~
  • Add ArgConfigSource to .configparse
  • Add Z85 (z85encode() z85decode()) encoding support
  • Add more strings to .legal module
  • .signing module is now covered by tests
  • New decorator dei_args(). Now offensive naming is no more a worry!

0.5.3

  • Added docstring to SQLAlchemy().
  • More type fixes.

0.5.2

  • Fixed poorly handled merge conflict leaving .sqlalchemy modulem unusable

0.5.1

  • Fixed return types for .sqlalchemy module

0.5.0

  • sqlalchemy: add unbound_fk(), bound_fk()
  • Add sqlalchemy_async module with SQLAlchemy() async database binding.
    • Supports being used as an async context manager
    • Automatically handles commit and rollback
  • sqlalchemy_async also offers async_query()
  • Changed sqlalchemy.parent_children() to use lazy='selectin' by default
  • Add timed_cache(), alru_cache(), TimedDict(), none_pass(), twocolon_list(), quote_css_string(), must_be()
  • Add module calendar with want_* date type conversion utilities and age_and_days()
  • Move obsolete stuff to obsolete package (includes configparse 0.3 as of now)
  • Add redact module with redact_url_password()
  • Add more exceptions: NotFoundError(), BabelTowerError()
  • Add sass module
  • Add quart module with negotiate(), add_rest(), add_i18n(), WantsContentType
  • Add dei module: it implements a compact and standardized representation for pronouns, inspired by the one in use at PronounDB

0.4.1

  • Fixed return types for .sqlalchemy module.
  • sqlalchemy.parent_children() now takes a lazy parameter. Backported from 0.5.1.

0.4.0

  • 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
  • Add sqlalchemy.bool_column(): make making flags painless
  • Introduce rb64encode() and rb64decode() to deal with issues about Base64 and padding
    • b64encode() and b64decode() pad to the right
    • rb64encode() and rb64decode() pad to the left, then strip leading 'A' in output
  • Added addattr(), PrefixIdentifier(), mod_floor(), mod_ceil()
  • First version to have unit tests! (Coverage is not yet complete)

0.3.8

  • Fixed return types for .sqlalchemy module.
  • sqlalchemy.parent_children() now takes a lazy parameter. Backported from 0.5.1.

0.3.7

  • Fixed a bug in b64decode() padding handling which made the function inconsistent and non injective. Now, leading 'A' is NEVER stripped.

0.3.6

  • Fixed ConfigValue behavior with multiple sources. It used to iterate through all the sources, possibly overwriting; now, iteration stops at first non-missing value

0.3.5

  • Fixed cb32 handling. Now leading zeros in SIQ's are stripped, and .from_cb32() was implemented

0.3.4

  • Bug fixes in .flask_restx regarding error handling
  • Fixed a bug in .configparse dealing with unset values from multiple sources

0.3.3

  • Fixed leftovers in snowflake module from unchecked code copying — i.e. SnowflakeGen.generate_one() used to require an unused typ= parameter
  • Fixed a bug in id_column() that made it fail to provide a working generator — again, this won't be backported

0.3.2

  • Fixed bugs in Snowflake generation and serialization of negative values

0.3.0

  • 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
  • Add SQLAlchemy auth loaders i.e. sqlalchemy.require_auth_base(), flask_sqlalchemy. What auth loaders do is loading user token and signature into app
  • sqlalchemy: add parent_children() and create_session()
  • Implement UserSigner()
  • Improve JSON handling in flask_restx
  • Add base2048 (i.e. BIP-39) codec
  • Add split_bits(), join_bits(), ltuple(), rtuple(), ssv_list(), additem()
  • Add markdown extensions
  • Add Snowflake manipulation utilities

0.2.3

  • Bug fixes in classtools and sqlalchemy

0.2.1

  • Add codecs.jsonencode

0.2.0

  • Add i18n, itertools
  • Add toml as a hard dependency
  • Add support for Python dicts as ConfigSource
  • Implement ULID -> SIQ migrator (with flaws)
  • First release on pip under name sakuragasaki46-suou
  • Improve sqlalchemy support