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

Tests still failing

  • display
  • io
  • modtime
  • path
  • perf
  • pydantic
  • semver
  • shell
  • string

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.8.0.tar.gz (26.1 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.8.0-py3-none-any.whl (31.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for adiumentum-0.8.0.tar.gz
Algorithm Hash digest
SHA256 c85c3a2486124bb2eb9475f63a505e308b7394d8b429c17d3ac6f5bcd6dcf4e0
MD5 d04147dd30cce0978313e61f40785c32
BLAKE2b-256 54a142e9a5f12d35f4e94716a1e9e64902793098f3605285a9e8eaeaa1fed377

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: adiumentum-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 31.9 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.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5c16afd96f00c147455e8ab5d5ac98a93f1d6e57c3ca7f917e42781da9b5e88c
MD5 b1a16d9d0912a55785c7c979917e190c
BLAKE2b-256 10017902d8126427b49345cd9cc6973927f2220f6ad8bcc88be14eb0a12a021c

See more details on using hashes here.

Provenance

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