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.0.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.0-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: adiumentum-0.7.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c1fd9bf0a8e151240c80534817c9e6c38c3713538d7830143ccc9bff5d831781
MD5 4c34254ce8a50089b3f6d78508b21381
BLAKE2b-256 04c2be2d715c16e21dc344b582b0b86f790b12c6d615dd662773ae12c34ba144

See more details on using hashes here.

Provenance

The following attestation bundles were made for adiumentum-0.7.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: adiumentum-0.7.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7202d8af78013c53d62208f93cbb2909c291be4b8a7966ba3b7afa801718370d
MD5 711e9566dc7559b9b7428d10aa282eee
BLAKE2b-256 3a60bff63f08eaf13ce6ee6084eca22e6dd13c5ee1eb2c45453efe1ad40a5c91

See more details on using hashes here.

Provenance

The following attestation bundles were made for adiumentum-0.7.0-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