Skip to main content

Convert between different types of cases (unicode supported)

Project description

Case Conversion

This is a port of the Sublime Text 3 plugin CaseConversion, by Davis Clark, to a regular python package. I couldn't find any other python packages on PyPI at the time (Feb 2016) that could seamlessly convert from any case to any other case without having to specify from what type of case I was converting. This plugin worked really well, so I separated the (non-sublime) python parts of the plugin into this useful python package. I also added Unicode support via python's unicodedata and extended the interface some.

Features

  • Auto-detection of case (no need to specify explicitly which case you are converting from!)
  • Acronym detection (no funky splitting on every capital letter of an all caps acronym like HTTPError!)
  • Unicode supported (non-ASCII characters are first class citizens!)
  • Dependency free!
  • Supports Python 3.10+
  • Every case conversion from/to you ever gonna need:
    • camel -> "camelCase"
    • pascal / mixed -> "PascalCase" / "MixedCase"
    • snake -> "snake_case"
    • snake / kebab / spinal / slug -> "dash-case" / "kebab-case" / "spinal-case" / "slug-case"
    • const / screaming_snake -> "CONST_CASE" / "SCREAMING_SNAKE_CASE"
    • dot -> "dot.case"
    • separate_words -> "separate words"
    • slash -> "slash/case"
    • backslash -> "backslash\case"
    • ada -> "Ada_Case"
    • http_header -> "Http-Header-Case"

Usage

Converter Class

Basic

>>> from case_conversion import Converter
>>> converter = Converter()
>>> converter.camel("FOO_BAR_STRING")
'fooBarString'

Initialize text when needing to convert the same text to multiple different cases.

>>> from case_conversion import Converter
>>> converter = Converter(text="FOO_BAR_STRING")
>>> converter.camel()
'fooBarString'
>>> converter.pascal()
'FooBarString'

Initialize custom acronyms

>>> from case_conversion import Converter
>>> converter = Converter(acronyms=["BAR"])
>>> converter.camel("FOO_BAR_STRING")
'fooBARString'

Convenience Functions

For backwards compatibility and convenience, all converters are available as top level functions. They are all shorthand for:

Converter(text, acronyms).converter_function()

>>> import case_conversion
>>> case_conversion.dash("FOO_BAR_STRING")
'foo-bar-string'

Simple acronym detection comes included, by treating strings of capital letters as a single word instead of several single letter words.

Custom acronyms can be supplied when needing to separate them from each other.

>>> import case_conversion
>>> case_conversion.snake("fooBADHTTPError")
'foo_badhttp_error'  # we wanted BAD and HTTP to be separate!
>>> case_conversion.snake("fooBarHTTPError", acronyms=['BAD', 'HTTP'])
'foo_bad_http_error'  # custom acronyms achieved!

Unicode is fully supported - even for acronyms.

>>> import case_conversion
>>> case_conversion.const(u"fóó-bar-string")
FÓÓ_BAR_STRING
>>> case_conversion.snake("fooBarHÓÓPError", acronyms=['HÓÓP'])
'foo_bar_hóóp_error'

Install

pip install case-conversion

Contribute

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

This package is being developed with uv (-> docs).

CI will run tests and lint checks. Locally you can run them with:

# runs tests with coverage
make test
# Runs linter (using ruff)
make lint
# Auto-fix linter errors (using ruff --fix)
make format
# run type check (using ty)
make tc

Credits

Credit goes to Davis Clark's as the author of the original plugin and its contributors (Scott Bessler, Curtis Gibby, Matt Morrison). Thanks for their awesome work on making such a robust and awesome case converter.

Further thanks and credit to @olsonpm for making this package dependency-free and encouraging package maintenance and best practices.

License

Using MIT license with Davis Clark's Copyright

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

case_conversion-3.0.0.tar.gz (33.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

case_conversion-3.0.0-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file case_conversion-3.0.0.tar.gz.

File metadata

  • Download URL: case_conversion-3.0.0.tar.gz
  • Upload date:
  • Size: 33.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for case_conversion-3.0.0.tar.gz
Algorithm Hash digest
SHA256 85e7e16de5ff03b22e987f9d2e3a347cc77d4df823d887b0f03c607f11fcd80e
MD5 0cce533147961b8443eb080ced3dfc54
BLAKE2b-256 89e5c36a9645a3617d41bdf90e12c7a027d01c88a21e0aa429e9c04ba44c29db

See more details on using hashes here.

File details

Details for the file case_conversion-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for case_conversion-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2902117bee963d682c581e6a98a04b99e439b580a7ba78f6b37d8e5ee4070bf
MD5 7822e28c2febce1ef937fbbcd0069707
BLAKE2b-256 a1b53c6524e0ee3b4c03f9005071b29c0ea4c7306735fe4db1f640116336ac1e

See more details on using hashes here.

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