Skip to content

Commit fda51ff

Browse files
iscai-msftiscai-msftmsyyc
authored
[python] don't overwrite version.py file if existing version is higher (microsoft#5559)
fixes microsoft#5528, microsoft#5529 --------- Co-authored-by: iscai-msft <[email protected]> Co-authored-by: Yuchao Yan <[email protected]>
1 parent 8774715 commit fda51ff

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

packages/http-client-python/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log - @typespec/http-client-python
22

3+
## 0.6.2
4+
5+
### Bug Fixes
6+
7+
- Don't automatically overwrite version in `_version.py` file and `setup.py` file if the existing version is newer
8+
39
## 0.6.1
410

511
### Bug Fixes

packages/http-client-python/generator/pygen/codegen/serializers/__init__.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# --------------------------------------------------------------------------
66
import logging
77
from collections import namedtuple
8+
import re
89
from typing import List, Any, Union
910
from pathlib import Path
1011
from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
@@ -94,6 +95,19 @@ def serialize_loop(self) -> List[AsyncInfo]:
9495
async_loop = AsyncInfo(async_mode=True, async_path="aio/")
9596
return [sync_loop, async_loop] if self.has_aio_folder else [sync_loop]
9697

98+
@property
99+
def keep_version_file(self) -> bool:
100+
if self.options.get("keep_version_file"):
101+
return True
102+
# If the version file is already there and the version is greater than the current version, keep it.
103+
try:
104+
serialized_version_file = self.read_file(self.exec_path(self.code_model.namespace) / "_version.py")
105+
match = re.search(r'VERSION\s*=\s*"([^"]+)"', str(serialized_version_file))
106+
serialized_version = match.group(1) if match else ""
107+
except (FileNotFoundError, IndexError):
108+
serialized_version = ""
109+
return serialized_version > self.code_model.options["package_version"]
110+
97111
def serialize(self) -> None:
98112
env = Environment(
99113
loader=PackageLoader("pygen.codegen", "templates"),
@@ -193,6 +207,9 @@ def _serialize_and_write_package_files(self, client_namespace: str) -> None:
193207
file = template_name.replace(".jinja2", "")
194208
output_name = root_of_sdk / file
195209
if not self.read_file(output_name) or file in _REGENERATE_FILES:
210+
if self.keep_version_file and file == "setup.py":
211+
# don't regenerate setup.py file if the version file is more up to date
212+
continue
196213
self.write_file(
197214
output_name,
198215
serializer.serialize_package_file(template_name, **params),
@@ -329,10 +346,9 @@ def _write_version_file(original_version_file_name: str) -> None:
329346
_read_version_file(original_version_file_name),
330347
)
331348

332-
keep_version_file = self.code_model.options["keep_version_file"]
333-
if keep_version_file and _read_version_file("_version.py"):
349+
if self.keep_version_file and _read_version_file("_version.py"):
334350
_write_version_file(original_version_file_name="_version.py")
335-
elif keep_version_file and _read_version_file("version.py"):
351+
elif self.keep_version_file and _read_version_file("version.py"):
336352
_write_version_file(original_version_file_name="version.py")
337353
elif self.code_model.options["package_version"]:
338354
self.write_file(

packages/http-client-python/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/http-client-python/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@typespec/http-client-python",
3-
"version": "0.6.1",
3+
"version": "0.6.2",
44
"author": "Microsoft Corporation",
55
"description": "TypeSpec emitter for Python SDKs",
66
"homepage": "https://typespec.io",

0 commit comments

Comments
 (0)