0.4.0: release notes
This commit is contained in:
parent
3188b59c15
commit
b4ef56f260
6 changed files with 33 additions and 21 deletions
15
CHANGELOG.md
15
CHANGELOG.md
|
|
@ -2,14 +2,19 @@
|
||||||
|
|
||||||
## 0.4.0
|
## 0.4.0
|
||||||
|
|
||||||
+ Added `ValueProperty`, abstract superclass for `ConfigProperty`
|
+ `pydantic` is now a hard dependency
|
||||||
+ \[BREAKING] Changed the behavior of `makelist()`: now it's also a decorator, converting its return type to a list (revertable with `wrap=False`)
|
+ `ConfigProperty` has now been generalized: check out `classtools.ValueProperty`
|
||||||
+ New module `lex` with functions `symbol_table()` and `lex()` — make tokenization more affordable
|
+ **BREAKING**: Changed the behavior of `makelist()`: **different behavior when used with callables**.
|
||||||
+ Add `dorks` module and `flask.harden()`
|
* 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
|
+ Add `sqlalchemy.bool_column()`: make making flags painless
|
||||||
+ Introduce `rb64encode()` and `rb64decode()` to deal with issues about Base64 and padding
|
+ 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()`
|
+ Added `addattr()`, `PrefixIdentifier()`, `mod_floor()`, `mod_ceil()`
|
||||||
+ First version to have unit tests!
|
+ First version to have unit tests! (Coverage is not yet complete)
|
||||||
|
|
||||||
## 0.3.7
|
## 0.3.7
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,12 @@
|
||||||
# SIS Unified Object Underarmor
|
# SIS Unified Object Underarmor
|
||||||
|
|
||||||
Good morning, my brother! Welcome the SUOU (SIS Unified Object Underarmor), a library for the management of the storage of objects into a database.
|
Good morning, my brother! Welcome the SUOU (SIS Unified Object Underarmor), an utility library for developing API's, database schemas and stuff in Python.
|
||||||
|
|
||||||
It provides utilities such as [SIQ](https://yusur.moe/protocols/siq.html), signing and generation of access tokens (on top of [ItsDangerous](https://github.com/pallets/itsdangerous)) and various utilities, including helpers for use in Flask and SQLAlchemy.
|
It provides utilities such as:
|
||||||
|
* [SIQ](https://yusur.moe/protocols/siq.html)
|
||||||
|
* signing and generation of access tokens, on top of [ItsDangerous](https://github.com/pallets/itsdangerous)
|
||||||
|
* helpers for use in Flask and SQLAlchemy
|
||||||
|
* ...
|
||||||
|
|
||||||
**It is not an ORM** nor a replacement of it; it works along existing ORMs (currently only SQLAlchemy is supported lol).
|
**It is not an ORM** nor a replacement of it; it works along existing ORMs (currently only SQLAlchemy is supported lol).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,13 +27,14 @@ from .itertools import makelist, kwargs_prefix, ltuple, rtuple, additem
|
||||||
from .i18n import I18n, JsonI18n, TomlI18n
|
from .i18n import I18n, JsonI18n, TomlI18n
|
||||||
from .snowflake import Snowflake, SnowflakeGen
|
from .snowflake import Snowflake, SnowflakeGen
|
||||||
from .lex import symbol_table, lex, ilex
|
from .lex import symbol_table, lex, ilex
|
||||||
|
from .strtools import PrefixIdentifier
|
||||||
|
|
||||||
__version__ = "0.4.0-dev28"
|
__version__ = "0.4.0"
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ConfigOptions', 'ConfigParserConfigSource', 'ConfigSource', 'ConfigValue',
|
'ConfigOptions', 'ConfigParserConfigSource', 'ConfigSource', 'ConfigValue',
|
||||||
'DictConfigSource', 'EnvConfigSource', 'I18n', 'Incomplete', 'JsonI18n',
|
'DictConfigSource', 'EnvConfigSource', 'I18n', 'Incomplete', 'JsonI18n',
|
||||||
'MissingConfigError', 'MissingConfigWarning', 'Siq', 'SiqCache', 'SiqGen',
|
'MissingConfigError', 'MissingConfigWarning', 'PrefixIdentifier', 'Siq', 'SiqCache', 'SiqGen',
|
||||||
'SiqType', 'Snowflake', 'SnowflakeGen', 'StringCase', 'TomlI18n', 'Wanted',
|
'SiqType', 'Snowflake', 'SnowflakeGen', 'StringCase', 'TomlI18n', 'Wanted',
|
||||||
'additem', 'b2048decode', 'b2048encode', 'b32ldecode', 'b32lencode',
|
'additem', 'b2048decode', 'b2048encode', 'b32ldecode', 'b32lencode',
|
||||||
'b64encode', 'b64decode', 'cb32encode', 'cb32decode', 'count_ones',
|
'b64encode', 'b64decode', 'cb32encode', 'cb32decode', 'count_ones',
|
||||||
|
|
|
||||||
|
|
@ -24,5 +24,19 @@ SENSITIVE_ENDPOINTS = """
|
||||||
/package.json
|
/package.json
|
||||||
/package-lock.json
|
/package-lock.json
|
||||||
/composer.
|
/composer.
|
||||||
|
/docker-compose.
|
||||||
|
/config/
|
||||||
|
/config.
|
||||||
|
/secrets.
|
||||||
|
/credentials.
|
||||||
|
/.idea/
|
||||||
|
/.vscode/
|
||||||
|
/storage/
|
||||||
|
/logs/
|
||||||
|
/.DS_Store
|
||||||
|
/backup
|
||||||
|
/.backup
|
||||||
|
/db.sql
|
||||||
|
/database.sql
|
||||||
""".split()
|
""".split()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
"""
|
|
||||||
Form validation, done right.
|
|
||||||
|
|
||||||
Why this? Why not, let's say, WTForms or Marshmallow? Well, I have my reasons.
|
|
||||||
|
|
||||||
TODO
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
@ -17,10 +17,6 @@ class TestCodecs(unittest.TestCase):
|
||||||
def tearDown(self) -> None:
|
def tearDown(self) -> None:
|
||||||
...
|
...
|
||||||
|
|
||||||
#def runTest(self):
|
|
||||||
# self.test_b64encode()
|
|
||||||
# self.test_b64decode()
|
|
||||||
|
|
||||||
def test_b64encode(self):
|
def test_b64encode(self):
|
||||||
self.assertEqual(b64encode(B1), 'TvC0w4UK-baaD4KmmUcHIw')
|
self.assertEqual(b64encode(B1), 'TvC0w4UK-baaD4KmmUcHIw')
|
||||||
self.assertEqual(b64encode(B2), 'vFhpRixAfHu-4wx6qMtRgg')
|
self.assertEqual(b64encode(B2), 'vFhpRixAfHu-4wx6qMtRgg')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue