Skip to content

Commit 38c8f1d

Browse files
committed
Add protected_dirs config
1 parent 82a9ad6 commit 38c8f1d

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,15 @@ post_hooks:
157157
- "black ."
158158
```
159159

160+
### protected_dirs
161+
162+
Specify directories to preserve when updating the client.
163+
164+
```yaml
165+
protected_dirs:
166+
- "util"
167+
- "cli"
168+
```
169+
160170
[changelog.md]: CHANGELOG.md
161171
[poetry]: https://python-poetry.org/

openapi_python_client/__init__.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import json
44
import mimetypes
5+
import os
56
import shutil
67
import subprocess
78
import sys
@@ -127,7 +128,21 @@ def update(self) -> Sequence[GeneratorError]:
127128
if not self.package_dir.is_dir():
128129
return [GeneratorError(detail=f"Directory {self.package_dir} not found")]
129130
print(f"Updating {self.package_name}")
130-
shutil.rmtree(self.package_dir)
131+
132+
if not self.config.protected_dirs:
133+
shutil.rmtree(self.package_dir)
134+
else:
135+
files_and_dirs: List[str] = os.listdir(self.package_dir)
136+
for protected_dir in self.config.protected_dirs:
137+
files_and_dirs.remove(protected_dir)
138+
139+
for file_or_dir in files_and_dirs:
140+
path = os.path.join(self.package_dir, file_or_dir)
141+
if os.path.isfile(path):
142+
os.remove(path)
143+
if os.path.isdir(path):
144+
shutil.rmtree(path)
145+
131146
self._create_package()
132147
self._build_models()
133148
self._build_api()
@@ -170,7 +185,7 @@ def _get_errors(self) -> List[GeneratorError]:
170185
return errors
171186

172187
def _create_package(self) -> None:
173-
self.package_dir.mkdir()
188+
self.package_dir.mkdir(exist_ok=True)
174189
# Package __init__.py
175190
package_init = self.package_dir / "__init__.py"
176191

openapi_python_client/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class Config(BaseModel):
2727
project_name_override: Optional[str]
2828
package_name_override: Optional[str]
2929
package_version_override: Optional[str]
30+
protected_dirs: Optional[List[str]]
3031
post_hooks: List[str] = [
3132
"autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports .",
3233
"isort .",

0 commit comments

Comments
 (0)