Skip to main content

UniCoreFW is a lodash/underscore-style utility toolkit for Python with both functional and chainable APIs

Project description

UniCoreFW logo

Publish to PyPi Unit Tests License Python Version

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()
  • Module-spanning API
    • Functions from array, object, string, function, utils, types, security, template, and crypto are attached dynamically as static methods and as chain methods.
  • 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 cryptography is installed.

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 like UniCoreFW.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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unicorefw-1.1.3.tar.gz (94.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unicorefw-1.1.3-py3-none-any.whl (96.8 kB view details)

Uploaded Python 3

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

Hashes for unicorefw-1.1.3.tar.gz
Algorithm Hash digest
SHA256 3b16a473219803a3c20bbf8adbc2a4313c799e2a553b4f3d700badd323d0aa1f
MD5 e60748794ae349c3624db0a009d36803
BLAKE2b-256 109965e97135c5dfe65cc7ddacee83f692a223fe4ef061b2be78da1a6d342889

See more details on using hashes here.

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

Hashes for unicorefw-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b7ed78e3f0733e85281aa72c39f3e23d2f01465bb0d5f89202b4a7e8e1fb0759
MD5 4c48b5f1ee652d71bf960b99b89ab18d
BLAKE2b-256 447035ddb0431c252ca73a14e281d556dc7af58794f0c32a978be34e9729877a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page