skyflow-flowvault-python 1.0.0__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.
Files changed (202) hide show
  1. common/.coveragerc +4 -0
  2. common/__init__.py +3 -0
  3. common/client/__init__.py +0 -0
  4. common/client/base_skyflow.py +345 -0
  5. common/client/utils/__init__.py +1 -0
  6. common/client/utils/_utils.py +127 -0
  7. common/errors/__init__.py +1 -0
  8. common/errors/_skyflow_error.py +17 -0
  9. common/generated/__init__.py +0 -0
  10. common/generated/rest/__init__.py +24 -0
  11. common/generated/rest/authentication/__init__.py +4 -0
  12. common/generated/rest/authentication/client.py +181 -0
  13. common/generated/rest/authentication/raw_client.py +241 -0
  14. common/generated/rest/client.py +153 -0
  15. common/generated/rest/core/__init__.py +52 -0
  16. common/generated/rest/core/api_error.py +23 -0
  17. common/generated/rest/core/client_wrapper.py +86 -0
  18. common/generated/rest/core/datetime_utils.py +28 -0
  19. common/generated/rest/core/file.py +67 -0
  20. common/generated/rest/core/force_multipart.py +16 -0
  21. common/generated/rest/core/http_client.py +543 -0
  22. common/generated/rest/core/http_response.py +55 -0
  23. common/generated/rest/core/jsonable_encoder.py +100 -0
  24. common/generated/rest/core/pydantic_utilities.py +255 -0
  25. common/generated/rest/core/query_encoder.py +58 -0
  26. common/generated/rest/core/remove_none_from_dict.py +11 -0
  27. common/generated/rest/core/request_options.py +35 -0
  28. common/generated/rest/core/serialization.py +276 -0
  29. common/generated/rest/environment.py +8 -0
  30. common/generated/rest/errors/__init__.py +9 -0
  31. common/generated/rest/errors/bad_request_error.py +14 -0
  32. common/generated/rest/errors/not_found_error.py +14 -0
  33. common/generated/rest/errors/unauthorized_error.py +14 -0
  34. common/generated/rest/py.typed +0 -0
  35. common/generated/rest/types/__init__.py +9 -0
  36. common/generated/rest/types/googlerpc_status.py +22 -0
  37. common/generated/rest/types/protobuf_any.py +21 -0
  38. common/generated/rest/types/v_1_get_auth_token_response.py +33 -0
  39. common/generated/rest/version.py +6 -0
  40. common/service_account/__init__.py +1 -0
  41. common/service_account/_utils.py +248 -0
  42. common/service_account/client/__init__.py +0 -0
  43. common/service_account/client/auth_client.py +13 -0
  44. common/utils/__init__.py +4 -0
  45. common/utils/_helpers.py +18 -0
  46. common/utils/_skyflow_messages.py +445 -0
  47. common/utils/_utils.py +50 -0
  48. common/utils/constants.py +291 -0
  49. common/utils/enums/__init__.py +12 -0
  50. common/utils/enums/content_types.py +9 -0
  51. common/utils/enums/detect_entities.py +73 -0
  52. common/utils/enums/detect_output_transcriptions.py +8 -0
  53. common/utils/enums/env.py +13 -0
  54. common/utils/enums/log_level.py +8 -0
  55. common/utils/enums/masking_method.py +5 -0
  56. common/utils/enums/redaction_type.py +7 -0
  57. common/utils/enums/request_method.py +8 -0
  58. common/utils/enums/token_mode.py +6 -0
  59. common/utils/enums/token_type.py +6 -0
  60. common/utils/logger/__init__.py +2 -0
  61. common/utils/logger/_log_helpers.py +47 -0
  62. common/utils/logger/_logger.py +50 -0
  63. common/utils/validations/__init__.py +11 -0
  64. common/utils/validations/_validations.py +267 -0
  65. common/vault/base_vault_client.py +122 -0
  66. common/vault/base_vault_controller.py +58 -0
  67. common/vault/data/__init__.py +2 -0
  68. common/vault/data/_base_insert_request.py +7 -0
  69. common/vault/data/_base_insert_response.py +11 -0
  70. skyflow/__init__.py +2 -0
  71. skyflow/client/__init__.py +1 -0
  72. skyflow/client/_http_config_builder.py +45 -0
  73. skyflow/client/skyflow.py +15 -0
  74. skyflow/error/__init__.py +3 -0
  75. skyflow/generated/__init__.py +0 -0
  76. skyflow/generated/rest/__init__.py +164 -0
  77. skyflow/generated/rest/_default_clients.py +32 -0
  78. skyflow/generated/rest/client.py +385 -0
  79. skyflow/generated/rest/core/__init__.py +127 -0
  80. skyflow/generated/rest/core/api_error.py +23 -0
  81. skyflow/generated/rest/core/client_wrapper.py +148 -0
  82. skyflow/generated/rest/core/datetime_utils.py +70 -0
  83. skyflow/generated/rest/core/file.py +67 -0
  84. skyflow/generated/rest/core/force_multipart.py +18 -0
  85. skyflow/generated/rest/core/http_client.py +940 -0
  86. skyflow/generated/rest/core/http_response.py +63 -0
  87. skyflow/generated/rest/core/http_sse/__init__.py +42 -0
  88. skyflow/generated/rest/core/http_sse/_api.py +455 -0
  89. skyflow/generated/rest/core/http_sse/_decoders.py +74 -0
  90. skyflow/generated/rest/core/http_sse/_exceptions.py +7 -0
  91. skyflow/generated/rest/core/http_sse/_models.py +17 -0
  92. skyflow/generated/rest/core/jsonable_encoder.py +133 -0
  93. skyflow/generated/rest/core/logging.py +107 -0
  94. skyflow/generated/rest/core/parse_error.py +36 -0
  95. skyflow/generated/rest/core/pydantic_utilities.py +486 -0
  96. skyflow/generated/rest/core/query_encoder.py +58 -0
  97. skyflow/generated/rest/core/remove_none_from_dict.py +11 -0
  98. skyflow/generated/rest/core/request_options.py +40 -0
  99. skyflow/generated/rest/core/serialization.py +347 -0
  100. skyflow/generated/rest/environment.py +8 -0
  101. skyflow/generated/rest/errors/__init__.py +53 -0
  102. skyflow/generated/rest/errors/bad_request_error.py +11 -0
  103. skyflow/generated/rest/errors/forbidden_error.py +11 -0
  104. skyflow/generated/rest/errors/internal_server_error.py +11 -0
  105. skyflow/generated/rest/errors/not_found_error.py +11 -0
  106. skyflow/generated/rest/errors/too_many_requests_error.py +11 -0
  107. skyflow/generated/rest/errors/unauthorized_error.py +11 -0
  108. skyflow/generated/rest/py.typed +0 -0
  109. skyflow/generated/rest/query/__init__.py +4 -0
  110. skyflow/generated/rest/query/client.py +139 -0
  111. skyflow/generated/rest/query/raw_client.py +239 -0
  112. skyflow/generated/rest/raw_client.py +86 -0
  113. skyflow/generated/rest/records/__init__.py +34 -0
  114. skyflow/generated/rest/records/client.py +685 -0
  115. skyflow/generated/rest/records/raw_client.py +988 -0
  116. skyflow/generated/rest/records/types/__init__.py +34 -0
  117. skyflow/generated/rest/records/types/update_request_update_type.py +5 -0
  118. skyflow/generated/rest/tokens/__init__.py +4 -0
  119. skyflow/generated/rest/tokens/client.py +246 -0
  120. skyflow/generated/rest/tokens/raw_client.py +507 -0
  121. skyflow/generated/rest/types/__init__.py +116 -0
  122. skyflow/generated/rest/types/column_redactions.py +33 -0
  123. skyflow/generated/rest/types/delete_response.py +23 -0
  124. skyflow/generated/rest/types/delete_response_object.py +42 -0
  125. skyflow/generated/rest/types/detokenize_response.py +23 -0
  126. skyflow/generated/rest/types/detokenize_response_object.py +54 -0
  127. skyflow/generated/rest/types/error_response.py +20 -0
  128. skyflow/generated/rest/types/error_response_error.py +28 -0
  129. skyflow/generated/rest/types/execute_query_record_response.py +22 -0
  130. skyflow/generated/rest/types/execute_query_response.py +26 -0
  131. skyflow/generated/rest/types/execute_query_response_metadata.py +26 -0
  132. skyflow/generated/rest/types/get_request_data.py +60 -0
  133. skyflow/generated/rest/types/get_response.py +23 -0
  134. skyflow/generated/rest/types/get_tokens_from_values_request_object.py +30 -0
  135. skyflow/generated/rest/types/get_tokens_from_values_response.py +23 -0
  136. skyflow/generated/rest/types/google_protobuf_value.py +8 -0
  137. skyflow/generated/rest/types/http_code.py +6 -0
  138. skyflow/generated/rest/types/insert_record_data.py +36 -0
  139. skyflow/generated/rest/types/insert_response.py +23 -0
  140. skyflow/generated/rest/types/record_response_object.py +70 -0
  141. skyflow/generated/rest/types/token_group_redactions.py +33 -0
  142. skyflow/generated/rest/types/tokenize_response_object.py +49 -0
  143. skyflow/generated/rest/types/unique_value.py +22 -0
  144. skyflow/generated/rest/types/update_record_data.py +52 -0
  145. skyflow/generated/rest/types/update_record_data_update_type.py +5 -0
  146. skyflow/generated/rest/types/update_response.py +23 -0
  147. skyflow/generated/rest/types/upsert.py +45 -0
  148. skyflow/generated/rest/types/upsert_update_type.py +5 -0
  149. skyflow/generated/rest/version.py +6 -0
  150. skyflow/service_account/__init__.py +15 -0
  151. skyflow/utils/__init__.py +9 -0
  152. skyflow/utils/_http_config.py +36 -0
  153. skyflow/utils/_response_parsing.py +66 -0
  154. skyflow/utils/_retry.py +97 -0
  155. skyflow/utils/_skyflow_messages.py +114 -0
  156. skyflow/utils/_utils.py +54 -0
  157. skyflow/utils/_version.py +1 -0
  158. skyflow/utils/enums/__init__.py +3 -0
  159. skyflow/utils/enums/_custom_header_key.py +10 -0
  160. skyflow/utils/enums/_env_urls.py +9 -0
  161. skyflow/utils/enums/_upsert_type.py +7 -0
  162. skyflow/utils/validations/__init__.py +9 -0
  163. skyflow/utils/validations/_validations.py +195 -0
  164. skyflow/vault/__init__.py +0 -0
  165. skyflow/vault/client/__init__.py +0 -0
  166. skyflow/vault/client/client.py +102 -0
  167. skyflow/vault/controller/__init__.py +1 -0
  168. skyflow/vault/controller/_vault.py +475 -0
  169. skyflow/vault/data/__init__.py +30 -0
  170. skyflow/vault/data/_column_redactions.py +4 -0
  171. skyflow/vault/data/_delete_options.py +8 -0
  172. skyflow/vault/data/_delete_request.py +5 -0
  173. skyflow/vault/data/_delete_response.py +9 -0
  174. skyflow/vault/data/_delete_response_record.py +9 -0
  175. skyflow/vault/data/_detokenize_options.py +8 -0
  176. skyflow/vault/data/_detokenize_request.py +9 -0
  177. skyflow/vault/data/_detokenize_response.py +9 -0
  178. skyflow/vault/data/_detokenize_response_record.py +16 -0
  179. skyflow/vault/data/_detokenize_response_record_metadata.py +10 -0
  180. skyflow/vault/data/_get_options.py +8 -0
  181. skyflow/vault/data/_get_request.py +17 -0
  182. skyflow/vault/data/_get_request_record.py +13 -0
  183. skyflow/vault/data/_get_response.py +9 -0
  184. skyflow/vault/data/_get_response_record.py +17 -0
  185. skyflow/vault/data/_insert_options.py +8 -0
  186. skyflow/vault/data/_insert_request.py +11 -0
  187. skyflow/vault/data/_insert_request_record.py +9 -0
  188. skyflow/vault/data/_insert_response.py +9 -0
  189. skyflow/vault/data/_insert_response_record.py +17 -0
  190. skyflow/vault/data/_request_context.py +16 -0
  191. skyflow/vault/data/_token.py +8 -0
  192. skyflow/vault/data/_token_group_redactions.py +4 -0
  193. skyflow/vault/data/_update_options.py +8 -0
  194. skyflow/vault/data/_update_request.py +11 -0
  195. skyflow/vault/data/_update_request_record.py +6 -0
  196. skyflow/vault/data/_update_response.py +9 -0
  197. skyflow/vault/data/_update_response_record.py +17 -0
  198. skyflow/vault/data/_upsert_options.py +7 -0
  199. skyflow_flowvault_python-1.0.0.dist-info/METADATA +896 -0
  200. skyflow_flowvault_python-1.0.0.dist-info/RECORD +202 -0
  201. skyflow_flowvault_python-1.0.0.dist-info/WHEEL +5 -0
  202. skyflow_flowvault_python-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,133 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ """
4
+ jsonable_encoder converts a Python object to a JSON-friendly dict
5
+ (e.g. datetimes to strings, Pydantic models to dicts).
6
+
7
+ Taken from FastAPI, and made a bit simpler
8
+ https://github.com/tiangolo/fastapi/blob/master/fastapi/encoders.py
9
+ """
10
+
11
+ import base64
12
+ import dataclasses
13
+ import datetime as dt
14
+ from enum import Enum
15
+ from pathlib import PurePath
16
+ from types import GeneratorType
17
+ from typing import Any, Callable, Dict, List, Optional, Set, Union
18
+ from urllib.parse import quote
19
+
20
+ import pydantic
21
+ from .datetime_utils import serialize_datetime
22
+ from .pydantic_utilities import (
23
+ IS_PYDANTIC_V2,
24
+ encode_by_type,
25
+ to_jsonable_with_fallback,
26
+ )
27
+
28
+ SetIntStr = Set[Union[int, str]]
29
+ DictIntStrAny = Dict[Union[int, str], Any]
30
+
31
+
32
+ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any:
33
+ custom_encoder = custom_encoder or {}
34
+ # Generated SDKs use Ellipsis (`...`) as the sentinel value for "OMIT".
35
+ # OMIT values should be excluded from serialized payloads.
36
+ if obj is Ellipsis:
37
+ return None
38
+ if custom_encoder:
39
+ if type(obj) in custom_encoder:
40
+ return custom_encoder[type(obj)](obj)
41
+ else:
42
+ for encoder_type, encoder_instance in custom_encoder.items():
43
+ if isinstance(obj, encoder_type):
44
+ return encoder_instance(obj)
45
+ if isinstance(obj, pydantic.BaseModel):
46
+ if IS_PYDANTIC_V2:
47
+ encoder = getattr(obj.model_config, "json_encoders", {}) # type: ignore # Pydantic v2
48
+ else:
49
+ encoder = getattr(obj.__config__, "json_encoders", {}) # type: ignore # Pydantic v1
50
+ if custom_encoder:
51
+ encoder.update(custom_encoder)
52
+ obj_dict = obj.dict(by_alias=True)
53
+ if "__root__" in obj_dict:
54
+ obj_dict = obj_dict["__root__"]
55
+ if "root" in obj_dict:
56
+ obj_dict = obj_dict["root"]
57
+ return jsonable_encoder(obj_dict, custom_encoder=encoder)
58
+ if dataclasses.is_dataclass(obj):
59
+ obj_dict = dataclasses.asdict(obj) # type: ignore
60
+ return jsonable_encoder(obj_dict, custom_encoder=custom_encoder)
61
+ if isinstance(obj, bytes):
62
+ return base64.b64encode(obj).decode("utf-8")
63
+ if isinstance(obj, Enum):
64
+ return obj.value
65
+ if isinstance(obj, PurePath):
66
+ return str(obj)
67
+ if isinstance(obj, (str, int, float, type(None))):
68
+ return obj
69
+ if isinstance(obj, dt.datetime):
70
+ return serialize_datetime(obj)
71
+ if isinstance(obj, dt.date):
72
+ return str(obj)
73
+ if isinstance(obj, dict):
74
+ encoded_dict = {}
75
+ allowed_keys = set(obj.keys())
76
+ for key, value in obj.items():
77
+ if key in allowed_keys:
78
+ if value is Ellipsis:
79
+ continue
80
+ encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder)
81
+ encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder)
82
+ encoded_dict[encoded_key] = encoded_value
83
+ return encoded_dict
84
+ if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
85
+ encoded_list = []
86
+ for item in obj:
87
+ if item is Ellipsis:
88
+ continue
89
+ encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder))
90
+ return encoded_list
91
+
92
+ def fallback_serializer(o: Any) -> Any:
93
+ attempt_encode = encode_by_type(o)
94
+ if attempt_encode is not None:
95
+ return attempt_encode
96
+
97
+ try:
98
+ data = dict(o)
99
+ except Exception as e:
100
+ errors: List[Exception] = []
101
+ errors.append(e)
102
+ try:
103
+ data = vars(o)
104
+ except Exception as e:
105
+ errors.append(e)
106
+ raise ValueError(errors) from e
107
+ return jsonable_encoder(data, custom_encoder=custom_encoder)
108
+
109
+ return to_jsonable_with_fallback(obj, fallback_serializer)
110
+
111
+
112
+ def encode_path_param(obj: Any) -> str:
113
+ """Encode a value for use in a URL path segment.
114
+
115
+ Ensures proper string conversion for all types, including
116
+ booleans which need lowercase 'true'/'false' rather than
117
+ Python's 'True'/'False'.
118
+ """
119
+ if isinstance(obj, bool):
120
+ return "true" if obj else "false"
121
+ return str(jsonable_encoder(obj))
122
+
123
+
124
+ def quote_path_param(obj: Any) -> str:
125
+ """Encode a value for use in a URL path segment, percent-encoding it.
126
+
127
+ Same as encode_path_param, except the result is percent-encoded so
128
+ that a value containing "/" or ".." cannot change which endpoint
129
+ the request resolves to.
130
+ """
131
+ if isinstance(obj, bool):
132
+ return "true" if obj else "false"
133
+ return quote(str(jsonable_encoder(obj)), safe="")
@@ -0,0 +1,107 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import logging
4
+ import typing
5
+
6
+ LogLevel = typing.Literal["debug", "info", "warn", "error"]
7
+
8
+ _LOG_LEVEL_MAP: typing.Dict[LogLevel, int] = {
9
+ "debug": 1,
10
+ "info": 2,
11
+ "warn": 3,
12
+ "error": 4,
13
+ }
14
+
15
+
16
+ class ILogger(typing.Protocol):
17
+ def debug(self, message: str, **kwargs: typing.Any) -> None: ...
18
+ def info(self, message: str, **kwargs: typing.Any) -> None: ...
19
+ def warn(self, message: str, **kwargs: typing.Any) -> None: ...
20
+ def error(self, message: str, **kwargs: typing.Any) -> None: ...
21
+
22
+
23
+ class ConsoleLogger:
24
+ _logger: logging.Logger
25
+
26
+ def __init__(self) -> None:
27
+ self._logger = logging.getLogger("fern")
28
+ if not self._logger.handlers:
29
+ handler = logging.StreamHandler()
30
+ handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s"))
31
+ self._logger.addHandler(handler)
32
+ self._logger.setLevel(logging.DEBUG)
33
+
34
+ def debug(self, message: str, **kwargs: typing.Any) -> None:
35
+ self._logger.debug(message, extra=kwargs)
36
+
37
+ def info(self, message: str, **kwargs: typing.Any) -> None:
38
+ self._logger.info(message, extra=kwargs)
39
+
40
+ def warn(self, message: str, **kwargs: typing.Any) -> None:
41
+ self._logger.warning(message, extra=kwargs)
42
+
43
+ def error(self, message: str, **kwargs: typing.Any) -> None:
44
+ self._logger.error(message, extra=kwargs)
45
+
46
+
47
+ class LogConfig(typing.TypedDict, total=False):
48
+ level: LogLevel
49
+ logger: ILogger
50
+ silent: bool
51
+
52
+
53
+ class Logger:
54
+ _level: int
55
+ _logger: ILogger
56
+ _silent: bool
57
+
58
+ def __init__(self, *, level: LogLevel, logger: ILogger, silent: bool) -> None:
59
+ self._level = _LOG_LEVEL_MAP[level]
60
+ self._logger = logger
61
+ self._silent = silent
62
+
63
+ def _should_log(self, level: LogLevel) -> bool:
64
+ return not self._silent and self._level <= _LOG_LEVEL_MAP[level]
65
+
66
+ def is_debug(self) -> bool:
67
+ return self._should_log("debug")
68
+
69
+ def is_info(self) -> bool:
70
+ return self._should_log("info")
71
+
72
+ def is_warn(self) -> bool:
73
+ return self._should_log("warn")
74
+
75
+ def is_error(self) -> bool:
76
+ return self._should_log("error")
77
+
78
+ def debug(self, message: str, **kwargs: typing.Any) -> None:
79
+ if self.is_debug():
80
+ self._logger.debug(message, **kwargs)
81
+
82
+ def info(self, message: str, **kwargs: typing.Any) -> None:
83
+ if self.is_info():
84
+ self._logger.info(message, **kwargs)
85
+
86
+ def warn(self, message: str, **kwargs: typing.Any) -> None:
87
+ if self.is_warn():
88
+ self._logger.warn(message, **kwargs)
89
+
90
+ def error(self, message: str, **kwargs: typing.Any) -> None:
91
+ if self.is_error():
92
+ self._logger.error(message, **kwargs)
93
+
94
+
95
+ _default_logger: Logger = Logger(level="info", logger=ConsoleLogger(), silent=True)
96
+
97
+
98
+ def create_logger(config: typing.Optional[typing.Union[LogConfig, Logger]] = None) -> Logger:
99
+ if config is None:
100
+ return _default_logger
101
+ if isinstance(config, Logger):
102
+ return config
103
+ return Logger(
104
+ level=config.get("level", "info"),
105
+ logger=config.get("logger", ConsoleLogger()),
106
+ silent=config.get("silent", True),
107
+ )
@@ -0,0 +1,36 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from typing import Any, Dict, Optional
4
+
5
+
6
+ class ParsingError(Exception):
7
+ """
8
+ Raised when the SDK fails to parse/validate a response from the server.
9
+ This typically indicates that the server returned a response whose shape
10
+ does not match the expected schema.
11
+ """
12
+
13
+ headers: Optional[Dict[str, str]]
14
+ status_code: Optional[int]
15
+ body: Any
16
+ cause: Optional[Exception]
17
+
18
+ def __init__(
19
+ self,
20
+ *,
21
+ headers: Optional[Dict[str, str]] = None,
22
+ status_code: Optional[int] = None,
23
+ body: Any = None,
24
+ cause: Optional[Exception] = None,
25
+ ) -> None:
26
+ self.headers = headers
27
+ self.status_code = status_code
28
+ self.body = body
29
+ self.cause = cause
30
+ super().__init__()
31
+ if cause is not None:
32
+ self.__cause__ = cause
33
+
34
+ def __str__(self) -> str:
35
+ cause_str = f", cause: {self.cause}" if self.cause is not None else ""
36
+ return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}{cause_str}"