permitstack 1.0.5__tar.gz → 1.1.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. {permitstack-1.0.5 → permitstack-1.1.0}/PKG-INFO +2 -2
  2. {permitstack-1.0.5 → permitstack-1.1.0}/README.md +1 -1
  3. {permitstack-1.0.5 → permitstack-1.1.0}/pyproject.toml +1 -1
  4. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/_version.py +3 -3
  5. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/__init__.py +5 -0
  6. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/permitdetail.py +6 -0
  7. permitstack-1.1.0/src/permitstack/models/permitenrichment.py +101 -0
  8. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/permitsummary.py +12 -1
  9. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/sdk.py +1 -1
  10. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/requestbodies.py +1 -0
  11. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack.egg-info/PKG-INFO +2 -2
  12. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack.egg-info/SOURCES.txt +1 -0
  13. {permitstack-1.0.5 → permitstack-1.1.0}/setup.cfg +0 -0
  14. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/__init__.py +0 -0
  15. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/_hooks/__init__.py +0 -0
  16. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/_hooks/sdkhooks.py +0 -0
  17. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/_hooks/types.py +0 -0
  18. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/basesdk.py +0 -0
  19. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/contractors.py +0 -0
  20. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/__init__.py +0 -0
  21. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/httpvalidationerror.py +0 -0
  22. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/no_response_error.py +0 -0
  23. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/permitstackdefaulterror.py +0 -0
  24. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/permitstackerror.py +0 -0
  25. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/errors/responsevalidationerror.py +0 -0
  26. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/health.py +0 -0
  27. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/httpclient.py +0 -0
  28. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/contractorprofile.py +0 -0
  29. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/contractorsearchresponse.py +0 -0
  30. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/contractorsummary.py +0 -0
  31. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/delete_webhookop.py +0 -0
  32. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/export_permitsop.py +0 -0
  33. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_contractor_permitsop.py +0 -0
  34. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_contractorop.py +0 -0
  35. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_permitop.py +0 -0
  36. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_permits_by_addressop.py +0 -0
  37. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_property_historyop.py +0 -0
  38. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/get_webhook_secretop.py +0 -0
  39. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/permitsearchresponse.py +0 -0
  40. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/permitstatus.py +0 -0
  41. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/propertytype.py +0 -0
  42. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/search_contractorsop.py +0 -0
  43. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/search_permitsop.py +0 -0
  44. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/security.py +0 -0
  45. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/test_webhookop.py +0 -0
  46. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/validationerror.py +0 -0
  47. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/models/webhookcreate.py +0 -0
  48. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/permits.py +0 -0
  49. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/property_history.py +0 -0
  50. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/py.typed +0 -0
  51. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/sdkconfiguration.py +0 -0
  52. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/types/__init__.py +0 -0
  53. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/types/base64fileinput.py +0 -0
  54. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/types/basemodel.py +0 -0
  55. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/__init__.py +0 -0
  56. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/annotations.py +0 -0
  57. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/datetimes.py +0 -0
  58. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/dynamic_imports.py +0 -0
  59. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/enums.py +0 -0
  60. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/eventstreaming.py +0 -0
  61. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/forms.py +0 -0
  62. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/headers.py +0 -0
  63. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/logger.py +0 -0
  64. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/metadata.py +0 -0
  65. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/queryparams.py +0 -0
  66. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/retries.py +0 -0
  67. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/security.py +0 -0
  68. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/serializers.py +0 -0
  69. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/unmarshal_json_response.py +0 -0
  70. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/url.py +0 -0
  71. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/utils/values.py +0 -0
  72. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack/webhooks.py +0 -0
  73. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack.egg-info/dependency_links.txt +0 -0
  74. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack.egg-info/requires.txt +0 -0
  75. {permitstack-1.0.5 → permitstack-1.1.0}/src/permitstack.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: permitstack
3
- Version: 1.0.5
3
+ Version: 1.1.0
4
4
  Summary: Official Python SDK for the PermitStack building permit data API.
5
5
  Author: PermitStack
6
6
  License: Apache-2.0
@@ -25,7 +25,7 @@ Developer-friendly & type-safe Python SDK specifically catered to leverage *perm
25
25
  PermitStack:
26
26
  ## PermitStack Building Permit API
27
27
 
28
- Access 39M+ building permits across 165 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
28
+ Access 39M+ building permits across 171 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
29
29
 
30
30
  ### Getting started
31
31
  1. Sign up at [permit-stack.com](https://permit-stack.com/#pricing) for a free API key (100 req/day)
@@ -13,7 +13,7 @@ Developer-friendly & type-safe Python SDK specifically catered to leverage *perm
13
13
  PermitStack:
14
14
  ## PermitStack Building Permit API
15
15
 
16
- Access 39M+ building permits across 165 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
16
+ Access 39M+ building permits across 171 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
17
17
 
18
18
  ### Getting started
19
19
  1. Sign up at [permit-stack.com](https://permit-stack.com/#pricing) for a free API key (100 req/day)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "permitstack"
3
- version = "1.0.5"
3
+ version = "1.1.0"
4
4
  description = "Official Python SDK for the PermitStack building permit data API."
5
5
  authors = [{ name = "PermitStack" },]
6
6
  readme = "README.md"
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "permitstack"
6
- __version__: str = "1.0.5"
6
+ __version__: str = "1.1.0"
7
7
  __openapi_doc_version__: str = "1.0.0"
8
- __gen_version__: str = "2.887.0"
9
- __user_agent__: str = "speakeasy-sdk/python 1.0.5 2.887.0 1.0.0 permitstack"
8
+ __gen_version__: str = "2.893.0"
9
+ __user_agent__: str = "speakeasy-sdk/python 1.1.0 2.893.0 1.0.0 permitstack"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
32
32
  GetWebhookSecretRequestTypedDict,
33
33
  )
34
34
  from .permitdetail import PermitDetail, PermitDetailTypedDict
35
+ from .permitenrichment import PermitEnrichment, PermitEnrichmentTypedDict
35
36
  from .permitsearchresponse import (
36
37
  PermitSearchResponse,
37
38
  PermitSearchResponseTypedDict,
@@ -85,6 +86,8 @@ __all__ = [
85
86
  "LocTypedDict",
86
87
  "PermitDetail",
87
88
  "PermitDetailTypedDict",
89
+ "PermitEnrichment",
90
+ "PermitEnrichmentTypedDict",
88
91
  "PermitSearchResponse",
89
92
  "PermitSearchResponseTypedDict",
90
93
  "PermitStatus",
@@ -130,6 +133,8 @@ _dynamic_imports: dict[str, str] = {
130
133
  "GetWebhookSecretRequestTypedDict": ".get_webhook_secretop",
131
134
  "PermitDetail": ".permitdetail",
132
135
  "PermitDetailTypedDict": ".permitdetail",
136
+ "PermitEnrichment": ".permitenrichment",
137
+ "PermitEnrichmentTypedDict": ".permitenrichment",
133
138
  "PermitSearchResponse": ".permitsearchresponse",
134
139
  "PermitSearchResponseTypedDict": ".permitsearchresponse",
135
140
  "PermitStatus": ".permitstatus",
@@ -1,6 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .permitenrichment import PermitEnrichment, PermitEnrichmentTypedDict
4
5
  from datetime import date
5
6
  from permitstack.types import (
6
7
  BaseModel,
@@ -41,6 +42,7 @@ class PermitDetailTypedDict(TypedDict):
41
42
  jurisdiction_name: NotRequired[Nullable[str]]
42
43
  latitude: NotRequired[Nullable[float]]
43
44
  longitude: NotRequired[Nullable[float]]
45
+ enrichment: NotRequired[Nullable[PermitEnrichmentTypedDict]]
44
46
  contractor_license: NotRequired[Nullable[str]]
45
47
  created_at: NotRequired[Nullable[str]]
46
48
 
@@ -98,6 +100,8 @@ class PermitDetail(BaseModel):
98
100
 
99
101
  longitude: OptionalNullable[float] = UNSET
100
102
 
103
+ enrichment: OptionalNullable[PermitEnrichment] = UNSET
104
+
101
105
  contractor_license: OptionalNullable[str] = UNSET
102
106
 
103
107
  created_at: OptionalNullable[str] = UNSET
@@ -110,6 +114,7 @@ class PermitDetail(BaseModel):
110
114
  "jurisdiction_name",
111
115
  "latitude",
112
116
  "longitude",
117
+ "enrichment",
113
118
  "contractor_license",
114
119
  "created_at",
115
120
  ]
@@ -131,6 +136,7 @@ class PermitDetail(BaseModel):
131
136
  "jurisdiction_name",
132
137
  "latitude",
133
138
  "longitude",
139
+ "enrichment",
134
140
  "date_expired",
135
141
  "fee_amount",
136
142
  "stories",
@@ -0,0 +1,101 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from permitstack.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
11
+ from pydantic import model_serializer
12
+ from typing import List
13
+ from typing_extensions import NotRequired, TypedDict
14
+
15
+
16
+ class PermitEnrichmentTypedDict(TypedDict):
17
+ r"""Curated subset of the offline LLM enrichment (permits.enriched_data).
18
+
19
+ Present only on the ~1-2% of permits that have been enriched so far
20
+ (prioritized toward SOLAR/ROOFING/NEW_CONSTRUCTION). null otherwise.
21
+ """
22
+
23
+ scope: NotRequired[Nullable[str]]
24
+ work_summary: NotRequired[Nullable[str]]
25
+ solar_kw: NotRequired[Nullable[float]]
26
+ sqft: NotRequired[Nullable[float]]
27
+ units: NotRequired[Nullable[int]]
28
+ is_residential: NotRequired[Nullable[bool]]
29
+ is_commercial: NotRequired[Nullable[bool]]
30
+ materials: NotRequired[Nullable[List[str]]]
31
+
32
+
33
+ class PermitEnrichment(BaseModel):
34
+ r"""Curated subset of the offline LLM enrichment (permits.enriched_data).
35
+
36
+ Present only on the ~1-2% of permits that have been enriched so far
37
+ (prioritized toward SOLAR/ROOFING/NEW_CONSTRUCTION). null otherwise.
38
+ """
39
+
40
+ scope: OptionalNullable[str] = UNSET
41
+
42
+ work_summary: OptionalNullable[str] = UNSET
43
+
44
+ solar_kw: OptionalNullable[float] = UNSET
45
+
46
+ sqft: OptionalNullable[float] = UNSET
47
+
48
+ units: OptionalNullable[int] = UNSET
49
+
50
+ is_residential: OptionalNullable[bool] = UNSET
51
+
52
+ is_commercial: OptionalNullable[bool] = UNSET
53
+
54
+ materials: OptionalNullable[List[str]] = UNSET
55
+
56
+ @model_serializer(mode="wrap")
57
+ def serialize_model(self, handler):
58
+ optional_fields = set(
59
+ [
60
+ "scope",
61
+ "work_summary",
62
+ "solar_kw",
63
+ "sqft",
64
+ "units",
65
+ "is_residential",
66
+ "is_commercial",
67
+ "materials",
68
+ ]
69
+ )
70
+ nullable_fields = set(
71
+ [
72
+ "scope",
73
+ "work_summary",
74
+ "solar_kw",
75
+ "sqft",
76
+ "units",
77
+ "is_residential",
78
+ "is_commercial",
79
+ "materials",
80
+ ]
81
+ )
82
+ serialized = handler(self)
83
+ m = {}
84
+
85
+ for n, f in type(self).model_fields.items():
86
+ k = f.alias or n
87
+ val = serialized.get(k, serialized.get(n))
88
+ is_nullable_and_explicitly_set = (
89
+ k in nullable_fields
90
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
91
+ )
92
+
93
+ if val != UNSET_SENTINEL:
94
+ if (
95
+ val is not None
96
+ or k not in optional_fields
97
+ or is_nullable_and_explicitly_set
98
+ ):
99
+ m[k] = val
100
+
101
+ return m
@@ -1,6 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .permitenrichment import PermitEnrichment, PermitEnrichmentTypedDict
4
5
  from datetime import date
5
6
  from permitstack.types import (
6
7
  BaseModel,
@@ -34,6 +35,7 @@ class PermitSummaryTypedDict(TypedDict):
34
35
  jurisdiction_name: NotRequired[Nullable[str]]
35
36
  latitude: NotRequired[Nullable[float]]
36
37
  longitude: NotRequired[Nullable[float]]
38
+ enrichment: NotRequired[Nullable[PermitEnrichmentTypedDict]]
37
39
 
38
40
 
39
41
  class PermitSummary(BaseModel):
@@ -75,10 +77,18 @@ class PermitSummary(BaseModel):
75
77
 
76
78
  longitude: OptionalNullable[float] = UNSET
77
79
 
80
+ enrichment: OptionalNullable[PermitEnrichment] = UNSET
81
+
78
82
  @model_serializer(mode="wrap")
79
83
  def serialize_model(self, handler):
80
84
  optional_fields = set(
81
- ["contractor_name", "jurisdiction_name", "latitude", "longitude"]
85
+ [
86
+ "contractor_name",
87
+ "jurisdiction_name",
88
+ "latitude",
89
+ "longitude",
90
+ "enrichment",
91
+ ]
82
92
  )
83
93
  nullable_fields = set(
84
94
  [
@@ -97,6 +107,7 @@ class PermitSummary(BaseModel):
97
107
  "jurisdiction_name",
98
108
  "latitude",
99
109
  "longitude",
110
+ "enrichment",
100
111
  ]
101
112
  )
102
113
  serialized = handler(self)
@@ -26,7 +26,7 @@ class Permitstack(BaseSDK):
26
26
  r"""PermitStack:
27
27
  ## PermitStack Building Permit API
28
28
 
29
- Access 39M+ building permits across 165 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
29
+ Access 39M+ building permits across 171 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
30
30
 
31
31
  ### Getting started
32
32
  1. Sign up at [permit-stack.com](https://permit-stack.com/#pricing) for a free API key (100 req/day)
@@ -46,6 +46,7 @@ def serialize_request_body(
46
46
 
47
47
  if re.match(r"^(application|text)\/([^+]+\+)*json.*", media_type) is not None:
48
48
  serialized_request_body.content = marshal_json(request_body, request_body_type)
49
+
49
50
  elif re.match(r"^multipart\/.*", media_type) is not None:
50
51
  (
51
52
  serialized_request_body.media_type,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: permitstack
3
- Version: 1.0.5
3
+ Version: 1.1.0
4
4
  Summary: Official Python SDK for the PermitStack building permit data API.
5
5
  Author: PermitStack
6
6
  License: Apache-2.0
@@ -25,7 +25,7 @@ Developer-friendly & type-safe Python SDK specifically catered to leverage *perm
25
25
  PermitStack:
26
26
  ## PermitStack Building Permit API
27
27
 
28
- Access 39M+ building permits across 165 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
28
+ Access 39M+ building permits across 171 active U.S. jurisdictions (plus 19 historical archives), updated daily from official open data portals.
29
29
 
30
30
  ### Getting started
31
31
  1. Sign up at [permit-stack.com](https://permit-stack.com/#pricing) for a free API key (100 req/day)
@@ -39,6 +39,7 @@ src/permitstack/models/get_permits_by_addressop.py
39
39
  src/permitstack/models/get_property_historyop.py
40
40
  src/permitstack/models/get_webhook_secretop.py
41
41
  src/permitstack/models/permitdetail.py
42
+ src/permitstack/models/permitenrichment.py
42
43
  src/permitstack/models/permitsearchresponse.py
43
44
  src/permitstack/models/permitstatus.py
44
45
  src/permitstack/models/permitsummary.py
File without changes