caseutil ⇄ 🐍🐫🍢
Case conversion and verification for Python: snake_case, camelCase, kebab-case, etc.
Features
- Verify and convert between most popular cases
- Custom separators:
'foo.bar.baz','foo/bar/baz' - Case detection
- Command line utility
caseutil - Pure Python 2.7 to 3.14+
- No dependencies
- 100% test coverage
Supported cases
Classification
| Case | Verify | Convert |
|---|---|---|
| snake_case | is_snake |
to_snake |
| Ada_Case | is_ada |
to_ada |
| CONST_CASE | is_const |
to_const |
| camelCase | is_camel |
to_camel |
| PascalCase | is_pascal |
to_pascal |
| kebab-case | is_kebab |
to_kebab |
| Train-Case | is_train |
to_train |
| COBOL-CASE | is_cobol |
to_cobol |
| lower case | is_lower |
to_lower |
| UPPER CASE | is_upper |
to_upper |
| Title Case | is_title |
to_title |
| Sentence case | is_sentence |
to_sentence |
Installation
$ pip install caseutil
Use cases
- Basic usage
- Cases enum
- Arbitrary cases
- Detect cases
- Custom separators
- Tokenization
- Unicode support (not implemented)
Basic usage
>>> from caseutil import is_snake, to_snake
>>> is_snake('Foo bar-baz')
False
>>> to_snake('Foo bar-baz')
'foo_bar_baz'
Cases enum
All supported cases are gathered in Case enum:
class Case(StrEnum):
ADA = 'ada'
CAMEL = 'camel'
COBOL = 'cobol'
CONST = 'const'
KEBAB = 'kebab'
LOWER = 'lower'
PASCAL = 'pascal'
SENTENCE = 'sentence'
SNAKE = 'snake'
TITLE = 'title'
TRAIN = 'train'
UPPER = 'upper'
Arbitrary cases
Use functions is_case() and to_case() to deal with arbitrary supported case:
>>> from caseutil import Case, is_case, to_case
>>> is_case(Case.CAMEL, 'myVarName')
True
>>> to_case(Case.CONST, 'myVarName')
'MY_VAR_NAME'
Detect cases
Use function get_cases() to determine case (or cases, if
ambiguous):
>>> from caseutil import get_cases
>>> get_cases('fooBar')
('camel',)
>>> get_cases('My var-name') # mixed case
()
>>> get_cases('Title') # matches multiple cases
('ada', 'pascal', 'sentence', 'title', 'train')
Custom separators
Use function words():
>>> from caseutil import words, to_lower
>>> '/'.join(words(to_lower('myVarName')))
'my/var/name'
>>> '.'.join(words('myVarName'))
'my.Var.Name'
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 Tokenization rules.
>>> from caseutil import words
>>> words('!some_reallyMESsy text--wit4Digits.3VeryWh3re--')
['some', 'really', 'ME', 'Ssy', 'text', 'wit4', 'Digits', '3Very', 'Wh3re']
Unicode support (not implemented)
Only ASCII names are supported. Unicode support is planned.
Command line
$ caseutil -c const "hi there"
HI_THERE
Invoke as Python module:
$ python -m caseutil -c const "hi there"
HI_THERE
When reading from stdin, each line is processed separately:
$ echo "hi_there\nsee you" | python -m caseutil -c camel
hiThere
seeYou
CLI Reference
$ caseutil --help
usage: caseutil [-h] (--version | -c <case> | -d) [text]
Convert, detect, or match text case.
When stdin is used as input, each line is tokenized and processed separately.
cases:
ada,camel,cobol,const,kebab,lower,pascal,sentence,snake,title,train,upper
positional arguments:
text text to be converted; if missing, stdin is used
options:
-h, --help show this help message and exit
--version show program's version number and exit
-c, --convert <case> convert [text] or stdin to <case>
-d, --detect detect cases in [text] or stdin
Alternatives
Contributing
See Contributing guidelines.
Authors
See also
Metadata
Release files for caseutil 0.7.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| caseutil-0.7.2.tar.gz | 122.5 kB | Without provenance | Details for caseutil-0.7.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| caseutil-0.7.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details for caseutil-0.7.2-py2.py3-none-any.whl |
Total release size: 131.4 kB
Release files / caseutil-0.7.2.tar.gz
| Download URL | caseutil-0.7.2.tar.gz |
|---|---|
| Size | 122.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
36e5283590e67e33749d6c1ddb913dcfabb870749215776f7b411f9eb8e361e6
|
|
BLAKE2b-256 checksum How to use checksums |
5dde8cdaf896811af1f1d64833e511baa9dec13b4ca24cf4c34f1b45daeee82a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.13
|
Release files / caseutil-0.7.2-py2.py3-none-any.whl
| Download URL | caseutil-0.7.2-py2.py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
11c06c3379e381d0c3633e910be5463e28fa983c42cd086382da5f73ea587a91
|
|
BLAKE2b-256 checksum How to use checksums |
1ca820761d6a13a6a6f290c5ed53d8b633e20167477dff0851844ce00553cfda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.13
|
Security for caseutil 0.7.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.