openapi-generators / openapi-generators/openapi-python-client

Odd behaviour of snake_case functions

Open
#614 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

🐞bug
Dominant language
Python
Stars
2k
Forks
293
Avg merge
34m
Merged PRs (30d)
1

Description

Describe the bug
The names of apis are odd, having '_' in irregular and unpredictable places

To Reproduce
The following behavior can be observed using the snake_case function from utils:

utils.snake_case("get_v2_abc")
'get_v2_abc'
utils.snake_case("get_v2_abc_deFgHij")
'get_v_2_abc_de_fg_hij'

These would for example be created for paths: /v2/abc and /v2/abc/deFgHij

The results however inserts an additional underscore between v and 2, so v_2 instead of v2.

Expected behavior
results should be:
get_v2_abc_de_fg_hij

Desktop (please complete the following information):

  • OS: CentOS7
  • Python Version: 3.8
  • openapi-python-client version: github-master from today

Suggestion:
snake_case uses split_words function , which only splits on Aa, so a capital letter followed by a lowercase one, not on underscore. split_words should first split on underscore, then split on capital followed by lowercase. This would solve the issue of mixed snake and camelcase names.

Some additional odd outcomes:

>>> utils.snake_case("MODEL4dd")
'model4_dd'
>>> utils.snake_case("MODEl4dd")
'mod_el_4_dd'

These of course violate camelCase, but in my estimate should all be treated as one word, i.e. multiple consecutive capital letters are treated as a single block. So above model4dd would be the outcome in both cases.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the utils.snake_case and split_words implementations in the Python generator. Reproduce the examples from the issue, then verify that mixed snake_case and camelCase inputs produce the expected words and that the MODEL4dd cases remain one word; add or run the relevant utility tests if present.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.