UniCoreFW is a lodash/underscore-style utility toolkit for Python with both functional and chainable APIs
Project description
UniCoreFW
Universal Core Utility Library (Python)
UniCoreFW is a compact, batteries-included utility library that provides chainable and static helper functions across arrays (lists), objects (dicts / nested structures), functions, strings, security utilities, templates, and optional cryptography helpers.
Current version:
1.1.2
Key Capabilities
- Two usage styles
- Static:
UniCoreFW.map([...], fn)/_.map([...], fn) - Chainable:
_(...).map(...).filter(...).value()
- Static:
- Module-spanning API
- Functions from
array,object,string,function,utils,types,security,template, andcryptoare attached dynamically as static methods and as chain methods.
- Functions from
- Security utilities
- Input validation helpers, string sanitization, rate limiting, and audit logging.
- Template engine
<%= var %>interpolation and simple<% if cond %> ... <% endif %>with defensive checks.
- Optional cryptography utilities
- Fernet symmetric encryption if
cryptographyis installed.
- Fernet symmetric encryption if
Installation
From PyPI
pip install unicorefw
Optional dependency (Crypto module)
The unicorefw.crypto module requires cryptography:
pip install cryptography
Project Layout
project_root_dir/
├── unicorefw/
│ ├── __init__.py
│ ├── core.py
│ ├── array.py
│ ├── object.py
│ ├── string.py
│ ├── function.py
│ ├── utils.py
│ ├── types.py
│ ├── security.py
│ ├── template.py
│ ├── crypto.py
│ ├── supporter.py
│ └── db.py # present (import directly as unicorefw.db)
├── examples/
│ ├── sets/
│ ├── functions.py
│ ├── task_manager.py
│ └── underscore.py
└── README.md
Quick Start
from unicorefw import _, UniCoreFW
# Chainable usage
result = (
_([1, 2, 3, 4, 5])
.map(lambda x: x * 2)
.filter(lambda x: x > 5)
.value()
)
print(result) # [6, 8, 10]
# Static usage (either UniCoreFW.* or _.*)
print(UniCoreFW.chunk([1, 2, 3, 4, 5, 6], 2)) # [[1, 2], [3, 4], [5, 6]]
print(_.chunk([1, 2, 3, 4, 5, 6], 2)) # [[1, 2], [3, 4], [5, 6]]
How the API Works
UniCoreFW exposes two main entry points:
UniCoreFW: the primary class providing static methods likeUniCoreFW.method_name(...)._: a convenience factory that returns a UniCoreFWWrapper for chaining:_(collection).map(...).filter(...).value()- Additionally,
_.method_name(...)is available as a static shortcut.
Chaining works by applying functions across UniCoreFW’s modules in a defined order; if a function name exists in a module, it becomes both:
- a chain method on
UniCoreFWWrapper, and - a static method on
UniCoreFW(without overriding earlier modules’ functions when names collide).
Core Modules (What They Provide)
Arrays (unicorefw.array)
List/array utilities: map/reduce/filter/find, chunking, flattening, set-like ops, ordering, etc.
mapped = _.map([1, 2, 3], lambda x: x * 2) # [2, 4, 6]
flattened = _.flatten([1, [2, [3, 4]]]) # [1, 2, 3, 4]
chunked = _.chunk([1, 2, 3, 4, 5, 6], 2) # [[1,2],[3,4],[5,6]]
median = _.find_median_sorted_arrays([1, 3, 5], [2, 4, 6]) # 3.5
Objects (unicorefw.object)
Dictionary and nested-structure helpers (including safe path operations), mapping, selection, and iteration.
extended = _.extend({"a": 1}, {"b": 2}, {"c": 3}) # {"a":1,"b":2,"c":3}
print(_.has({"a": {"b": [10]}}, "a.b.0")) # True
Strings (unicorefw.string)
String transformation and inspection utilities (case transforms, regex helpers, whitespace normalization, etc.).
from unicorefw import humanize, pascal_case, normalize_whitespace
print(humanize("hello_world_example")) # "Hello world example"
print(pascal_case("hello world")) # "HelloWorld"
print(normalize_whitespace(" a b\nc\t")) # "a b c"
Functions (unicorefw.function)
Function helpers such as debounce, once, composition/flow utilities, partial/curry variants, etc.
from unicorefw import once, debounce
only_once = once(lambda: "called")
print(only_once()) # "called"
print(only_once()) # None
Utilities (unicorefw.utils)
General helpers: unique_id, now, memoize, compress/decompress, etc.
print(_.unique_id("req-")) # e.g. "req-1"
print(_.compress("aaabbc")) # "3a2b1c"
print(_.decompress("3a2b1c")) # "aaabbc"
Types (unicorefw.types)
Type predicates and helpers like is_string, is_number, is_empty, deep equality, etc.
from unicorefw import is_string, is_empty
print(is_string("x")) # True
print(is_empty({})) # True
Security (unicorefw.security)
Input validation, sanitization, rate limiting, and audit logging primitives.
from unicorefw.security import RateLimiter, AuditLogger, validate_type, sanitize_string
validate_type("test", str, "param")
safe = sanitize_string(" abc ", max_length=10, allowed_chars="a-zA-Z0-9")
print(safe) # "abc"
with RateLimiter(max_calls=100, time_window=60):
pass
logger = AuditLogger(log_file="security.log")
logger.log("LOGIN", "User authenticated successfully")
Templates (unicorefw.template)
A small, defensive template processor:
from unicorefw import template
print(template("Hello, <%= name %>!", {"name": "Alice"})) # "Hello, Alice!"
Crypto (unicorefw.crypto) (optional)
Fernet symmetric encryption utilities (requires cryptography):
from unicorefw.crypto import generate_key, encrypt_string, decrypt_string
key = generate_key()
token = encrypt_string("secret", key)
print(decrypt_string(token, key)) # "secret"
Database utilities (unicorefw.db) (module present; import directly)
The repository includes a unicorefw.db module for database helpers (multi-engine, pooling, migrations, import/export). Import it explicitly:
from unicorefw.db import Database
db = Database(engine="sqlite", database=":memory:")
Changelog Notes
Older changelog entries may not include newer internal changes. Prefer GitHub releases/tags for authoritative history.
License
BSD 3-Clause License. See LICENSE.
Contributing
PRs are welcome. Please include tests where appropriate and keep changes consistent with the library’s defensive, security-oriented design.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unicorefw-1.1.3.tar.gz.
File metadata
- Download URL: unicorefw-1.1.3.tar.gz
- Upload date:
- Size: 94.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b16a473219803a3c20bbf8adbc2a4313c799e2a553b4f3d700badd323d0aa1f
|
|
| MD5 |
e60748794ae349c3624db0a009d36803
|
|
| BLAKE2b-256 |
109965e97135c5dfe65cc7ddacee83f692a223fe4ef061b2be78da1a6d342889
|
File details
Details for the file unicorefw-1.1.3-py3-none-any.whl.
File metadata
- Download URL: unicorefw-1.1.3-py3-none-any.whl
- Upload date:
- Size: 96.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7ed78e3f0733e85281aa72c39f3e23d2f01465bb0d5f89202b4a7e8e1fb0759
|
|
| MD5 |
4c48b5f1ee652d71bf960b99b89ab18d
|
|
| BLAKE2b-256 |
447035ddb0431c252ca73a14e281d556dc7af58794f0c32a978be34e9729877a
|