hubble-sdk-python 0.2.0__py3-none-any.whl → 0.2.1__py3-none-any.whl
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.
- hubble_sdk/_generated/api/default/attach_client_authorization.py +32 -8
- hubble_sdk/_generated/models/consent.py +17 -9
- hubble_sdk/_generated/models/consent_source.py +18 -3
- hubble_sdk/_generated/models/consent_source_status.py +19 -0
- hubble_sdk/_generated/models/consent_source_type.py +19 -0
- hubble_sdk/_generated/models/consent_status.py +19 -0
- hubble_sdk/_generated/models/device_authorization_request.py +2 -2
- hubble_sdk/_generated/models/export_patient_fhir_prefer.py +19 -0
- hubble_sdk/_generated/models/export_patient_fhir_response_202.py +1 -1
- hubble_sdk/_generated/models/export_patient_fhir_response_202_status.py +19 -0
- hubble_sdk/_generated/models/export_patient_pdf_prefer.py +19 -0
- hubble_sdk/_generated/models/export_patient_pdf_response_202.py +1 -1
- hubble_sdk/_generated/models/export_patient_pdf_response_202_status.py +19 -0
- hubble_sdk/_generated/models/get_patient_pdf_export_download.py +19 -0
- hubble_sdk/_generated/models/get_patient_pdf_export_response_200.py +1 -1
- hubble_sdk/_generated/models/get_patient_pdf_export_response_200_status.py +19 -0
- hubble_sdk/_generated/models/o_auth_error.py +1 -1
- hubble_sdk/_generated/models/o_auth_error_error.py +19 -0
- hubble_sdk/_generated/models/provider_seed.py +11 -0
- hubble_sdk/_generated/models/token_request.py +1 -1
- hubble_sdk/_generated/models/token_request_grant_type.py +19 -0
- hubble_sdk/_hubble.py +13 -8
- hubble_sdk/_webhooks.py +8 -1
- {hubble_sdk_python-0.2.0.dist-info → hubble_sdk_python-0.2.1.dist-info}/METADATA +1 -1
- {hubble_sdk_python-0.2.0.dist-info → hubble_sdk_python-0.2.1.dist-info}/RECORD +27 -27
- {hubble_sdk_python-0.2.0.dist-info → hubble_sdk_python-0.2.1.dist-info}/WHEEL +0 -0
- {hubble_sdk_python-0.2.0.dist-info → hubble_sdk_python-0.2.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -98,8 +98,14 @@ def sync_detailed(
|
|
|
98
98
|
"""Attach a customer-supplied HIPAA authorization
|
|
99
99
|
|
|
100
100
|
Upload an already-signed HIPAA authorization for a consent and grant delegated retrieval from the
|
|
101
|
-
providers it names.
|
|
102
|
-
|
|
101
|
+
providers it names. Hubble keeps a copy of the signed authorization on file and, based on your
|
|
102
|
+
attestation, makes the consent `active` right away with no patient step. If your organization also
|
|
103
|
+
uses EHR sign-in, health plans, or the health information network, the consent stays `pending` until
|
|
104
|
+
the patient finishes the link. Requires the `byo_hipaa_authorization` entitlement on your
|
|
105
|
+
organization. Attaching an authorization is your organization's attestation that it holds a valid
|
|
106
|
+
HIPAA authorization signed by the patient, and that it covers the providers you name. Hubble does
|
|
107
|
+
not review the document or ask the patient to confirm it, so your organization is responsible for
|
|
108
|
+
checking that the authorization is correct before you attach it.
|
|
103
109
|
|
|
104
110
|
Args:
|
|
105
111
|
id (str):
|
|
@@ -134,8 +140,14 @@ def sync(
|
|
|
134
140
|
"""Attach a customer-supplied HIPAA authorization
|
|
135
141
|
|
|
136
142
|
Upload an already-signed HIPAA authorization for a consent and grant delegated retrieval from the
|
|
137
|
-
providers it names.
|
|
138
|
-
|
|
143
|
+
providers it names. Hubble keeps a copy of the signed authorization on file and, based on your
|
|
144
|
+
attestation, makes the consent `active` right away with no patient step. If your organization also
|
|
145
|
+
uses EHR sign-in, health plans, or the health information network, the consent stays `pending` until
|
|
146
|
+
the patient finishes the link. Requires the `byo_hipaa_authorization` entitlement on your
|
|
147
|
+
organization. Attaching an authorization is your organization's attestation that it holds a valid
|
|
148
|
+
HIPAA authorization signed by the patient, and that it covers the providers you name. Hubble does
|
|
149
|
+
not review the document or ask the patient to confirm it, so your organization is responsible for
|
|
150
|
+
checking that the authorization is correct before you attach it.
|
|
139
151
|
|
|
140
152
|
Args:
|
|
141
153
|
id (str):
|
|
@@ -165,8 +177,14 @@ async def asyncio_detailed(
|
|
|
165
177
|
"""Attach a customer-supplied HIPAA authorization
|
|
166
178
|
|
|
167
179
|
Upload an already-signed HIPAA authorization for a consent and grant delegated retrieval from the
|
|
168
|
-
providers it names.
|
|
169
|
-
|
|
180
|
+
providers it names. Hubble keeps a copy of the signed authorization on file and, based on your
|
|
181
|
+
attestation, makes the consent `active` right away with no patient step. If your organization also
|
|
182
|
+
uses EHR sign-in, health plans, or the health information network, the consent stays `pending` until
|
|
183
|
+
the patient finishes the link. Requires the `byo_hipaa_authorization` entitlement on your
|
|
184
|
+
organization. Attaching an authorization is your organization's attestation that it holds a valid
|
|
185
|
+
HIPAA authorization signed by the patient, and that it covers the providers you name. Hubble does
|
|
186
|
+
not review the document or ask the patient to confirm it, so your organization is responsible for
|
|
187
|
+
checking that the authorization is correct before you attach it.
|
|
170
188
|
|
|
171
189
|
Args:
|
|
172
190
|
id (str):
|
|
@@ -199,8 +217,14 @@ async def asyncio(
|
|
|
199
217
|
"""Attach a customer-supplied HIPAA authorization
|
|
200
218
|
|
|
201
219
|
Upload an already-signed HIPAA authorization for a consent and grant delegated retrieval from the
|
|
202
|
-
providers it names.
|
|
203
|
-
|
|
220
|
+
providers it names. Hubble keeps a copy of the signed authorization on file and, based on your
|
|
221
|
+
attestation, makes the consent `active` right away with no patient step. If your organization also
|
|
222
|
+
uses EHR sign-in, health plans, or the health information network, the consent stays `pending` until
|
|
223
|
+
the patient finishes the link. Requires the `byo_hipaa_authorization` entitlement on your
|
|
224
|
+
organization. Attaching an authorization is your organization's attestation that it holds a valid
|
|
225
|
+
HIPAA authorization signed by the patient, and that it covers the providers you name. Hubble does
|
|
226
|
+
not review the document or ask the patient to confirm it, so your organization is responsible for
|
|
227
|
+
checking that the authorization is correct before you attach it.
|
|
204
228
|
|
|
205
229
|
Args:
|
|
206
230
|
id (str):
|
|
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any, Self, TypeVar, cast
|
|
|
7
7
|
from attrs import define as _attrs_define
|
|
8
8
|
|
|
9
9
|
from ..models.consent_status import ConsentStatus
|
|
10
|
+
from ..types import UNSET, Unset
|
|
10
11
|
|
|
11
12
|
if TYPE_CHECKING:
|
|
12
13
|
from ..models.consent_error import ConsentError
|
|
@@ -27,7 +28,9 @@ class Consent:
|
|
|
27
28
|
expires_at (datetime.datetime): When the patient link expires.
|
|
28
29
|
sources (list[ConsentSource]): Each source on the consent and its progress (live vs one-time,
|
|
29
30
|
available/pending/failed).
|
|
30
|
-
error (ConsentError | None):
|
|
31
|
+
error (ConsentError | None | Unset): Deprecated and scheduled for removal. Branch on `status` instead: `error`
|
|
32
|
+
means the consent finished with no source attached. `code` is always `authorization_failed`, and `message` is
|
|
33
|
+
internal diagnostic text, so neither is safe to depend on.
|
|
31
34
|
"""
|
|
32
35
|
|
|
33
36
|
id: str
|
|
@@ -36,7 +39,7 @@ class Consent:
|
|
|
36
39
|
created_at: datetime.datetime
|
|
37
40
|
expires_at: datetime.datetime
|
|
38
41
|
sources: list[ConsentSource]
|
|
39
|
-
error: ConsentError | None
|
|
42
|
+
error: ConsentError | None | Unset = UNSET
|
|
40
43
|
|
|
41
44
|
def to_dict(self) -> dict[str, Any]:
|
|
42
45
|
from ..models.consent_error import ConsentError
|
|
@@ -57,8 +60,10 @@ class Consent:
|
|
|
57
60
|
sources_item = sources_item_data.to_dict()
|
|
58
61
|
sources.append(sources_item)
|
|
59
62
|
|
|
60
|
-
error: dict[str, Any] | None
|
|
61
|
-
if isinstance(self.error,
|
|
63
|
+
error: dict[str, Any] | None | Unset
|
|
64
|
+
if isinstance(self.error, Unset):
|
|
65
|
+
error = UNSET
|
|
66
|
+
elif isinstance(self.error, ConsentError):
|
|
62
67
|
error = self.error.to_dict()
|
|
63
68
|
else:
|
|
64
69
|
error = self.error
|
|
@@ -73,9 +78,10 @@ class Consent:
|
|
|
73
78
|
"created_at": created_at,
|
|
74
79
|
"expires_at": expires_at,
|
|
75
80
|
"sources": sources,
|
|
76
|
-
"error": error,
|
|
77
81
|
}
|
|
78
82
|
)
|
|
83
|
+
if error is not UNSET:
|
|
84
|
+
field_dict["error"] = error
|
|
79
85
|
|
|
80
86
|
return field_dict
|
|
81
87
|
|
|
@@ -87,7 +93,7 @@ class Consent:
|
|
|
87
93
|
d = dict(src_dict)
|
|
88
94
|
id = d.pop("id")
|
|
89
95
|
|
|
90
|
-
status = ConsentStatus(d.pop("status"))
|
|
96
|
+
status = ConsentStatus._from_value(d.pop("status"))
|
|
91
97
|
|
|
92
98
|
def _parse_patient_ref(data: object) -> None | str:
|
|
93
99
|
if data is None:
|
|
@@ -107,9 +113,11 @@ class Consent:
|
|
|
107
113
|
|
|
108
114
|
sources.append(sources_item)
|
|
109
115
|
|
|
110
|
-
def _parse_error(data: object) -> ConsentError | None:
|
|
116
|
+
def _parse_error(data: object) -> ConsentError | None | Unset:
|
|
111
117
|
if data is None:
|
|
112
118
|
return data
|
|
119
|
+
if isinstance(data, Unset):
|
|
120
|
+
return data
|
|
113
121
|
try:
|
|
114
122
|
if not isinstance(data, dict):
|
|
115
123
|
raise TypeError()
|
|
@@ -118,9 +126,9 @@ class Consent:
|
|
|
118
126
|
return error_type_0
|
|
119
127
|
except (TypeError, ValueError, AttributeError, KeyError):
|
|
120
128
|
pass
|
|
121
|
-
return cast(ConsentError | None, data)
|
|
129
|
+
return cast(ConsentError | None | Unset, data)
|
|
122
130
|
|
|
123
|
-
error = _parse_error(d.pop("error"))
|
|
131
|
+
error = _parse_error(d.pop("error", UNSET))
|
|
124
132
|
|
|
125
133
|
consent = cls(
|
|
126
134
|
id=id,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Mapping
|
|
4
|
-
from typing import Any, Self, TypeVar
|
|
4
|
+
from typing import Any, Self, TypeVar, cast
|
|
5
5
|
|
|
6
6
|
from attrs import define as _attrs_define
|
|
7
7
|
|
|
@@ -18,6 +18,8 @@ class ConsentSource:
|
|
|
18
18
|
id (str): The source's id. Pass it as `connection=<id>` to read or export this one source instead of all of
|
|
19
19
|
them. Present on every source, including ones still pending.
|
|
20
20
|
provider (str): The source as the customer knows it (facility / provider name).
|
|
21
|
+
provider_ref (None | str): The `provider_ref` you gave the seeded provider this source came from. Null for a
|
|
22
|
+
source the patient added themselves.
|
|
21
23
|
type_ (ConsentSourceType): live = an ongoing connection re-readable until its access lapses (EHR, HIE); one_time
|
|
22
24
|
= a single pull with no ongoing connection (delegated retrieval).
|
|
23
25
|
status (ConsentSourceStatus): available = records readable now; pending = still being reached out to; failed =
|
|
@@ -27,6 +29,7 @@ class ConsentSource:
|
|
|
27
29
|
|
|
28
30
|
id: str
|
|
29
31
|
provider: str
|
|
32
|
+
provider_ref: None | str
|
|
30
33
|
type_: ConsentSourceType
|
|
31
34
|
status: ConsentSourceStatus
|
|
32
35
|
|
|
@@ -35,6 +38,9 @@ class ConsentSource:
|
|
|
35
38
|
|
|
36
39
|
provider = self.provider
|
|
37
40
|
|
|
41
|
+
provider_ref: None | str
|
|
42
|
+
provider_ref = self.provider_ref
|
|
43
|
+
|
|
38
44
|
type_ = self.type_.value
|
|
39
45
|
|
|
40
46
|
status = self.status.value
|
|
@@ -45,6 +51,7 @@ class ConsentSource:
|
|
|
45
51
|
{
|
|
46
52
|
"id": id,
|
|
47
53
|
"provider": provider,
|
|
54
|
+
"provider_ref": provider_ref,
|
|
48
55
|
"type": type_,
|
|
49
56
|
"status": status,
|
|
50
57
|
}
|
|
@@ -59,13 +66,21 @@ class ConsentSource:
|
|
|
59
66
|
|
|
60
67
|
provider = d.pop("provider")
|
|
61
68
|
|
|
62
|
-
|
|
69
|
+
def _parse_provider_ref(data: object) -> None | str:
|
|
70
|
+
if data is None:
|
|
71
|
+
return data
|
|
72
|
+
return cast(None | str, data)
|
|
73
|
+
|
|
74
|
+
provider_ref = _parse_provider_ref(d.pop("provider_ref"))
|
|
75
|
+
|
|
76
|
+
type_ = ConsentSourceType._from_value(d.pop("type"))
|
|
63
77
|
|
|
64
|
-
status = ConsentSourceStatus(d.pop("status"))
|
|
78
|
+
status = ConsentSourceStatus._from_value(d.pop("status"))
|
|
65
79
|
|
|
66
80
|
consent_source = cls(
|
|
67
81
|
id=id,
|
|
68
82
|
provider=provider,
|
|
83
|
+
provider_ref=provider_ref,
|
|
69
84
|
type_=type_,
|
|
70
85
|
status=status,
|
|
71
86
|
)
|
|
@@ -9,3 +9,22 @@ class ConsentSourceStatus(StrEnum):
|
|
|
9
9
|
|
|
10
10
|
def __str__(self) -> str:
|
|
11
11
|
return str(self.value)
|
|
12
|
+
|
|
13
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
14
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
15
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
16
|
+
# and is absent from list(ConsentSourceStatus), which is how to tell it apart.
|
|
17
|
+
# A value that is not a string is a malformed response and still raises.
|
|
18
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
19
|
+
# in still raises and membership checks are unchanged.
|
|
20
|
+
@classmethod
|
|
21
|
+
def _from_value(cls, value: object) -> "ConsentSourceStatus":
|
|
22
|
+
try:
|
|
23
|
+
return cls(value)
|
|
24
|
+
except ValueError:
|
|
25
|
+
if not isinstance(value, str):
|
|
26
|
+
raise
|
|
27
|
+
member = str.__new__(cls, value)
|
|
28
|
+
member._name_ = value
|
|
29
|
+
member._value_ = value
|
|
30
|
+
return member
|
|
@@ -7,3 +7,22 @@ class ConsentSourceType(StrEnum):
|
|
|
7
7
|
|
|
8
8
|
def __str__(self) -> str:
|
|
9
9
|
return str(self.value)
|
|
10
|
+
|
|
11
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
12
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
13
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
14
|
+
# and is absent from list(ConsentSourceType), which is how to tell it apart.
|
|
15
|
+
# A value that is not a string is a malformed response and still raises.
|
|
16
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
17
|
+
# in still raises and membership checks are unchanged.
|
|
18
|
+
@classmethod
|
|
19
|
+
def _from_value(cls, value: object) -> "ConsentSourceType":
|
|
20
|
+
try:
|
|
21
|
+
return cls(value)
|
|
22
|
+
except ValueError:
|
|
23
|
+
if not isinstance(value, str):
|
|
24
|
+
raise
|
|
25
|
+
member = str.__new__(cls, value)
|
|
26
|
+
member._name_ = value
|
|
27
|
+
member._value_ = value
|
|
28
|
+
return member
|
|
@@ -10,3 +10,22 @@ class ConsentStatus(StrEnum):
|
|
|
10
10
|
|
|
11
11
|
def __str__(self) -> str:
|
|
12
12
|
return str(self.value)
|
|
13
|
+
|
|
14
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
15
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
16
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
17
|
+
# and is absent from list(ConsentStatus), which is how to tell it apart.
|
|
18
|
+
# A value that is not a string is a malformed response and still raises.
|
|
19
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
20
|
+
# in still raises and membership checks are unchanged.
|
|
21
|
+
@classmethod
|
|
22
|
+
def _from_value(cls, value: object) -> "ConsentStatus":
|
|
23
|
+
try:
|
|
24
|
+
return cls(value)
|
|
25
|
+
except ValueError:
|
|
26
|
+
if not isinstance(value, str):
|
|
27
|
+
raise
|
|
28
|
+
member = str.__new__(cls, value)
|
|
29
|
+
member._name_ = value
|
|
30
|
+
member._value_ = value
|
|
31
|
+
return member
|
|
@@ -29,8 +29,8 @@ class DeviceAuthorizationRequest:
|
|
|
29
29
|
patient_postal_code (str | Unset): Patient's postal code.
|
|
30
30
|
patient_phone (str | Unset): Patient's phone number.
|
|
31
31
|
patient_email (str | Unset): Patient's email, used as the signer identity.
|
|
32
|
-
providers (str | Unset): JSON array of provider seeds to prefill the patient's list, each `
|
|
33
|
-
|
|
32
|
+
providers (str | Unset): JSON array of provider seeds to prefill the patient's list, each a `ProviderSeed`.
|
|
33
|
+
Seeded by name (freeform); the patient can add, change, or remove them on the link page.
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
36
|
patient_ref: str | Unset = UNSET
|
|
@@ -6,3 +6,22 @@ class ExportPatientFhirPrefer(StrEnum):
|
|
|
6
6
|
|
|
7
7
|
def __str__(self) -> str:
|
|
8
8
|
return str(self.value)
|
|
9
|
+
|
|
10
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
11
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
12
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
13
|
+
# and is absent from list(ExportPatientFhirPrefer), which is how to tell it apart.
|
|
14
|
+
# A value that is not a string is a malformed response and still raises.
|
|
15
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
16
|
+
# in still raises and membership checks are unchanged.
|
|
17
|
+
@classmethod
|
|
18
|
+
def _from_value(cls, value: object) -> "ExportPatientFhirPrefer":
|
|
19
|
+
try:
|
|
20
|
+
return cls(value)
|
|
21
|
+
except ValueError:
|
|
22
|
+
if not isinstance(value, str):
|
|
23
|
+
raise
|
|
24
|
+
member = str.__new__(cls, value)
|
|
25
|
+
member._name_ = value
|
|
26
|
+
member._value_ = value
|
|
27
|
+
return member
|
|
@@ -70,7 +70,7 @@ class ExportPatientFhirResponse202:
|
|
|
70
70
|
if isinstance(_status, Unset):
|
|
71
71
|
status = UNSET
|
|
72
72
|
else:
|
|
73
|
-
status = ExportPatientFhirResponse202Status(_status)
|
|
73
|
+
status = ExportPatientFhirResponse202Status._from_value(_status)
|
|
74
74
|
|
|
75
75
|
_expires_at = d.pop("expiresAt", UNSET)
|
|
76
76
|
expires_at: datetime.datetime | Unset
|
|
@@ -7,3 +7,22 @@ class ExportPatientFhirResponse202Status(StrEnum):
|
|
|
7
7
|
|
|
8
8
|
def __str__(self) -> str:
|
|
9
9
|
return str(self.value)
|
|
10
|
+
|
|
11
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
12
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
13
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
14
|
+
# and is absent from list(ExportPatientFhirResponse202Status), which is how to tell it apart.
|
|
15
|
+
# A value that is not a string is a malformed response and still raises.
|
|
16
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
17
|
+
# in still raises and membership checks are unchanged.
|
|
18
|
+
@classmethod
|
|
19
|
+
def _from_value(cls, value: object) -> "ExportPatientFhirResponse202Status":
|
|
20
|
+
try:
|
|
21
|
+
return cls(value)
|
|
22
|
+
except ValueError:
|
|
23
|
+
if not isinstance(value, str):
|
|
24
|
+
raise
|
|
25
|
+
member = str.__new__(cls, value)
|
|
26
|
+
member._name_ = value
|
|
27
|
+
member._value_ = value
|
|
28
|
+
return member
|
|
@@ -6,3 +6,22 @@ class ExportPatientPdfPrefer(StrEnum):
|
|
|
6
6
|
|
|
7
7
|
def __str__(self) -> str:
|
|
8
8
|
return str(self.value)
|
|
9
|
+
|
|
10
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
11
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
12
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
13
|
+
# and is absent from list(ExportPatientPdfPrefer), which is how to tell it apart.
|
|
14
|
+
# A value that is not a string is a malformed response and still raises.
|
|
15
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
16
|
+
# in still raises and membership checks are unchanged.
|
|
17
|
+
@classmethod
|
|
18
|
+
def _from_value(cls, value: object) -> "ExportPatientPdfPrefer":
|
|
19
|
+
try:
|
|
20
|
+
return cls(value)
|
|
21
|
+
except ValueError:
|
|
22
|
+
if not isinstance(value, str):
|
|
23
|
+
raise
|
|
24
|
+
member = str.__new__(cls, value)
|
|
25
|
+
member._name_ = value
|
|
26
|
+
member._value_ = value
|
|
27
|
+
return member
|
|
@@ -70,7 +70,7 @@ class ExportPatientPdfResponse202:
|
|
|
70
70
|
if isinstance(_status, Unset):
|
|
71
71
|
status = UNSET
|
|
72
72
|
else:
|
|
73
|
-
status = ExportPatientPdfResponse202Status(_status)
|
|
73
|
+
status = ExportPatientPdfResponse202Status._from_value(_status)
|
|
74
74
|
|
|
75
75
|
_expires_at = d.pop("expiresAt", UNSET)
|
|
76
76
|
expires_at: datetime.datetime | Unset
|
|
@@ -7,3 +7,22 @@ class ExportPatientPdfResponse202Status(StrEnum):
|
|
|
7
7
|
|
|
8
8
|
def __str__(self) -> str:
|
|
9
9
|
return str(self.value)
|
|
10
|
+
|
|
11
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
12
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
13
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
14
|
+
# and is absent from list(ExportPatientPdfResponse202Status), which is how to tell it apart.
|
|
15
|
+
# A value that is not a string is a malformed response and still raises.
|
|
16
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
17
|
+
# in still raises and membership checks are unchanged.
|
|
18
|
+
@classmethod
|
|
19
|
+
def _from_value(cls, value: object) -> "ExportPatientPdfResponse202Status":
|
|
20
|
+
try:
|
|
21
|
+
return cls(value)
|
|
22
|
+
except ValueError:
|
|
23
|
+
if not isinstance(value, str):
|
|
24
|
+
raise
|
|
25
|
+
member = str.__new__(cls, value)
|
|
26
|
+
member._name_ = value
|
|
27
|
+
member._value_ = value
|
|
28
|
+
return member
|
|
@@ -6,3 +6,22 @@ class GetPatientPdfExportDownload(StrEnum):
|
|
|
6
6
|
|
|
7
7
|
def __str__(self) -> str:
|
|
8
8
|
return str(self.value)
|
|
9
|
+
|
|
10
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
11
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
12
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
13
|
+
# and is absent from list(GetPatientPdfExportDownload), which is how to tell it apart.
|
|
14
|
+
# A value that is not a string is a malformed response and still raises.
|
|
15
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
16
|
+
# in still raises and membership checks are unchanged.
|
|
17
|
+
@classmethod
|
|
18
|
+
def _from_value(cls, value: object) -> "GetPatientPdfExportDownload":
|
|
19
|
+
try:
|
|
20
|
+
return cls(value)
|
|
21
|
+
except ValueError:
|
|
22
|
+
if not isinstance(value, str):
|
|
23
|
+
raise
|
|
24
|
+
member = str.__new__(cls, value)
|
|
25
|
+
member._name_ = value
|
|
26
|
+
member._value_ = value
|
|
27
|
+
return member
|
|
@@ -76,7 +76,7 @@ class GetPatientPdfExportResponse200:
|
|
|
76
76
|
if isinstance(_status, Unset):
|
|
77
77
|
status = UNSET
|
|
78
78
|
else:
|
|
79
|
-
status = GetPatientPdfExportResponse200Status(_status)
|
|
79
|
+
status = GetPatientPdfExportResponse200Status._from_value(_status)
|
|
80
80
|
|
|
81
81
|
download_url = d.pop("downloadUrl", UNSET)
|
|
82
82
|
|
|
@@ -6,3 +6,22 @@ class GetPatientPdfExportResponse200Status(StrEnum):
|
|
|
6
6
|
|
|
7
7
|
def __str__(self) -> str:
|
|
8
8
|
return str(self.value)
|
|
9
|
+
|
|
10
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
11
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
12
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
13
|
+
# and is absent from list(GetPatientPdfExportResponse200Status), which is how to tell it apart.
|
|
14
|
+
# A value that is not a string is a malformed response and still raises.
|
|
15
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
16
|
+
# in still raises and membership checks are unchanged.
|
|
17
|
+
@classmethod
|
|
18
|
+
def _from_value(cls, value: object) -> "GetPatientPdfExportResponse200Status":
|
|
19
|
+
try:
|
|
20
|
+
return cls(value)
|
|
21
|
+
except ValueError:
|
|
22
|
+
if not isinstance(value, str):
|
|
23
|
+
raise
|
|
24
|
+
member = str.__new__(cls, value)
|
|
25
|
+
member._name_ = value
|
|
26
|
+
member._value_ = value
|
|
27
|
+
return member
|
|
@@ -42,7 +42,7 @@ class OAuthError:
|
|
|
42
42
|
@classmethod
|
|
43
43
|
def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
|
|
44
44
|
d = dict(src_dict)
|
|
45
|
-
error = OAuthErrorError(d.pop("error"))
|
|
45
|
+
error = OAuthErrorError._from_value(d.pop("error"))
|
|
46
46
|
|
|
47
47
|
error_description = d.pop("error_description", UNSET)
|
|
48
48
|
|
|
@@ -14,3 +14,22 @@ class OAuthErrorError(StrEnum):
|
|
|
14
14
|
|
|
15
15
|
def __str__(self) -> str:
|
|
16
16
|
return str(self.value)
|
|
17
|
+
|
|
18
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
19
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
20
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
21
|
+
# and is absent from list(OAuthErrorError), which is how to tell it apart.
|
|
22
|
+
# A value that is not a string is a malformed response and still raises.
|
|
23
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
24
|
+
# in still raises and membership checks are unchanged.
|
|
25
|
+
@classmethod
|
|
26
|
+
def _from_value(cls, value: object) -> "OAuthErrorError":
|
|
27
|
+
try:
|
|
28
|
+
return cls(value)
|
|
29
|
+
except ValueError:
|
|
30
|
+
if not isinstance(value, str):
|
|
31
|
+
raise
|
|
32
|
+
member = str.__new__(cls, value)
|
|
33
|
+
member._name_ = value
|
|
34
|
+
member._value_ = value
|
|
35
|
+
return member
|
|
@@ -16,16 +16,22 @@ class ProviderSeed:
|
|
|
16
16
|
Attributes:
|
|
17
17
|
name (str): Provider name, as the patient would recognize it.
|
|
18
18
|
phone (str | Unset): Optional contact, for a provider that isn't reachable electronically.
|
|
19
|
+
provider_ref (str | Unset): Your own id for this provider, echoed as `provider_ref` on every source that comes
|
|
20
|
+
from it, in GET /consents/{id} and in source webhooks. A source the patient added themselves has none. Must be
|
|
21
|
+
unique within the request.
|
|
19
22
|
"""
|
|
20
23
|
|
|
21
24
|
name: str
|
|
22
25
|
phone: str | Unset = UNSET
|
|
26
|
+
provider_ref: str | Unset = UNSET
|
|
23
27
|
|
|
24
28
|
def to_dict(self) -> dict[str, Any]:
|
|
25
29
|
name = self.name
|
|
26
30
|
|
|
27
31
|
phone = self.phone
|
|
28
32
|
|
|
33
|
+
provider_ref = self.provider_ref
|
|
34
|
+
|
|
29
35
|
field_dict: dict[str, Any] = {}
|
|
30
36
|
|
|
31
37
|
field_dict.update(
|
|
@@ -35,6 +41,8 @@ class ProviderSeed:
|
|
|
35
41
|
)
|
|
36
42
|
if phone is not UNSET:
|
|
37
43
|
field_dict["phone"] = phone
|
|
44
|
+
if provider_ref is not UNSET:
|
|
45
|
+
field_dict["provider_ref"] = provider_ref
|
|
38
46
|
|
|
39
47
|
return field_dict
|
|
40
48
|
|
|
@@ -45,9 +53,12 @@ class ProviderSeed:
|
|
|
45
53
|
|
|
46
54
|
phone = d.pop("phone", UNSET)
|
|
47
55
|
|
|
56
|
+
provider_ref = d.pop("provider_ref", UNSET)
|
|
57
|
+
|
|
48
58
|
provider_seed = cls(
|
|
49
59
|
name=name,
|
|
50
60
|
phone=phone,
|
|
61
|
+
provider_ref=provider_ref,
|
|
51
62
|
)
|
|
52
63
|
|
|
53
64
|
return provider_seed
|
|
@@ -60,7 +60,7 @@ class TokenRequest:
|
|
|
60
60
|
@classmethod
|
|
61
61
|
def from_dict(cls, src_dict: Mapping[str, Any]) -> Self:
|
|
62
62
|
d = dict(src_dict)
|
|
63
|
-
grant_type = TokenRequestGrantType(d.pop("grant_type"))
|
|
63
|
+
grant_type = TokenRequestGrantType._from_value(d.pop("grant_type"))
|
|
64
64
|
|
|
65
65
|
device_code = d.pop("device_code", UNSET)
|
|
66
66
|
|
|
@@ -9,3 +9,22 @@ class TokenRequestGrantType(StrEnum):
|
|
|
9
9
|
|
|
10
10
|
def __str__(self) -> str:
|
|
11
11
|
return str(self.value)
|
|
12
|
+
|
|
13
|
+
# How API responses are parsed. The API may add values to this enum without a
|
|
14
|
+
# new SDK release, so a value this version does not know becomes a member
|
|
15
|
+
# carrying the raw string instead of raising. It compares equal to that string
|
|
16
|
+
# and is absent from list(TokenRequestGrantType), which is how to tell it apart.
|
|
17
|
+
# A value that is not a string is a malformed response and still raises.
|
|
18
|
+
# Constructing the enum directly stays strict, so a typo in a value you pass
|
|
19
|
+
# in still raises and membership checks are unchanged.
|
|
20
|
+
@classmethod
|
|
21
|
+
def _from_value(cls, value: object) -> "TokenRequestGrantType":
|
|
22
|
+
try:
|
|
23
|
+
return cls(value)
|
|
24
|
+
except ValueError:
|
|
25
|
+
if not isinstance(value, str):
|
|
26
|
+
raise
|
|
27
|
+
member = str.__new__(cls, value)
|
|
28
|
+
member._name_ = value
|
|
29
|
+
member._value_ = value
|
|
30
|
+
return member
|
hubble_sdk/_hubble.py
CHANGED
|
@@ -106,8 +106,7 @@ class Hubble:
|
|
|
106
106
|
link. ``patient`` is a mapping of demographics
|
|
107
107
|
(``first_name``, ``last_name``, ``birth_date``, ``sex``, ``phone``,
|
|
108
108
|
``email``, and a nested ``address``); ``providers`` is a list of provider
|
|
109
|
-
seeds (each
|
|
110
|
-
list. The patient can add, change, or remove any of it on the link page."""
|
|
109
|
+
seeds (each shaped like ``ProviderSeed``) to prefill the patient's list. The patient can add, change, or remove any of it on the link page."""
|
|
111
110
|
body: dict[str, Any] = {}
|
|
112
111
|
if patient_ref is not None:
|
|
113
112
|
body["patient_ref"] = patient_ref
|
|
@@ -219,12 +218,18 @@ class Hubble:
|
|
|
219
218
|
"""Attach a customer-supplied, already-signed HIPAA authorization to a
|
|
220
219
|
consent and grant delegated retrieval from the providers it names.
|
|
221
220
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
discloser appears on it as a one-time
|
|
225
|
-
records are retrieved. Requires the
|
|
226
|
-
entitlement on your organization (a caller
|
|
227
|
-
wrapping the API's 403).
|
|
221
|
+
Hubble keeps a copy of the signed authorization on file and, based on your
|
|
222
|
+
attestation, makes the consent ``active`` right away with no patient step,
|
|
223
|
+
and returns the `Consent`. Each discloser appears on it as a one-time
|
|
224
|
+
source, ``pending`` until its records are retrieved. Requires the
|
|
225
|
+
``byo_hipaa_authorization`` entitlement on your organization (a caller
|
|
226
|
+
without it gets a `HubbleError` wrapping the API's 403).
|
|
227
|
+
|
|
228
|
+
Attaching an authorization is your organization's attestation that it
|
|
229
|
+
holds a valid HIPAA authorization signed by the patient, and that it
|
|
230
|
+
covers the providers you name. Hubble does not review the document or ask
|
|
231
|
+
the patient to confirm it, so your organization is responsible for
|
|
232
|
+
checking that the authorization is correct before you attach it.
|
|
228
233
|
|
|
229
234
|
Args:
|
|
230
235
|
authorization: the signed file to upload, as raw ``bytes`` or a
|
hubble_sdk/_webhooks.py
CHANGED
|
@@ -48,6 +48,9 @@ class WebhookEventSource:
|
|
|
48
48
|
provider: str
|
|
49
49
|
type: str # "live" | "one_time"
|
|
50
50
|
status: str # "available" | "pending" | "failed" | "revoked" (source.revoked only)
|
|
51
|
+
# Your ``provider_ref`` for the seeded provider this source came from; ``None``
|
|
52
|
+
# for a source the patient added, and on events emitted before the field existed.
|
|
53
|
+
provider_ref: str | None = None
|
|
51
54
|
|
|
52
55
|
|
|
53
56
|
@dataclass(frozen=True)
|
|
@@ -97,7 +100,11 @@ class WebhookEvent:
|
|
|
97
100
|
if not isinstance(s, dict):
|
|
98
101
|
return None
|
|
99
102
|
return WebhookEventSource(
|
|
100
|
-
id=s["id"],
|
|
103
|
+
id=s["id"],
|
|
104
|
+
provider=s["provider"],
|
|
105
|
+
type=s["type"],
|
|
106
|
+
status=s["status"],
|
|
107
|
+
provider_ref=s.get("provider_ref"),
|
|
101
108
|
)
|
|
102
109
|
|
|
103
110
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: hubble-sdk-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Python client for the Hubble Patient Access API.
|
|
5
5
|
Project-URL: Homepage, https://github.com/hubble-dot-ai/hubble-sdks
|
|
6
6
|
Project-URL: Repository, https://github.com/hubble-dot-ai/hubble-sdks
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
hubble_sdk/__init__.py,sha256=FV04hFDUzSKzqAXq3YJgZmmM5Yu9qbv-cIyjbLdfqsE,1335
|
|
2
|
-
hubble_sdk/_hubble.py,sha256=
|
|
3
|
-
hubble_sdk/_webhooks.py,sha256=
|
|
2
|
+
hubble_sdk/_hubble.py,sha256=3c-G7xABewysK1TAJFxf0WipXeuVrbFU5WS1Li3Kucc,20027
|
|
3
|
+
hubble_sdk/_webhooks.py,sha256=K3Zw3unBdTdiWSqZojBGniYpuTGxxMPRNNrCsBiYHUA,8111
|
|
4
4
|
hubble_sdk/_generated/__init__.py,sha256=vHzWGo0njcFBcxGMOUuCWyhYdJi_xldILX7pdrPzdYA,168
|
|
5
5
|
hubble_sdk/_generated/client.py,sha256=1T9SkCV9kmuiwOQqpXNCw9M1pQ94LV5q8FZGwuN0ftM,12438
|
|
6
6
|
hubble_sdk/_generated/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
|
|
7
7
|
hubble_sdk/_generated/types.py,sha256=0We4NPvhIYASRpQ3le41nmJeEAVm42-2VKdzlJ4Ogok,1343
|
|
8
8
|
hubble_sdk/_generated/api/__init__.py,sha256=zTSiG_ujSjAqWPyc435YXaX9XTlpMjiJWBbV-f-YtdA,45
|
|
9
9
|
hubble_sdk/_generated/api/default/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
10
|
-
hubble_sdk/_generated/api/default/attach_client_authorization.py,sha256=
|
|
10
|
+
hubble_sdk/_generated/api/default/attach_client_authorization.py,sha256=S9ZCl4gtmeeQ47GM7t_H1Pn3fM6CkD3D6mE3aIo3h1w,8713
|
|
11
11
|
hubble_sdk/_generated/api/default/create_consent_link.py,sha256=88KZtzq0cJ9hLZpNQqzpj2GjR0rmxzHTSWvqmMCGFW8,6377
|
|
12
12
|
hubble_sdk/_generated/api/default/exchange_token.py,sha256=86ysMEnY2jOUItEHEv06zeszFe4k2vxjn4h0nzvR8zk,5268
|
|
13
13
|
hubble_sdk/_generated/api/default/export_patient_fhir.py,sha256=1I6fJMmcuL2slxRt8FREc_Bve-g2p7NxyzAD6Um1Eoo,9683
|
|
@@ -20,37 +20,37 @@ hubble_sdk/_generated/api/default/revoke_consent.py,sha256=ocFu3svKMa-E2EKIPTE-J
|
|
|
20
20
|
hubble_sdk/_generated/models/__init__.py,sha256=cctoHG7YlQTWWYpVmdyti-nNfoi3tu1T-GgCqWxsdWg,2781
|
|
21
21
|
hubble_sdk/_generated/models/api_error.py,sha256=RrgLT6j31RWPbyMsgkFcu5DWaWi1aJooVL7C24gbGhw,780
|
|
22
22
|
hubble_sdk/_generated/models/attach_client_authorization_body.py,sha256=ur71Z-fbahmKaJ0r68fkpAvaAM2ShtR1xc2ypqeNmAY,3475
|
|
23
|
-
hubble_sdk/_generated/models/consent.py,sha256=
|
|
23
|
+
hubble_sdk/_generated/models/consent.py,sha256=YDtOmOjYbUHdNKAD1JPTGYkLBdGGPCEvPI0nCvq9Eyc,4464
|
|
24
24
|
hubble_sdk/_generated/models/consent_error.py,sha256=6FO1yRkKkpS7ENGBZeCExFqjugzhScYYDV-W9A4t47Y,1030
|
|
25
25
|
hubble_sdk/_generated/models/consent_link_request.py,sha256=nYSsXg-JuheH6cc3Vbbhuk1bjcmEaYxf7Syvl5GAFmw,3589
|
|
26
26
|
hubble_sdk/_generated/models/consent_list.py,sha256=YsZGsm7Ahh0bafpllLT1pf6pbkIK0yo4gpN5T0DjarM,1806
|
|
27
|
-
hubble_sdk/_generated/models/consent_source.py,sha256=
|
|
28
|
-
hubble_sdk/_generated/models/consent_source_status.py,sha256=
|
|
29
|
-
hubble_sdk/_generated/models/consent_source_type.py,sha256=
|
|
30
|
-
hubble_sdk/_generated/models/consent_status.py,sha256=
|
|
31
|
-
hubble_sdk/_generated/models/device_authorization_request.py,sha256=
|
|
27
|
+
hubble_sdk/_generated/models/consent_source.py,sha256=9Z9wl7ALBZD4ZkSV5BXLLtNMq15Nh0btPolLmSd30DE,2734
|
|
28
|
+
hubble_sdk/_generated/models/consent_source_status.py,sha256=Tj-9hWgiEKmVFCqdbuiX4okhCGFR2JAAxkfcfObQ7Js,1125
|
|
29
|
+
hubble_sdk/_generated/models/consent_source_type.py,sha256=lO5BJfcOHkvR2KF8crmMB1WkzEtZDMUostmG7ABTO-c,1065
|
|
30
|
+
hubble_sdk/_generated/models/consent_status.py,sha256=5m-j-NNSYaxCTmQPAoMCW62wB-mpnh6v7RQ9iohAUHI,1123
|
|
31
|
+
hubble_sdk/_generated/models/device_authorization_request.py,sha256=9YaJ6accYGReaEmffr1cbtjWWN9ePXhksu7vvl8Vsz8,6325
|
|
32
32
|
hubble_sdk/_generated/models/device_authorization_response.py,sha256=LWsLmhthCw_eRO_DaYrVdFPR8XTU6ZfS95FZYR2-DrY,2627
|
|
33
|
-
hubble_sdk/_generated/models/export_patient_fhir_prefer.py,sha256=
|
|
34
|
-
hubble_sdk/_generated/models/export_patient_fhir_response_202.py,sha256=
|
|
35
|
-
hubble_sdk/_generated/models/export_patient_fhir_response_202_status.py,sha256=
|
|
36
|
-
hubble_sdk/_generated/models/export_patient_pdf_prefer.py,sha256=
|
|
37
|
-
hubble_sdk/_generated/models/export_patient_pdf_response_202.py,sha256=
|
|
38
|
-
hubble_sdk/_generated/models/export_patient_pdf_response_202_status.py,sha256=
|
|
33
|
+
hubble_sdk/_generated/models/export_patient_fhir_prefer.py,sha256=cT0Bc-seiOxCYgnV47VV7iLOk5RU3rCkNzhXpyr_8V4,1075
|
|
34
|
+
hubble_sdk/_generated/models/export_patient_fhir_response_202.py,sha256=2yfuuHHr6J0Ml9JnfLDEpxKkJAcAVP_f3GbTtoEdrxM,3189
|
|
35
|
+
hubble_sdk/_generated/models/export_patient_fhir_response_202_status.py,sha256=5A344SfoyVesuQThsyYzG23BQcHHQGoKNZfEehDKoAo,1120
|
|
36
|
+
hubble_sdk/_generated/models/export_patient_pdf_prefer.py,sha256=5MtaZ9h9XJyWZjRIJc0p7VUN43oODvnLWlCeDJfRGB8,1072
|
|
37
|
+
hubble_sdk/_generated/models/export_patient_pdf_response_202.py,sha256=_XlYC28S8RSQAekleXjgsDxQoVLv_ssT2TS_8C9Pbts,3178
|
|
38
|
+
hubble_sdk/_generated/models/export_patient_pdf_response_202_status.py,sha256=Yp2LfC78CweiQ-bGzmwDWV9oAjGW-WLe1dxzmuzgENI,1117
|
|
39
39
|
hubble_sdk/_generated/models/fhir_resource.py,sha256=RWGpFkFgJVFdRleOKM8WTiFl4RFhM0wa_FjFVsaLvBI,1635
|
|
40
|
-
hubble_sdk/_generated/models/get_patient_pdf_export_download.py,sha256=
|
|
41
|
-
hubble_sdk/_generated/models/get_patient_pdf_export_response_200.py,sha256=
|
|
42
|
-
hubble_sdk/_generated/models/get_patient_pdf_export_response_200_status.py,sha256=
|
|
43
|
-
hubble_sdk/_generated/models/o_auth_error.py,sha256=
|
|
44
|
-
hubble_sdk/_generated/models/o_auth_error_error.py,sha256=
|
|
40
|
+
hubble_sdk/_generated/models/get_patient_pdf_export_download.py,sha256=rQLl2BwB6E1IeLdgTfkGPporcMmA_2sNrRyFfpzvNcg,1069
|
|
41
|
+
hubble_sdk/_generated/models/get_patient_pdf_export_response_200.py,sha256=zg5M3CP8xsiTPCulRwtRo8Unv4sJCCd-82KXW8iCia4,3513
|
|
42
|
+
hubble_sdk/_generated/models/get_patient_pdf_export_response_200_status.py,sha256=GjZMRlGGKsD6HUuYZhJVzCibIpbsJyyP9ph713PnQRk,1098
|
|
43
|
+
hubble_sdk/_generated/models/o_auth_error.py,sha256=2KdLBi8X-S8YVxCcwfFDoTFgE6UwOrWLp-QgHh5c8Zk,1264
|
|
44
|
+
hubble_sdk/_generated/models/o_auth_error_error.py,sha256=lUrrXD05v4YIA0HYtJF7-YZeqj6zBqbcRVy8XHSKRI8,1369
|
|
45
45
|
hubble_sdk/_generated/models/operation_outcome.py,sha256=aOvD-g-BDTDyvqOcsgk_DQHI3DKAG8DwWfR3-hutqAM,1902
|
|
46
46
|
hubble_sdk/_generated/models/operation_outcome_issue_item.py,sha256=wmV4n_E0880pwYchBbWH8f9PXRbR8atuzjK5Ep-54y0,1318
|
|
47
47
|
hubble_sdk/_generated/models/patient_address.py,sha256=IvLI1X4e8kGXZQXbuvrFs1dUBOpU7SARDrOq9um-BdI,1890
|
|
48
48
|
hubble_sdk/_generated/models/patient_demographics.py,sha256=igIRoU9SBKmnyEXjTJ_VIW-It19Z5y40Wn72wLZ6V5g,3000
|
|
49
|
-
hubble_sdk/_generated/models/provider_seed.py,sha256=
|
|
50
|
-
hubble_sdk/_generated/models/token_request.py,sha256=
|
|
51
|
-
hubble_sdk/_generated/models/token_request_grant_type.py,sha256=
|
|
49
|
+
hubble_sdk/_generated/models/provider_seed.py,sha256=z7sUoCR2FSt4eN7Fi-B_8VmMy32jCGqSZaY6-iPUQ4Y,1678
|
|
50
|
+
hubble_sdk/_generated/models/token_request.py,sha256=6gDAneGZQymGmK41_fpm0mwLoyz5kP_JokqWs-u0JRY,2403
|
|
51
|
+
hubble_sdk/_generated/models/token_request_grant_type.py,sha256=B0M3WPS5YhXOc4Cc9ZQXId4pjCtFGYwZ-Aofz2Cq6fk,1178
|
|
52
52
|
hubble_sdk/_generated/models/token_response.py,sha256=HORaPEpLNuPdCtGMlR-CXt8sQEYQH6gEp0gNTpQoFeE,2121
|
|
53
|
-
hubble_sdk_python-0.2.
|
|
54
|
-
hubble_sdk_python-0.2.
|
|
55
|
-
hubble_sdk_python-0.2.
|
|
56
|
-
hubble_sdk_python-0.2.
|
|
53
|
+
hubble_sdk_python-0.2.1.dist-info/METADATA,sha256=9T2LKfeJnN60-T3yDFJ3mB6FP3WiUrzJqXo0HnO7NCY,4947
|
|
54
|
+
hubble_sdk_python-0.2.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
55
|
+
hubble_sdk_python-0.2.1.dist-info/licenses/LICENSE,sha256=S8zTUFi7pK2HOg-wSn6bFAWbNAO4Lt1UiyDu_vcqO6w,1063
|
|
56
|
+
hubble_sdk_python-0.2.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|