Skip to main content

No project description provided

Project description

adiumentum

With Nix installed, you can enter a development environment with all dependencies installed:

nix develop

Roadmap

  • add the following dummies:
from collections.abc import Callable
from random import choice, choices, randint, random
from string import ascii_letters, ascii_lowercase, ascii_uppercase
from typing import Literal

import deal


class DummiesBase:
    @classmethod
    @deal.has("random")
    def pascalcase(
        cls,
        subwords: int | None = None,
        max_length: int | None = None,
        sub_length_min: int = 3,
        sub_length_max: int = 6,
    ) -> str:
        if not max_length:
            max_length = randint(5, 12)
        if not subwords:
            subwords = int(max_length / sub_length_min) + 1
        return "".join(
            cls.titlecase(randint(sub_length_min, sub_length_max)) for _ in range(subwords)
        )[:max_length]

    @classmethod
    @deal.has("random")
    def camelcase(
        cls,
        subwords: int | None = None,
        max_length: int | None = None,
        sub_length_min: int = 3,
        sub_length_max: int = 6,
    ) -> str:
        if not max_length:
            max_length = randint(5, 12)
        if not subwords:
            subwords = int(max_length / sub_length_min) + 1
        return "".join(
            (
                cls.lowercase(randint(sub_length_min, sub_length_max)),
                *(cls.titlecase(randint(sub_length_min, sub_length_max)) for _ in range(subwords)),
            )
        )[:max_length]

    @classmethod
    @deal.has("random")
    def snakecase(
        cls,
        subwords: int | None = None,
        max_length: int | None = None,
        sub_length_min: int = 3,
        sub_length_max: int = 6,
    ) -> str:
        if not max_length:
            max_length = randint(5, 12)
        if not subwords:
            subwords = int(max_length / sub_length_min) + 1
        return "_".join(
            cls.lowercase(randint(sub_length_min, sub_length_max)) for _ in range(subwords)
        )[:max_length]

    @classmethod
    @deal.has("random")
    def kebabcase(
        cls,
        subwords: int | None = None,
        max_length: int | None = None,
        sub_length_min: int = 3,
        sub_length_max: int = 6,
    ) -> str:
        if not max_length:
            max_length = randint(5, 12)
        if not subwords:
            subwords = int(max_length / sub_length_min) + 1
        return "-".join(
            cls.lowercase(randint(sub_length_min, sub_length_max)) for _ in range(subwords)
        )[:max_length]

    @classmethod
    @deal.has("random")
    def string_tuple(
        cls,
        string_type: Literal["any", "lower", "upper", "camel", "pascal"] = "any",
        length: int | None = None,
        string_length: int | None = None,
    ) -> tuple[str, ...]:
        stringmaker: Callable[[int | None], str]
        stringmakers: dict[str, Callable[[int | None], str]] = {
            "any": cls.string,
            "lower": cls.lowercase,
            "upper": cls.uppercase,
            "camel": cls.camelcase,
            "pascal": cls.pascalcase,
            "snake": cls.snakecase,
            "kebab": cls.kebabcase,
        }
        stringmaker = stringmakers[string_type]

        if not length:
            length = randint(2, 9)
        return tuple(stringmaker(string_length) for i in range(length))

    @classmethod
    @deal.has("random")
    def text(cls, num_words: int = 10, min_word_length: int = 3, max_word_length: int = 10) -> str:
        return " ".join(
            cls.string(length=randint(min_word_length, max_word_length)) for _ in range(num_words)
        )

    @staticmethod
    @deal.has("random")
    def string(length: int | None = None) -> str:
        if not length:
            length = randint(2, 9)
        return "".join(choices(ascii_letters, k=length))

    @staticmethod
    @deal.has("random")
    def lowercase(length: int | None = None) -> str:
        if not length:
            length = randint(2, 9)
        return "".join(choices(ascii_lowercase, k=length))

    @staticmethod
    @deal.has("random")
    def titlecase(length: int | None = None) -> str:
        if not length:
            length = randint(2, 9)
        return choice(ascii_uppercase) + "".join(choices(ascii_lowercase, k=length - 1))

    @staticmethod
    @deal.has("random")
    def uppercase(length: int | None = None) -> str:
        if not length:
            length = randint(2, 9)
        return "".join(choices(ascii_uppercase, k=length))

    @staticmethod
    @deal.has("random")
    def int_tuple(
        size: int | None = None,
        min_val: int = 0,
        max_val: int = 20,
    ) -> tuple[int, ...]:
        if size is None:
            size = randint(2, 10)
        return tuple(randint(min_val, max_val) for _ in range(size))

    @staticmethod
    @deal.has("random")
    def randfloat(lower: float = 0.0, upper: float = 1.0) -> float:
        return lower + random() * (upper - lower)


if __name__ == "__main__":
    print(".string():       ", DummiesBase.string())
    print(".lowercase():    ", DummiesBase.lowercase())
    print(".titlecase():    ", DummiesBase.titlecase())
    print(".uppercase():    ", DummiesBase.uppercase())
    print(".pascalcase():   ", DummiesBase.pascalcase())
    print(".camelcase():    ", DummiesBase.camelcase())
    print(".snakecase():    ", DummiesBase.snakecase())
    print(".kebabcase():    ", DummiesBase.kebabcase())
    print(".string_tuple():  ", DummiesBase.string_tuple())
    print(".int_tuple():    ", DummiesBase.int_tuple())
    print(".randfloat():    ", DummiesBase.randfloat())
    print()
    print(".string():       ", DummiesBase.string())
    print(".lowercase():    ", DummiesBase.lowercase())
    print(".titlecase():    ", DummiesBase.titlecase())
    print(".uppercase():    ", DummiesBase.uppercase())
    print(".pascalcase():   ", DummiesBase.pascalcase())
    print(".camelcase():    ", DummiesBase.camelcase())
    print(".snakecase():    ", DummiesBase.snakecase())
    print(".kebabcase():    ", DummiesBase.kebabcase())
    print(".string_tuple():  ", DummiesBase.string_tuple("pascal"))
    print(".int_tuple():    ", DummiesBase.int_tuple(size=20, min_val=50, max_val=60))
    print(".randfloat():    ", DummiesBase.randfloat(6.0, 7.0))

add transfer_case

def transfer_case(reference: str, candidate: str) -> str:
    if reference.istitle():
        return candidate.title()
    if reference.islower():
        return candidate.lower()
    if reference.isupper():
        return candidate.upper()
    return candidate

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

adiumentum-0.7.1.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

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

adiumentum-0.7.1-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file adiumentum-0.7.1.tar.gz.

File metadata

  • Download URL: adiumentum-0.7.1.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for adiumentum-0.7.1.tar.gz
Algorithm Hash digest
SHA256 7879ec2c1ae0a25f450245297306c3da966af44572aabacf10f3da98b8dc3685
MD5 aea74a906ad7e3f6bfde9bd7796b983a
BLAKE2b-256 40c96d1a378ead42543fb893a89f1967e28a8999a1f3ea25a3364a2939e2306a

See more details on using hashes here.

Provenance

The following attestation bundles were made for adiumentum-0.7.1.tar.gz:

Publisher: python-publish.yml on yelircaasi/adiumentum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file adiumentum-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: adiumentum-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 36.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for adiumentum-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8030e514c072214d579263927280045135ab90bfca423249a706f235c3ceeb10
MD5 9a176e7e23bc90bd0ee9316e0bc13cd3
BLAKE2b-256 65f58eb5ed8bc0034d7c35ff724d038a922c09f90700505035eeed9dd396c0a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for adiumentum-0.7.1-py3-none-any.whl:

Publisher: python-publish.yml on yelircaasi/adiumentum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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