Metadata-Version: 2.4
Name: philiprehberger-str-case
Version: 0.1.4
Summary: Convert strings between camelCase, snake_case, PascalCase, kebab-case, and more
Project-URL: Homepage, https://github.com/philiprehberger/py-str-case
Project-URL: Repository, https://github.com/philiprehberger/py-str-case
Project-URL: Issues, https://github.com/philiprehberger/py-str-case/issues
Author: Philip Rehberger
License-Expression: MIT
License-File: LICENSE
Keywords: camel,case,convert,kebab,snake,string
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# philiprehberger-str-case

[![Tests](https://github.com/philiprehberger/py-str-case/actions/workflows/publish.yml/badge.svg)](https://github.com/philiprehberger/py-str-case/actions/workflows/publish.yml)
[![PyPI version](https://img.shields.io/pypi/v/philiprehberger-str-case.svg)](https://pypi.org/project/philiprehberger-str-case/)
[![License](https://img.shields.io/github/license/philiprehberger/py-str-case)](LICENSE)

Convert strings between camelCase, snake_case, PascalCase, kebab-case, and more.

## Install

```bash
pip install philiprehberger-str-case
```

## Usage

```python
from philiprehberger_str_case import to_snake, to_camel, to_pascal, to_kebab

to_snake("HTMLParser")       # "html_parser"
to_camel("html_parser")      # "htmlParser"
to_pascal("get-https-url")   # "GetHttpsUrl"
to_kebab("getHTTPSUrl")      # "get-https-url"
```

### Acronym handling

Acronyms are split correctly:

```python
from philiprehberger_str_case import to_snake

to_snake("HTMLParser")    # "html_parser"
to_snake("getHTTPSUrl")  # "get_https_url"
to_snake("XMLToJSON")    # "xml_to_json"
```

### More formats

```python
from philiprehberger_str_case import to_constant, to_title, to_dot, to_path

to_constant("htmlParser")  # "HTML_PARSER"
to_title("html_parser")    # "Html Parser"
to_dot("htmlParser")       # "html.parser"
to_path("htmlParser")      # "html/parser"
```

### Convert dictionary keys

```python
from philiprehberger_str_case import convert_keys, to_snake

data = {
    "firstName": "John",
    "lastName": "Doe",
    "contactInfo": {
        "emailAddress": "john@example.com",
        "phoneNumber": "555-1234",
    },
}

convert_keys(data, to_snake)
# {
#     "first_name": "John",
#     "last_name": "Doe",
#     "contact_info": {
#         "email_address": "john@example.com",
#         "phone_number": "555-1234",
#     },
# }
```

### Detect case

```python
from philiprehberger_str_case import detect_case

detect_case("my_variable")   # "snake_case"
detect_case("myVariable")    # "camelCase"
detect_case("MyVariable")    # "PascalCase"
detect_case("my-variable")   # "kebab-case"
detect_case("MY_VARIABLE")   # "CONSTANT_CASE"
```

## API

| Function | Description |
|----------|-------------|
| `to_snake(s)` | Convert to snake_case |
| `to_camel(s)` | Convert to camelCase |
| `to_pascal(s)` | Convert to PascalCase |
| `to_kebab(s)` | Convert to kebab-case |
| `to_constant(s)` | Convert to CONSTANT_CASE |
| `to_title(s)` | Convert to Title Case |
| `to_dot(s)` | Convert to dot.case |
| `to_path(s)` | Convert to path/case |
| `convert_keys(d, converter)` | Recursively convert dict keys |
| `detect_case(s)` | Detect case convention of a string |


## Development

```bash
pip install -e .
python -m pytest tests/ -v
```

## License

MIT
