etsy-python 1.1.9__tar.gz → 1.1.11__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.9/etsy_python.egg-info → etsy_python-1.1.11}/PKG-INFO +1 -1
  2. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/_version.py +1 -1
  3. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/common/Utils.py +23 -0
  4. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/Listing.py +4 -0
  5. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Listing.py +33 -8
  6. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingInventory.py +5 -2
  7. {etsy_python-1.1.9 → etsy_python-1.1.11/etsy_python.egg-info}/PKG-INFO +1 -1
  8. {etsy_python-1.1.9 → etsy_python-1.1.11}/LICENSE +0 -0
  9. {etsy_python-1.1.9 → etsy_python-1.1.11}/MANIFEST.in +0 -0
  10. {etsy_python-1.1.9 → etsy_python-1.1.11}/README.md +0 -0
  11. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/__init__.py +0 -0
  12. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/__init__.py +0 -0
  13. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/auth/OAuth.py +0 -0
  14. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/auth/__init__.py +0 -0
  15. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/common/Env.py +0 -0
  16. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/common/Request.py +0 -0
  17. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/common/__init__.py +0 -0
  18. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/HolidayPreferences.py +0 -0
  19. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/Language.py +0 -0
  20. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/ListingInventory.py +0 -0
  21. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/ProcessingProfile.py +0 -0
  22. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/ShippingProfile.py +0 -0
  23. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/ShopReceipt.py +0 -0
  24. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/enums/__init__.py +0 -0
  25. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/exceptions/BaseAPIException.py +0 -0
  26. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/exceptions/RequestException.py +0 -0
  27. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/exceptions/__init__.py +0 -0
  28. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/FileRequest.py +0 -0
  29. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/HolidayPreferences.py +0 -0
  30. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Listing.py +0 -0
  31. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Miscellaneous.py +0 -0
  32. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/ProcessingProfile.py +0 -0
  33. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Product.py +0 -0
  34. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Receipt.py +0 -0
  35. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Request.py +0 -0
  36. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/ShippingProfile.py +0 -0
  37. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Shop.py +0 -0
  38. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/ShopReturnPolicy.py +0 -0
  39. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/Utils.py +0 -0
  40. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/models/__init__.py +0 -0
  41. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/HolidayPreferences.py +0 -0
  42. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingFile.py +0 -0
  43. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingImage.py +0 -0
  44. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingOffering.py +0 -0
  45. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingProduct.py +0 -0
  46. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingTranslation.py +0 -0
  47. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingVariationImages.py +0 -0
  48. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ListingVideo.py +0 -0
  49. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Miscellaneous.py +0 -0
  50. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Payment.py +0 -0
  51. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/PaymentLedgerEntry.py +0 -0
  52. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ProcessingProfile.py +0 -0
  53. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Receipt.py +0 -0
  54. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ReceiptTransactions.py +0 -0
  55. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Response.py +0 -0
  56. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Review.py +0 -0
  57. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Session.py +0 -0
  58. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ShippingProfile.py +0 -0
  59. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Shop.py +0 -0
  60. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ShopProductionPartner.py +0 -0
  61. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ShopReturnPolicy.py +0 -0
  62. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/ShopSection.py +0 -0
  63. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/Taxonomy.py +0 -0
  64. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/User.py +0 -0
  65. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/UserAddress.py +0 -0
  66. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/__init__.py +0 -0
  67. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/enums/RateLimit.py +0 -0
  68. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/enums/Request.py +0 -0
  69. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python/v3/resources/enums/__init__.py +0 -0
  70. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python.egg-info/SOURCES.txt +0 -0
  71. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python.egg-info/dependency_links.txt +0 -0
  72. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python.egg-info/requires.txt +0 -0
  73. {etsy_python-1.1.9 → etsy_python-1.1.11}/etsy_python.egg-info/top_level.txt +0 -0
  74. {etsy_python-1.1.9 → etsy_python-1.1.11}/setup.cfg +0 -0
  75. {etsy_python-1.1.9 → etsy_python-1.1.11}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etsy-python
3
- Version: 1.1.9
3
+ Version: 1.1.11
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.9"
3
+ __version__ = "1.1.11"
@@ -1,7 +1,30 @@
1
+ import warnings
1
2
  from enum import Enum
2
3
  from typing import Any, Dict, List, Optional
3
4
 
4
5
 
6
+ def warn_removed_legacy_param(operation_id: str) -> None:
7
+ """Warn that `legacy` was removed from an operation and is no longer sent.
8
+
9
+ Etsy dropped the `legacy` query parameter from the listing endpoints without
10
+ a deprecation period. The keyword argument is kept so existing callers don't
11
+ break, but the value is not forwarded. Note `legacy` is still valid on other
12
+ operations (receipts, transactions, getListingsByListingIds), which keep it.
13
+
14
+ Called whenever ``legacy`` is passed explicitly — including ``legacy=False``.
15
+ That is deliberate: ``legacy=False`` previously sent ``?legacy=false`` on the
16
+ wire, so silently dropping it is a request-shape change the caller should
17
+ know about, not just a no-op.
18
+ """
19
+ warnings.warn(
20
+ f"'legacy' was removed from {operation_id} by Etsy and is no longer "
21
+ "sent (any explicit value, including False, is discarded); it will be "
22
+ "dropped from this method in a future major version.",
23
+ DeprecationWarning,
24
+ stacklevel=3,
25
+ )
26
+
27
+
5
28
  def generate_get_uri(uri: str, params: Optional[Dict[str, Any]] = None) -> str:
6
29
  if not params:
7
30
  return uri
@@ -85,6 +85,10 @@ class SortOrder(Enum):
85
85
 
86
86
 
87
87
  class Includes(Enum):
88
+ # SHIPPING and INVENTORY were removed from the includes enum on getListing
89
+ # and getListingsByListingIds, but remain valid on getListingsByShop, which
90
+ # shares this enum. They are kept for backward compatibility; removing them
91
+ # would break callers. May be revisited in the next major version.
88
92
  SHIPPING = "Shipping"
89
93
  IMAGES = "Images"
90
94
  SHOP = "Shop"
@@ -2,6 +2,7 @@ import warnings
2
2
  from dataclasses import dataclass
3
3
  from typing import Optional, List, Dict, Any, Union
4
4
 
5
+ from etsy_python.v3.common.Utils import warn_removed_legacy_param
5
6
  from etsy_python.v3.enums.Listing import Includes, State, SortOn, SortOrder
6
7
  from etsy_python.v3.exceptions.RequestException import RequestException
7
8
  from etsy_python.v3.models.Listing import (
@@ -25,10 +26,11 @@ class ListingResource:
25
26
  listing: CreateDraftListingRequest,
26
27
  legacy: Optional[bool] = None,
27
28
  ) -> Union[Response, RequestException]:
29
+ if legacy is not None:
30
+ warn_removed_legacy_param("createDraftListing")
28
31
  endpoint = f"/shops/{shop_id}/listings"
29
32
  return self.session.make_request(
30
- endpoint, method=Method.POST, payload=listing,
31
- query_params={"legacy": legacy},
33
+ endpoint, method=Method.POST, payload=listing
32
34
  )
33
35
 
34
36
  def get_listings_by_shop(
@@ -42,6 +44,8 @@ class ListingResource:
42
44
  includes: Optional[List[Includes]] = None,
43
45
  legacy: Optional[bool] = None,
44
46
  ) -> Union[Response, RequestException]:
47
+ if legacy is not None:
48
+ warn_removed_legacy_param("getListingsByShop")
45
49
  endpoint = f"/shops/{shop_id}/listings"
46
50
  query_params: Dict[str, Any] = {
47
51
  "state": state.value,
@@ -52,7 +56,6 @@ class ListingResource:
52
56
  "includes": ",".join(list(map(lambda inc: inc.value, includes)))
53
57
  if includes is not None
54
58
  else None,
55
- "legacy": legacy,
56
59
  }
57
60
  return self.session.make_request(endpoint, query_params=query_params)
58
61
 
@@ -68,13 +71,14 @@ class ListingResource:
68
71
  legacy: Optional[bool] = None,
69
72
  allow_suggested_title: Optional[bool] = None,
70
73
  ) -> Union[Response, RequestException]:
74
+ if legacy is not None:
75
+ warn_removed_legacy_param("getListing")
71
76
  endpoint = f"/listings/{listing_id}"
72
77
  query_params: Dict[str, Any] = {
73
78
  "includes": ",".join(list(map(lambda inc: inc.value, includes)))
74
79
  if includes is not None
75
80
  else None,
76
81
  "language": language,
77
- "legacy": legacy,
78
82
  "allow_suggested_title": allow_suggested_title,
79
83
  }
80
84
  return self.session.make_request(endpoint, query_params=query_params)
@@ -95,6 +99,8 @@ class ListingResource:
95
99
  buyer_country: Optional[str] = None,
96
100
  currency: Optional[str] = None,
97
101
  ) -> Union[Response, RequestException]:
102
+ if legacy is not None:
103
+ warn_removed_legacy_param("findAllListingsActive")
98
104
  endpoint = "/listings/active"
99
105
  query_params: Dict[str, Any] = {
100
106
  "limit": limit,
@@ -107,7 +113,6 @@ class ListingResource:
107
113
  "taxonomy_id": taxonomy_id,
108
114
  "shop_location": shop_location,
109
115
  "is_safe": is_safe,
110
- "legacy": legacy,
111
116
  "buyer_country": buyer_country,
112
117
  "currency": currency,
113
118
  }
@@ -123,6 +128,8 @@ class ListingResource:
123
128
  keywords: Optional[str] = None,
124
129
  legacy: Optional[bool] = None,
125
130
  ) -> Union[Response, RequestException]:
131
+ if legacy is not None:
132
+ warn_removed_legacy_param("findAllActiveListingsByShop")
126
133
  endpoint = f"/shops/{shop_id}/listings/active"
127
134
  query_params: Dict[str, Any] = {
128
135
  "limit": limit,
@@ -130,7 +137,6 @@ class ListingResource:
130
137
  "sort_order": sort_order.value,
131
138
  "offset": offset,
132
139
  "keywords": keywords,
133
- "legacy": legacy,
134
140
  }
135
141
  return self.session.make_request(endpoint, query_params=query_params)
136
142
 
@@ -168,6 +174,24 @@ class ListingResource:
168
174
  )
169
175
  return self.get_listings_by_listing_ids(listing_ids, includes, legacy)
170
176
 
177
+ def get_listings_inventory_by_listing_ids(
178
+ self, listing_ids: List[int]
179
+ ) -> Union[Response, RequestException]:
180
+ endpoint = "/listings/batch/inventory"
181
+ query_params: Dict[str, Any] = {
182
+ "listing_ids": ",".join(list(map(str, listing_ids))),
183
+ }
184
+ return self.session.make_request(endpoint, query_params=query_params)
185
+
186
+ def get_listings_shipping_by_listing_ids(
187
+ self, listing_ids: List[int]
188
+ ) -> Union[Response, RequestException]:
189
+ endpoint = "/listings/batch/shipping"
190
+ query_params: Dict[str, Any] = {
191
+ "listing_ids": ",".join(list(map(str, listing_ids))),
192
+ }
193
+ return self.session.make_request(endpoint, query_params=query_params)
194
+
171
195
  def get_featured_listings_by_shop(
172
196
  self, shop_id: int, limit: int = 25, offset: int = 0,
173
197
  legacy: Optional[bool] = None,
@@ -210,10 +234,11 @@ class ListingResource:
210
234
  self, shop_id: int, listing_id: int, listing: UpdateListingRequest,
211
235
  legacy: Optional[bool] = None,
212
236
  ) -> Union[Response, RequestException]:
237
+ if legacy is not None:
238
+ warn_removed_legacy_param("updateListing")
213
239
  endpoint = f"/shops/{shop_id}/listings/{listing_id}"
214
240
  return self.session.make_request(
215
- endpoint, method=Method.PATCH, payload=listing,
216
- query_params={"legacy": legacy},
241
+ endpoint, method=Method.PATCH, payload=listing
217
242
  )
218
243
 
219
244
  def get_listings_by_shop_receipt(
@@ -1,6 +1,7 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Optional, Dict, Any, Union
3
3
 
4
+ from etsy_python.v3.common.Utils import warn_removed_legacy_param
4
5
  from etsy_python.v3.exceptions.RequestException import RequestException
5
6
  from etsy_python.v3.enums.Listing import InventoryIncludes
6
7
  from etsy_python.v3.enums.ListingInventory import MaxVariationsSupported
@@ -21,11 +22,12 @@ class ListingInventoryResource:
21
22
  includes: Optional[InventoryIncludes] = None,
22
23
  legacy: Optional[bool] = None,
23
24
  ) -> Union[Response, RequestException]:
25
+ if legacy is not None:
26
+ warn_removed_legacy_param("getListingInventory")
24
27
  endpoint = f"/listings/{listing_id}/inventory"
25
28
  query_params: Dict[str, Any] = {
26
29
  "show_deleted": show_deleted,
27
30
  "includes": includes.value if includes is not None else None,
28
- "legacy": legacy,
29
31
  }
30
32
  return self.session.make_request(endpoint, query_params=query_params)
31
33
 
@@ -34,9 +36,10 @@ class ListingInventoryResource:
34
36
  legacy: Optional[bool] = None,
35
37
  max_variations_supported: Optional[MaxVariationsSupported] = None,
36
38
  ) -> Union[Response, RequestException]:
39
+ if legacy is not None:
40
+ warn_removed_legacy_param("updateListingInventory")
37
41
  endpoint = f"/listings/{listing_id}/inventory"
38
42
  query_params: Dict[str, Any] = {
39
- "legacy": legacy,
40
43
  "max_variations_supported": max_variations_supported.value
41
44
  if max_variations_supported is not None
42
45
  else None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: etsy-python
3
- Version: 1.1.9
3
+ Version: 1.1.11
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