etsy-python 1.1.13__tar.gz → 1.2.0__tar.gz

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.
Files changed (75) hide show
  1. {etsy_python-1.1.13/etsy_python.egg-info → etsy_python-1.2.0}/PKG-INFO +1 -1
  2. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/_version.py +1 -1
  3. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/ListingInventory.py +0 -4
  4. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Listing.py +86 -17
  5. {etsy_python-1.1.13 → etsy_python-1.2.0/etsy_python.egg-info}/PKG-INFO +1 -1
  6. {etsy_python-1.1.13 → etsy_python-1.2.0}/LICENSE +0 -0
  7. {etsy_python-1.1.13 → etsy_python-1.2.0}/MANIFEST.in +0 -0
  8. {etsy_python-1.1.13 → etsy_python-1.2.0}/README.md +0 -0
  9. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/__init__.py +0 -0
  10. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/__init__.py +0 -0
  11. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/auth/OAuth.py +0 -0
  12. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/auth/__init__.py +0 -0
  13. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/common/Env.py +0 -0
  14. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/common/Request.py +0 -0
  15. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/common/Utils.py +0 -0
  16. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/common/__init__.py +0 -0
  17. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/HolidayPreferences.py +0 -0
  18. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/Language.py +0 -0
  19. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/Listing.py +0 -0
  20. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/ProcessingProfile.py +0 -0
  21. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/ShippingProfile.py +0 -0
  22. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/ShopReceipt.py +0 -0
  23. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/enums/__init__.py +0 -0
  24. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/exceptions/BaseAPIException.py +0 -0
  25. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/exceptions/RequestException.py +0 -0
  26. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/exceptions/__init__.py +0 -0
  27. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/FileRequest.py +0 -0
  28. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/HolidayPreferences.py +0 -0
  29. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Miscellaneous.py +0 -0
  30. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/ProcessingProfile.py +0 -0
  31. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Product.py +0 -0
  32. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Receipt.py +0 -0
  33. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Request.py +0 -0
  34. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/ShippingProfile.py +0 -0
  35. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Shop.py +0 -0
  36. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/ShopReturnPolicy.py +0 -0
  37. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/Utils.py +0 -0
  38. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/models/__init__.py +0 -0
  39. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/HolidayPreferences.py +0 -0
  40. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Listing.py +0 -0
  41. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingFile.py +0 -0
  42. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingImage.py +0 -0
  43. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingInventory.py +0 -0
  44. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingOffering.py +0 -0
  45. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingProduct.py +0 -0
  46. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingTranslation.py +0 -0
  47. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingVariationImages.py +0 -0
  48. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ListingVideo.py +0 -0
  49. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Miscellaneous.py +0 -0
  50. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Payment.py +0 -0
  51. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/PaymentLedgerEntry.py +0 -0
  52. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ProcessingProfile.py +0 -0
  53. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Receipt.py +0 -0
  54. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ReceiptTransactions.py +0 -0
  55. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Response.py +0 -0
  56. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Review.py +0 -0
  57. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Session.py +0 -0
  58. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ShippingProfile.py +0 -0
  59. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Shop.py +0 -0
  60. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ShopProductionPartner.py +0 -0
  61. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ShopReturnPolicy.py +0 -0
  62. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/ShopSection.py +0 -0
  63. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/Taxonomy.py +0 -0
  64. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/User.py +0 -0
  65. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/UserAddress.py +0 -0
  66. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/__init__.py +0 -0
  67. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/enums/RateLimit.py +0 -0
  68. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/enums/Request.py +0 -0
  69. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python/v3/resources/enums/__init__.py +0 -0
  70. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python.egg-info/SOURCES.txt +0 -0
  71. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python.egg-info/dependency_links.txt +0 -0
  72. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python.egg-info/requires.txt +0 -0
  73. {etsy_python-1.1.13 → etsy_python-1.2.0}/etsy_python.egg-info/top_level.txt +0 -0
  74. {etsy_python-1.1.13 → etsy_python-1.2.0}/setup.cfg +0 -0
  75. {etsy_python-1.1.13 → etsy_python-1.2.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etsy-python
3
- Version: 1.1.13
3
+ Version: 1.2.0
4
4
  Summary: Etsy API Client Library for Python
5
5
  Author: Amit Ray
6
6
  Author-email: mail@amitray.dev
@@ -1,3 +1,3 @@
1
1
  """Version information for etsy-python package."""
2
2
 
3
- __version__ = "1.1.13"
3
+ __version__ = "1.2.0"
@@ -1,10 +1,6 @@
1
1
  from enum import Enum
2
2
 
3
3
 
4
- class Includes(Enum):
5
- LISTING = "listing"
6
-
7
-
8
4
  class MaxVariationsSupported(Enum):
9
5
  TWO = "2"
10
6
  THREE = "3"
@@ -17,7 +17,8 @@ from etsy_python.v3.models.FileRequest import FileRequest
17
17
  _PERSONALIZATION_DEPRECATION_MSG = (
18
18
  "is_personalizable, personalization_is_required, "
19
19
  "personalization_char_count_max, and personalization_instructions "
20
- "are deprecated by the Etsy API and scheduled for removal. "
20
+ "were removed from createDraftListing and updateListing by the Etsy API "
21
+ "and are no longer sent. "
21
22
  "Use the personalization endpoint (update_listing_personalization) "
22
23
  "instead. See "
23
24
  "https://developers.etsy.com/documentation/tutorials/personalization-migration "
@@ -30,12 +31,18 @@ def _warn_if_personalization_used(
30
31
  personalization_is_required: Optional[bool],
31
32
  personalization_char_count_max: Optional[int],
32
33
  personalization_instructions: Optional[str],
34
+ stacklevel: int = 4,
33
35
  ) -> None:
34
- """Emit DeprecationWarning when a deprecated personalization field is actively set.
36
+ """Emit DeprecationWarning when a removed personalization field is actively set.
35
37
 
36
38
  Falsy values (False, 0, empty string, None) match the API's documented
37
- defaults and remain no-ops after the fields are removed, so they do not
38
- trigger the warning.
39
+ defaults and were no-ops even before the fields were removed, so they do
40
+ not trigger the warning.
41
+
42
+ ``stacklevel`` counts the frames back to the caller. It defaults to the
43
+ constructor path (this function <- ``_store_personalization`` <- model
44
+ ``__init__`` <- caller); the property setters pass 3, being one frame
45
+ shallower.
39
46
  """
40
47
  if any([
41
48
  is_personalizable,
@@ -46,11 +53,81 @@ def _warn_if_personalization_used(
46
53
  warnings.warn(
47
54
  _PERSONALIZATION_DEPRECATION_MSG,
48
55
  DeprecationWarning,
49
- stacklevel=3,
56
+ stacklevel=stacklevel,
50
57
  )
51
58
 
52
59
 
53
- class CreateDraftListingRequest(Request):
60
+ class _PersonalizationFieldsMixin:
61
+ """Accessors for the personalization fields Etsy removed from listings.
62
+
63
+ Etsy dropped these four fields from the createDraftListing and
64
+ updateListing request bodies (2026-09 spec). The constructor keyword
65
+ arguments are kept so existing callers don't break, but the values are
66
+ stored under underscore-prefixed names, which ``todict`` excludes from
67
+ serialization -- so they are never sent on the wire.
68
+
69
+ The properties below keep both attribute reads and writes working. A write
70
+ stores the value and warns, exactly like passing the keyword argument: it
71
+ never reaches the API either way. Remove the keyword arguments and this
72
+ mixin in the next major version.
73
+ """
74
+
75
+ @property
76
+ def is_personalizable(self) -> Optional[bool]:
77
+ return self._is_personalizable
78
+
79
+ @is_personalizable.setter
80
+ def is_personalizable(self, value: Optional[bool]) -> None:
81
+ self._is_personalizable = value
82
+ _warn_if_personalization_used(value, None, None, None, stacklevel=3)
83
+
84
+ @property
85
+ def personalization_is_required(self) -> Optional[bool]:
86
+ return self._personalization_is_required
87
+
88
+ @personalization_is_required.setter
89
+ def personalization_is_required(self, value: Optional[bool]) -> None:
90
+ self._personalization_is_required = value
91
+ _warn_if_personalization_used(None, value, None, None, stacklevel=3)
92
+
93
+ @property
94
+ def personalization_char_count_max(self) -> Optional[int]:
95
+ return self._personalization_char_count_max
96
+
97
+ @personalization_char_count_max.setter
98
+ def personalization_char_count_max(self, value: Optional[int]) -> None:
99
+ self._personalization_char_count_max = value
100
+ _warn_if_personalization_used(None, None, value, None, stacklevel=3)
101
+
102
+ @property
103
+ def personalization_instructions(self) -> Optional[str]:
104
+ return self._personalization_instructions
105
+
106
+ @personalization_instructions.setter
107
+ def personalization_instructions(self, value: Optional[str]) -> None:
108
+ self._personalization_instructions = value
109
+ _warn_if_personalization_used(None, None, None, value, stacklevel=3)
110
+
111
+ def _store_personalization(
112
+ self,
113
+ is_personalizable: Optional[bool],
114
+ personalization_is_required: Optional[bool],
115
+ personalization_char_count_max: Optional[int],
116
+ personalization_instructions: Optional[str],
117
+ ) -> None:
118
+ self._is_personalizable = is_personalizable
119
+ self._personalization_is_required = personalization_is_required
120
+ self._personalization_char_count_max = personalization_char_count_max
121
+ self._personalization_instructions = personalization_instructions
122
+ _warn_if_personalization_used(
123
+ is_personalizable,
124
+ personalization_is_required,
125
+ personalization_char_count_max,
126
+ personalization_instructions,
127
+ )
128
+
129
+
130
+ class CreateDraftListingRequest(_PersonalizationFieldsMixin, Request):
54
131
  nullable = [
55
132
  "shipping_profile_id",
56
133
  "return_policy_id",
@@ -137,11 +214,7 @@ class CreateDraftListingRequest(Request):
137
214
  self.item_height = item_height
138
215
  self.item_weight_unit = item_weight_unit
139
216
  self.item_dimensions_unit = item_dimensions_unit
140
- self.is_personalizable = is_personalizable
141
- self.personalization_is_required = personalization_is_required
142
- self.personalization_char_count_max = personalization_char_count_max
143
- self.personalization_instructions = personalization_instructions
144
- _warn_if_personalization_used(
217
+ self._store_personalization(
145
218
  is_personalizable,
146
219
  personalization_is_required,
147
220
  personalization_char_count_max,
@@ -161,7 +234,7 @@ class CreateDraftListingRequest(Request):
161
234
  )
162
235
 
163
236
 
164
- class UpdateListingRequest(Request):
237
+ class UpdateListingRequest(_PersonalizationFieldsMixin, Request):
165
238
  nullable: List[str] = [
166
239
  "materials",
167
240
  "shipping_profile_id",
@@ -232,11 +305,7 @@ class UpdateListingRequest(Request):
232
305
  self.who_made = who_made
233
306
  self.when_made = when_made
234
307
  self.featured_rank = featured_rank
235
- self.is_personalizable = is_personalizable
236
- self.personalization_is_required = personalization_is_required
237
- self.personalization_char_count_max = personalization_char_count_max
238
- self.personalization_instructions = personalization_instructions
239
- _warn_if_personalization_used(
308
+ self._store_personalization(
240
309
  is_personalizable,
241
310
  personalization_is_required,
242
311
  personalization_char_count_max,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etsy-python
3
- Version: 1.1.13
3
+ Version: 1.2.0
4
4
  Summary: Etsy API Client Library for Python
5
5
  Author: Amit Ray
6
6
  Author-email: mail@amitray.dev
File without changes
File without changes
File without changes
File without changes
File without changes