Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

lazy-string

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lazy-string

Python library for defining strings with delayed evaluation

  • 1.0.0
  • PyPI
  • Socket score

Maintainers
1

lazy-string

Python library for defining strings with delayed evaluation.

|pypi_package| |python_versions| |license|

The package provides a LazyString class. Its constructor accepts a callable (say, a function) which will be called when string's value is needed. The constructor also allows to specify positional and keyword arguments for that callable:

.. code-block:: python

def init(self, func: Callable[..., str], *args: Tuple, **kwargs: Mapping) -> None: ...

The value is re-evaluated on every access.

Installation

Available as a PyPI <https://pypi.python.org/pypi/lazy-string>_ package:

.. code-block:: bash

pip install lazy-string

Usage

Using with a function having no parameters:

.. code-block:: python

from lazy_string import LazyString

def make_foo() -> str: return "foo"

s = LazyString(make_foo)

The value is evaluated on demand:

.. code-block:: python

s + " bar" 'foo bar'

str(s) 'foo'

Representation explicitly tells it's a LazyString:

.. code-block:: python

s LazyString('foo')

It's safe to pass standard strings, as they will be returned as-is:

.. code-block:: python

LazyString("foo bar") 'foo bar'

Supports methods of standard strings:

.. code-block:: python

s.upper() 'FOO'

"f" in s True

dir(s) ['add', 'class', 'contains', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'getnewargs', 'gt', 'hash', 'init', 'init_subclass', 'iter', 'le', 'len', 'lt', 'mod', 'mul', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'rmod', 'rmul', 'setattr', 'sizeof', 'str', 'subclasshook', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Supplying parameters for the callable:

.. code-block:: python

def make_foo(arg1, arg2): return f"foo {arg1} {arg2}"

s = LazyString(make_foo, 123, arg2=456)

.. code-block:: python

str(s) 'foo 123 456'

Implementation Details

LazyString is inherited from collections.UserString <https://docs.python.org/3/library/collections.html#collections.UserString>_.

.. code-block:: python

LazyString.mro (<class 'lazy_string.LazyString'>, <class 'collections.UserString'>, <class 'collections.abc.Sequence'>, <class 'collections.abc.Reversible'>, <class 'collections.abc.Collection'>, <class 'collections.abc.Sized'>, <class 'collections.abc.Iterable'>, <class 'collections.abc.Container'>, <class 'object'>)

Serialization

Pickling ^^^^^^^^

Supported out of the box:

.. code-block:: python

import pickle s == pickle.loads(pickle.dumps(s)) True

To JSON ^^^^^^^

Supported with any encoder able to encode collections.UserString:

.. code-block:: python

import json import collections

class JSONEncoder(json.JSONEncoder):

def default(self, o):
  if isinstance(o, collections.UserString):
    return str(o)
  return super().default(o)

.. code-block:: python

data = {'s': s} json.dumps(data, cls=JSONEncoder) '{"s": "foo"}'

.. |pypi_package| image:: https://img.shields.io/pypi/v/lazy-string :target: http://badge.fury.io/py/lazy-string/ :alt: Version of PyPI package

.. |python_versions| image:: https://img.shields.io/badge/Python-3.7+-brightgreen.svg :alt: Supported versions of Python

.. |license| image:: https://img.shields.io/badge/license-MIT-blue.svg :target: https://github.com/oblalex/lazy-string/blob/main/LICENSE :alt: MIT license

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc