Skip to main content

Case convert and verify for Python: snake_case, camelCase, kebab-case, and more.

Project description

caseutil ⇄ 🐍🐫🍢

Case convert and verify for Python: snake_case, camelCase, kebab-case, etc.

license Tests Coverage OpenSSF Best Practices
pypi versions

Features

  • Verify and convert between most popular cases
  • Custom separators: 'my.variable.name', 'my/variable/name'
  • Command line mode: caseutil
  • Pure Python 2.7 to 3.13+
  • No dependencies
  • 100% test coverage

Supported cases

Case Example Functions
snake_case my_variable_name is_snake, to_snake
CONST_CASE MY_VARIABLE_NAME is_const, to_const
camelCase myVariableName is_camel, to_camel
PascalCase MyVariableName is_pascal, to_pascal
kebab-case my-variable-name is_kebab, to_kebab
lower space my variable name is_lower, to_lower
UPPER SPACE MY VARIABLE NAME is_upper, to_upper
Title Space My Variable Name is_title, to_title

Getting Started

Installing

$ pip install caseutil

Use as a library

>>> from caseutil import *

Verify case format:

>>> is_snake('My variable-name')
False

Convert to case:

>>> to_snake('My variable-name')
'my_variable_name'

Use as a CLI command

Note the support of multiple values in argument or stdin:

$ caseutil -c const "hi there"
HI_THERE

$ echo "hi_there\nsee you" | python -m caseutil -c camel
hiThere
seeYou

Advanced

Universal functions

Use functions is_case() and to_case() to deal with arbitrary case:

>>> is_case('camel', 'myVariableName')
True
>>> to_case(Case.CONST, 'myVariableName')
'MY_VARIABLE_NAME'

Case enum

All supported cases are gathered in Case enum:

class Case(StrEnum):
    CAMEL = 'camel'
    CONST = 'const'
    KEBAB = 'kebab'
    LOWER = 'lower'
    PASCAL = 'pascal'
    SNAKE = 'snake'
    TITLE = 'title'
    UPPER = 'upper'

Tokenization

Word separators are non-word characters including underscore, and places where text case is changed from lower to upper. Digits are not treated as separators. For more details, see this example and unit tests.

>>> words('!some_reallyMESsy text--wit4Digits.3VeryWh3re--')
['some', 'really', 'ME', 'Ssy', 'text', 'wit4', 'Digits', '3Very', 'Wh3re']

Custom Separators

For custom separators, use words() function:

>>> '/'.join(words(to_lower('myVariableName')))
'my/variable/name'
>>> '.'.join(words('myVariableName'))
'my.Variable.Name'

Unicode support

Only ASCII names are supported. Unicode support is planned.

Developing

Development environment

OS X

This project requires Homebrew. Other tools like PDM, Tox, and even Alacritty, will be installed automatically.

git clone https://github.com/makukha/caseutil.git
cd caseutil
brew bundle
task init install

Testing

task test

Contributing

See Contributing guidelines.

Roadmap

  • Add more test, explore edge cases
  • Add Unicode support (write tests)
  • Add more cases

Authors

  • Mchael Makukha — initial author.

License

This project is licensed under the terms of the MIT license.

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

caseutil-0.6.4.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

caseutil-0.6.4-py2.py3-none-any.whl (5.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file caseutil-0.6.4.tar.gz.

File metadata

  • Download URL: caseutil-0.6.4.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.17.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for caseutil-0.6.4.tar.gz
Algorithm Hash digest
SHA256 4d621fb83571851acbb92e09f623fdab50a4d1ccfedba3cda8bfac251a45b4e6
MD5 40d52e9206a4a613db1c08d4e8face39
BLAKE2b-256 4dc3bd32177910a8eda5114bf6b1b9035260d5fa8b36e7b7d795830f48e4ccd2

See more details on using hashes here.

File details

Details for the file caseutil-0.6.4-py2.py3-none-any.whl.

File metadata

  • Download URL: caseutil-0.6.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.17.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for caseutil-0.6.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 757eed033c0d75cb25d743371b142f16ff3ad84bfda6c5d7b5f580b9ae3e5556
MD5 efc70603af2e844ffaf0c491661858e3
BLAKE2b-256 c0b13dad0a1d32b3c13abe0c20125b3236e90592f61b4b289deeab205d4c4572

See more details on using hashes here.

Supported by

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