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.3.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: caseutil-0.6.3.tar.gz
  • Upload date:
  • Size: 8.0 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.3.tar.gz
Algorithm Hash digest
SHA256 9921b7a063f4db4bdd49c9d7fa9b9c5389d907178956fa720939d8ebcaef8ab5
MD5 e1859d2fa56179e678ac9b0d6359fa28
BLAKE2b-256 59a2025b33adfcf4ed10a0385cbcd2eefad3e0dd346e3ae2c7828eae0751aa91

See more details on using hashes here.

File details

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

File metadata

  • Download URL: caseutil-0.6.3-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.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6f6e92c6eaaa434229f1d83e923e1f8c8298217a0c9e97bc1b0a87065663f108
MD5 0be77af65a0b9c3b7ec7b4d9663f9ac4
BLAKE2b-256 b5b75b9837da9fc34943cadca6994bfda999bb4b1f2913b573208c44bbba1ed0

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