@typespec/http-client-python 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -60,7 +60,7 @@ class BlackScriptPlugin(Plugin):
60
60
  except:
61
61
  _LOGGER.error("Error: failed to format %s", file)
62
62
  raise
63
- if len(file_content.splitlines()) > 1000:
63
+ if len(file_content.splitlines()) > 1000 and "pylint: disable=too-many-lines" not in file_content:
64
64
  file_content = "# pylint: disable=too-many-lines\n" + file_content
65
65
  self.write_file(file, file_content)
66
66
 
@@ -5,6 +5,7 @@
5
5
  # --------------------------------------------------------------------------
6
6
  import logging
7
7
  from collections import namedtuple
8
+ import re
8
9
  from typing import List, Any, Union
9
10
  from pathlib import Path
10
11
  from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
@@ -94,6 +95,19 @@ class JinjaSerializer(ReaderAndWriter):
94
95
  async_loop = AsyncInfo(async_mode=True, async_path="aio/")
95
96
  return [sync_loop, async_loop] if self.has_aio_folder else [sync_loop]
96
97
 
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
+
97
111
  def serialize(self) -> None:
98
112
  env = Environment(
99
113
  loader=PackageLoader("pygen.codegen", "templates"),
@@ -193,6 +207,9 @@ class JinjaSerializer(ReaderAndWriter):
193
207
  file = template_name.replace(".jinja2", "")
194
208
  output_name = root_of_sdk / file
195
209
  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
196
213
  self.write_file(
197
214
  output_name,
198
215
  serializer.serialize_package_file(template_name, **params),
@@ -329,10 +346,9 @@ class JinjaSerializer(ReaderAndWriter):
329
346
  _read_version_file(original_version_file_name),
330
347
  )
331
348
 
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"):
334
350
  _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"):
336
352
  _write_version_file(original_version_file_name="version.py")
337
353
  elif self.code_model.options["package_version"]:
338
354
  self.write_file(
@@ -184,73 +184,7 @@ try:
184
184
  except NameError:
185
185
  _long_type = int
186
186
 
187
-
188
- class UTC(datetime.tzinfo):
189
- """Time Zone info for handling UTC"""
190
-
191
- def utcoffset(self, dt):
192
- """UTF offset for UTC is 0.
193
-
194
- :param datetime.datetime dt: The datetime
195
- :returns: The offset
196
- :rtype: datetime.timedelta
197
- """
198
- return datetime.timedelta(0)
199
-
200
- def tzname(self, dt):
201
- """Timestamp representation.
202
-
203
- :param datetime.datetime dt: The datetime
204
- :returns: The timestamp representation
205
- :rtype: str
206
- """
207
- return "Z"
208
-
209
- def dst(self, dt):
210
- """No daylight saving for UTC.
211
-
212
- :param datetime.datetime dt: The datetime
213
- :returns: The daylight saving time
214
- :rtype: datetime.timedelta
215
- """
216
- return datetime.timedelta(hours=1)
217
-
218
-
219
- try:
220
- from datetime import timezone as _FixedOffset # type: ignore
221
- except ImportError: # Python 2.7
222
-
223
- class _FixedOffset(datetime.tzinfo): # type: ignore
224
- """Fixed offset in minutes east from UTC.
225
- Copy/pasted from Python doc
226
- :param datetime.timedelta offset: offset in timedelta format
227
- """
228
-
229
- def __init__(self, offset) -> None:
230
- self.__offset = offset
231
-
232
- def utcoffset(self, dt):
233
- return self.__offset
234
-
235
- def tzname(self, dt):
236
- return str(self.__offset.total_seconds() / 3600)
237
-
238
- def __repr__(self):
239
- return "<FixedOffset {}>".format(self.tzname(None))
240
-
241
- def dst(self, dt):
242
- return datetime.timedelta(0)
243
-
244
- def __getinitargs__(self):
245
- return (self.__offset,)
246
-
247
-
248
- try:
249
- from datetime import timezone
250
-
251
- TZ_UTC = timezone.utc
252
- except ImportError:
253
- TZ_UTC = UTC() # type: ignore
187
+ TZ_UTC = datetime.timezone.utc
254
188
 
255
189
  _FLATTEN = re.compile(r"(?<!\\)\.")
256
190
 
@@ -2050,7 +1984,7 @@ class Deserializer:
2050
1984
  try:
2051
1985
  parsed_date = email.utils.parsedate_tz(attr) # type: ignore
2052
1986
  date_obj = datetime.datetime(
2053
- *parsed_date[:6], tzinfo=_FixedOffset(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
1987
+ *parsed_date[:6], tzinfo=datetime.timezone(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
2054
1988
  )
2055
1989
  if not date_obj.tzinfo:
2056
1990
  date_obj = date_obj.astimezone(tz=TZ_UTC)
@@ -60,7 +60,7 @@ class BlackScriptPlugin(Plugin):
60
60
  except:
61
61
  _LOGGER.error("Error: failed to format %s", file)
62
62
  raise
63
- if len(file_content.splitlines()) > 1000:
63
+ if len(file_content.splitlines()) > 1000 and "pylint: disable=too-many-lines" not in file_content:
64
64
  file_content = "# pylint: disable=too-many-lines\n" + file_content
65
65
  self.write_file(file, file_content)
66
66
 
@@ -5,6 +5,7 @@
5
5
  # --------------------------------------------------------------------------
6
6
  import logging
7
7
  from collections import namedtuple
8
+ import re
8
9
  from typing import List, Any, Union
9
10
  from pathlib import Path
10
11
  from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined
@@ -94,6 +95,19 @@ class JinjaSerializer(ReaderAndWriter):
94
95
  async_loop = AsyncInfo(async_mode=True, async_path="aio/")
95
96
  return [sync_loop, async_loop] if self.has_aio_folder else [sync_loop]
96
97
 
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
+
97
111
  def serialize(self) -> None:
98
112
  env = Environment(
99
113
  loader=PackageLoader("pygen.codegen", "templates"),
@@ -193,6 +207,9 @@ class JinjaSerializer(ReaderAndWriter):
193
207
  file = template_name.replace(".jinja2", "")
194
208
  output_name = root_of_sdk / file
195
209
  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
196
213
  self.write_file(
197
214
  output_name,
198
215
  serializer.serialize_package_file(template_name, **params),
@@ -329,10 +346,9 @@ class JinjaSerializer(ReaderAndWriter):
329
346
  _read_version_file(original_version_file_name),
330
347
  )
331
348
 
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"):
334
350
  _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"):
336
352
  _write_version_file(original_version_file_name="version.py")
337
353
  elif self.code_model.options["package_version"]:
338
354
  self.write_file(
@@ -184,73 +184,7 @@ try:
184
184
  except NameError:
185
185
  _long_type = int
186
186
 
187
-
188
- class UTC(datetime.tzinfo):
189
- """Time Zone info for handling UTC"""
190
-
191
- def utcoffset(self, dt):
192
- """UTF offset for UTC is 0.
193
-
194
- :param datetime.datetime dt: The datetime
195
- :returns: The offset
196
- :rtype: datetime.timedelta
197
- """
198
- return datetime.timedelta(0)
199
-
200
- def tzname(self, dt):
201
- """Timestamp representation.
202
-
203
- :param datetime.datetime dt: The datetime
204
- :returns: The timestamp representation
205
- :rtype: str
206
- """
207
- return "Z"
208
-
209
- def dst(self, dt):
210
- """No daylight saving for UTC.
211
-
212
- :param datetime.datetime dt: The datetime
213
- :returns: The daylight saving time
214
- :rtype: datetime.timedelta
215
- """
216
- return datetime.timedelta(hours=1)
217
-
218
-
219
- try:
220
- from datetime import timezone as _FixedOffset # type: ignore
221
- except ImportError: # Python 2.7
222
-
223
- class _FixedOffset(datetime.tzinfo): # type: ignore
224
- """Fixed offset in minutes east from UTC.
225
- Copy/pasted from Python doc
226
- :param datetime.timedelta offset: offset in timedelta format
227
- """
228
-
229
- def __init__(self, offset) -> None:
230
- self.__offset = offset
231
-
232
- def utcoffset(self, dt):
233
- return self.__offset
234
-
235
- def tzname(self, dt):
236
- return str(self.__offset.total_seconds() / 3600)
237
-
238
- def __repr__(self):
239
- return "<FixedOffset {}>".format(self.tzname(None))
240
-
241
- def dst(self, dt):
242
- return datetime.timedelta(0)
243
-
244
- def __getinitargs__(self):
245
- return (self.__offset,)
246
-
247
-
248
- try:
249
- from datetime import timezone
250
-
251
- TZ_UTC = timezone.utc
252
- except ImportError:
253
- TZ_UTC = UTC() # type: ignore
187
+ TZ_UTC = datetime.timezone.utc
254
188
 
255
189
  _FLATTEN = re.compile(r"(?<!\\)\.")
256
190
 
@@ -2050,7 +1984,7 @@ class Deserializer:
2050
1984
  try:
2051
1985
  parsed_date = email.utils.parsedate_tz(attr) # type: ignore
2052
1986
  date_obj = datetime.datetime(
2053
- *parsed_date[:6], tzinfo=_FixedOffset(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
1987
+ *parsed_date[:6], tzinfo=datetime.timezone(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
2054
1988
  )
2055
1989
  if not date_obj.tzinfo:
2056
1990
  date_obj = date_obj.astimezone(tz=TZ_UTC)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",