chalkpy 2.93.2__py3-none-any.whl → 2.93.4__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.
- chalk/_gen/chalk/server/v1/integrations_pb2.py +11 -9
- chalk/_gen/chalk/server/v1/integrations_pb2.pyi +32 -2
- chalk/_gen/chalk/server/v1/scheduler_pb2.py +12 -12
- chalk/_gen/chalk/server/v1/scheduler_pb2.pyi +11 -1
- chalk/_version.py +1 -1
- chalk/client/client.py +47 -0
- chalk/client/client_grpc.py +72 -0
- chalk/client/client_impl.py +64 -0
- chalk/features/_class_property.py +7 -0
- chalk/features/_embedding/embedding.py +1 -0
- chalk/features/_encoding/converter.py +9 -2
- chalk/features/feature_field.py +2 -4
- chalk/features/feature_set.py +1 -0
- chalk/features/feature_set_decorator.py +34 -1
- chalk/features/feature_wrapper.py +42 -3
- chalk/features/resolver.py +12 -22
- chalk/parsed/duplicate_input_gql.py +2 -0
- chalk/parsed/json_conversions.py +2 -0
- chalk/queries/scheduled_query.py +5 -0
- chalk/sql/_internal/sql_file_resolver.py +31 -3
- {chalkpy-2.93.2.dist-info → chalkpy-2.93.4.dist-info}/METADATA +1 -1
- {chalkpy-2.93.2.dist-info → chalkpy-2.93.4.dist-info}/RECORD +25 -25
- {chalkpy-2.93.2.dist-info → chalkpy-2.93.4.dist-info}/WHEEL +0 -0
- {chalkpy-2.93.2.dist-info → chalkpy-2.93.4.dist-info}/entry_points.txt +0 -0
- {chalkpy-2.93.2.dist-info → chalkpy-2.93.4.dist-info}/top_level.txt +0 -0
|
@@ -20,7 +20,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
23
|
-
b'\n"chalk/server/v1/integrations.proto\x12\x0f\x63halk.server.v1\x1a\x19\x63halk/auth/v1/audit.proto\x1a\x1f\x63halk/auth/v1/permissions.proto\x1a)chalk/server/v1/environment_secrets.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x92\x02\n\x0bIntegration\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x34\n\x04kind\x18\x03 \x01(\x0e\x32 .chalk.server.v1.IntegrationKindR\x04kind\x12%\n\x0e\x65nvironment_id\x18\x04 \x01(\tR\renvironmentId\x12\x39\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAtB\x07\n\x05_name"\x94\x01\n\x16IntegrationWithSecrets\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration\x12:\n\x07secrets\x18\x02 \x03(\x0b\x32 .chalk.server.v1.SecretWithValueR\x07secrets"\x19\n\x17ListIntegrationsRequest"\\\n\x18ListIntegrationsResponse\x12@\n\x0cintegrations\x18\x01 \x03(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0cintegrations"=\n!ListIntegrationsAndSecretsRequest\x12\x18\n\x07\x64\x65\x63rypt\x18\x01 \x01(\x08R\x07\x64\x65\x63rypt"\xba\x01\n"ListIntegrationsAndSecretsResponse\x12K\n\x0cintegrations\x18\x01 \x03(\x0b\x32\'.chalk.server.v1.IntegrationWithSecretsR\x0cintegrations\x12G\n\x0e\x63ustom_secrets\x18\x02 \x03(\x0b\x32 .chalk.server.v1.SecretWithValueR\rcustomSecrets"d\n\x1aGetIntegrationValueRequest\x12%\n\x0eintegration_id\x18\x01 \x01(\tR\rintegrationId\x12\x1f\n\x0bsecret_name\x18\x02 \x01(\tR\nsecretName"r\n\x1bGetIntegrationValueResponse\x12\x43\n\x0bsecretvalue\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.SecretValueH\x00R\x0bsecretvalue\x88\x01\x01\x42\x0e\n\x0c_secretvalue">\n\x15GetIntegrationRequest\x12%\n\x0eintegration_id\x18\x01 \x01(\tR\rintegrationId"\x9d\x01\n\x16GetIntegrationResponse\x12\x66\n\x18integration_with_secrets\x18\x01 \x01(\x0b\x32\'.chalk.server.v1.IntegrationWithSecretsH\x00R\x16integrationWithSecrets\x88\x01\x01\x42\x1b\n\x19_integration_with_secrets"\xbe\x02\n\x18InsertIntegrationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12K\n\x10integration_kind\x18\x02 \x01(\x0e\x32 .chalk.server.v1.IntegrationKindR\x0fintegrationKind\x12x\n\x15\x65nvironment_variables\x18\x03 \x03(\x0b\x32\x43.chalk.server.v1.InsertIntegrationRequest.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01"[\n\x19InsertIntegrationResponse\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration"\x98\x02\n\x18UpdateIntegrationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0eintegration_id\x18\x02 \x01(\tR\rintegrationId\x12x\n\x15\x65nvironment_variables\x18\x03 \x03(\x0b\x32\x43.chalk.server.v1.UpdateIntegrationRequest.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01"[\n\x19UpdateIntegrationResponse\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration"*\n\x18\x44\x65leteIntegrationRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x1b\n\x19\x44\x65leteIntegrationResponse"\
|
|
23
|
+
b'\n"chalk/server/v1/integrations.proto\x12\x0f\x63halk.server.v1\x1a\x19\x63halk/auth/v1/audit.proto\x1a\x1f\x63halk/auth/v1/permissions.proto\x1a)chalk/server/v1/environment_secrets.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\x92\x02\n\x0bIntegration\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x34\n\x04kind\x18\x03 \x01(\x0e\x32 .chalk.server.v1.IntegrationKindR\x04kind\x12%\n\x0e\x65nvironment_id\x18\x04 \x01(\tR\renvironmentId\x12\x39\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAtB\x07\n\x05_name"\x94\x01\n\x16IntegrationWithSecrets\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration\x12:\n\x07secrets\x18\x02 \x03(\x0b\x32 .chalk.server.v1.SecretWithValueR\x07secrets"\x19\n\x17ListIntegrationsRequest"\\\n\x18ListIntegrationsResponse\x12@\n\x0cintegrations\x18\x01 \x03(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0cintegrations"=\n!ListIntegrationsAndSecretsRequest\x12\x18\n\x07\x64\x65\x63rypt\x18\x01 \x01(\x08R\x07\x64\x65\x63rypt"\xba\x01\n"ListIntegrationsAndSecretsResponse\x12K\n\x0cintegrations\x18\x01 \x03(\x0b\x32\'.chalk.server.v1.IntegrationWithSecretsR\x0cintegrations\x12G\n\x0e\x63ustom_secrets\x18\x02 \x03(\x0b\x32 .chalk.server.v1.SecretWithValueR\rcustomSecrets"d\n\x1aGetIntegrationValueRequest\x12%\n\x0eintegration_id\x18\x01 \x01(\tR\rintegrationId\x12\x1f\n\x0bsecret_name\x18\x02 \x01(\tR\nsecretName"r\n\x1bGetIntegrationValueResponse\x12\x43\n\x0bsecretvalue\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.SecretValueH\x00R\x0bsecretvalue\x88\x01\x01\x42\x0e\n\x0c_secretvalue">\n\x15GetIntegrationRequest\x12%\n\x0eintegration_id\x18\x01 \x01(\tR\rintegrationId"\x9d\x01\n\x16GetIntegrationResponse\x12\x66\n\x18integration_with_secrets\x18\x01 \x01(\x0b\x32\'.chalk.server.v1.IntegrationWithSecretsH\x00R\x16integrationWithSecrets\x88\x01\x01\x42\x1b\n\x19_integration_with_secrets"\xbe\x02\n\x18InsertIntegrationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12K\n\x10integration_kind\x18\x02 \x01(\x0e\x32 .chalk.server.v1.IntegrationKindR\x0fintegrationKind\x12x\n\x15\x65nvironment_variables\x18\x03 \x03(\x0b\x32\x43.chalk.server.v1.InsertIntegrationRequest.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01"[\n\x19InsertIntegrationResponse\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration"\x98\x02\n\x18UpdateIntegrationRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0eintegration_id\x18\x02 \x01(\tR\rintegrationId\x12x\n\x15\x65nvironment_variables\x18\x03 \x03(\x0b\x32\x43.chalk.server.v1.UpdateIntegrationRequest.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01"[\n\x19UpdateIntegrationResponse\x12>\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1c.chalk.server.v1.IntegrationR\x0bintegration"*\n\x18\x44\x65leteIntegrationRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id"\x1b\n\x19\x44\x65leteIntegrationResponse"\xd7\x01\n\x10PreviewedMessage\x12!\n\x0cvalue_base64\x18\x01 \x01(\tR\x0bvalueBase64\x12"\n\nkey_base64\x18\x02 \x01(\tH\x00R\tkeyBase64\x88\x01\x01\x12\x14\n\x05topic\x18\x03 \x01(\tR\x05topic\x12\x1c\n\tpartition\x18\x04 \x01(\tR\tpartition\x12\x16\n\x06offset\x18\x05 \x01(\tR\x06offset\x12!\n\x0ctimestamp_ms\x18\x06 \x01(\x03R\x0btimestampMsB\r\n\x0b_key_base64"\x90\x03\n\x16TestIntegrationRequest\x12\x34\n\x04kind\x18\x01 \x01(\x0e\x32 .chalk.server.v1.IntegrationKindR\x04kind\x12v\n\x15\x65nvironment_variables\x18\x02 \x03(\x0b\x32\x41.chalk.server.v1.TestIntegrationRequest.EnvironmentVariablesEntryR\x14\x65nvironmentVariables\x12*\n\x0eintegration_id\x18\x03 \x01(\tH\x00R\rintegrationId\x88\x01\x01\x12,\n\x0finclude_preview\x18\x04 \x01(\x08H\x01R\x0eincludePreview\x88\x01\x01\x1aG\n\x19\x45nvironmentVariablesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x11\n\x0f_integration_idB\x12\n\x10_include_preview"\xf1\x01\n\x17TestIntegrationResponse\x12\x12\n\x04kind\x18\x01 \x01(\tR\x04kind\x12\x18\n\x07success\x18\x02 \x01(\x08R\x07success\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12,\n\x0flatency_seconds\x18\x04 \x01(\x01H\x00R\x0elatencySeconds\x88\x01\x01\x12L\n\x10preview_messages\x18\x05 \x03(\x0b\x32!.chalk.server.v1.PreviewedMessageR\x0fpreviewMessagesB\x12\n\x10_latency_seconds*\xe7\x04\n\x0fIntegrationKind\x12 \n\x1cINTEGRATION_KIND_UNSPECIFIED\x10\x00\x12\x1b\n\x17INTEGRATION_KIND_ATHENA\x10\x01\x12\x18\n\x14INTEGRATION_KIND_AWS\x10\x02\x12\x1d\n\x19INTEGRATION_KIND_BIGQUERY\x10\x03\x12\x1f\n\x1bINTEGRATION_KIND_CLICKHOUSE\x10\x04\x12\x1b\n\x17INTEGRATION_KIND_COHERE\x10\x05\x12\x1f\n\x1bINTEGRATION_KIND_DATABRICKS\x10\x06\x12\x1d\n\x19INTEGRATION_KIND_DYNAMODB\x10\x07\x12\x18\n\x14INTEGRATION_KIND_GCP\x10\x08\x12\x1a\n\x16INTEGRATION_KIND_KAFKA\x10\t\x12\x1c\n\x18INTEGRATION_KIND_KINESIS\x10\n\x12\x1a\n\x16INTEGRATION_KIND_MYSQL\x10\x0b\x12\x1b\n\x17INTEGRATION_KIND_OPENAI\x10\x0c\x12\x1f\n\x1bINTEGRATION_KIND_POSTGRESQL\x10\r\x12\x1b\n\x17INTEGRATION_KIND_PUBSUB\x10\x0e\x12\x1d\n\x19INTEGRATION_KIND_REDSHIFT\x10\x0f\x12\x1e\n\x1aINTEGRATION_KIND_SNOWFLAKE\x10\x10\x12\x1c\n\x18INTEGRATION_KIND_SPANNER\x10\x11\x12\x1a\n\x16INTEGRATION_KIND_TRINO\x10\x12\x12\x1a\n\x16INTEGRATION_KIND_MSSQL\x10\x13\x32\xbf\x07\n\x13IntegrationsService\x12l\n\x10ListIntegrations\x12(.chalk.server.v1.ListIntegrationsRequest\x1a).chalk.server.v1.ListIntegrationsResponse"\x03\x80}\x14\x12\x8a\x01\n\x1aListIntegrationsAndSecrets\x12\x32.chalk.server.v1.ListIntegrationsAndSecretsRequest\x1a\x33.chalk.server.v1.ListIntegrationsAndSecretsResponse"\x03\x80}\x13\x12u\n\x13GetIntegrationValue\x12+.chalk.server.v1.GetIntegrationValueRequest\x1a,.chalk.server.v1.GetIntegrationValueResponse"\x03\x80}\x13\x12\x66\n\x0eGetIntegration\x12&.chalk.server.v1.GetIntegrationRequest\x1a\'.chalk.server.v1.GetIntegrationResponse"\x03\x80}\x13\x12u\n\x11InsertIntegration\x12).chalk.server.v1.InsertIntegrationRequest\x1a*.chalk.server.v1.InsertIntegrationResponse"\t\x80}\x12\x8a\xd3\x0e\x02\x08\x02\x12u\n\x11UpdateIntegration\x12).chalk.server.v1.UpdateIntegrationRequest\x1a*.chalk.server.v1.UpdateIntegrationResponse"\t\x80}\x12\x8a\xd3\x0e\x02\x08\x02\x12u\n\x11\x44\x65leteIntegration\x12).chalk.server.v1.DeleteIntegrationRequest\x1a*.chalk.server.v1.DeleteIntegrationResponse"\t\x80}\x12\x8a\xd3\x0e\x02\x08\x02\x12i\n\x0fTestIntegration\x12\'.chalk.server.v1.TestIntegrationRequest\x1a(.chalk.server.v1.TestIntegrationResponse"\x03\x80}\x14\x42\x9a\x01\n\x13\x63om.chalk.server.v1B\x11IntegrationsProtoP\x01Z\x12server/v1;serverv1\xa2\x02\x03\x43SX\xaa\x02\x0f\x43halk.Server.V1\xca\x02\x0f\x43halk\\Server\\V1\xe2\x02\x1b\x43halk\\Server\\V1\\GPBMetadata\xea\x02\x11\x43halk::Server::V1b\x06proto3'
|
|
24
24
|
)
|
|
25
25
|
|
|
26
26
|
_globals = globals()
|
|
@@ -59,8 +59,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
59
59
|
]._serialized_options = b"\200}\022\212\323\016\002\010\002"
|
|
60
60
|
_globals["_INTEGRATIONSSERVICE"].methods_by_name["TestIntegration"]._options = None
|
|
61
61
|
_globals["_INTEGRATIONSSERVICE"].methods_by_name["TestIntegration"]._serialized_options = b"\200}\024"
|
|
62
|
-
_globals["_INTEGRATIONKIND"]._serialized_start =
|
|
63
|
-
_globals["_INTEGRATIONKIND"]._serialized_end =
|
|
62
|
+
_globals["_INTEGRATIONKIND"]._serialized_start = 3163
|
|
63
|
+
_globals["_INTEGRATIONKIND"]._serialized_end = 3778
|
|
64
64
|
_globals["_INTEGRATION"]._serialized_start = 192
|
|
65
65
|
_globals["_INTEGRATION"]._serialized_end = 466
|
|
66
66
|
_globals["_INTEGRATIONWITHSECRETS"]._serialized_start = 469
|
|
@@ -97,12 +97,14 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
97
97
|
_globals["_DELETEINTEGRATIONREQUEST"]._serialized_end = 2266
|
|
98
98
|
_globals["_DELETEINTEGRATIONRESPONSE"]._serialized_start = 2268
|
|
99
99
|
_globals["_DELETEINTEGRATIONRESPONSE"]._serialized_end = 2295
|
|
100
|
-
_globals["
|
|
101
|
-
_globals["
|
|
100
|
+
_globals["_PREVIEWEDMESSAGE"]._serialized_start = 2298
|
|
101
|
+
_globals["_PREVIEWEDMESSAGE"]._serialized_end = 2513
|
|
102
|
+
_globals["_TESTINTEGRATIONREQUEST"]._serialized_start = 2516
|
|
103
|
+
_globals["_TESTINTEGRATIONREQUEST"]._serialized_end = 2916
|
|
102
104
|
_globals["_TESTINTEGRATIONREQUEST_ENVIRONMENTVARIABLESENTRY"]._serialized_start = 1682
|
|
103
105
|
_globals["_TESTINTEGRATIONREQUEST_ENVIRONMENTVARIABLESENTRY"]._serialized_end = 1753
|
|
104
|
-
_globals["_TESTINTEGRATIONRESPONSE"]._serialized_start =
|
|
105
|
-
_globals["_TESTINTEGRATIONRESPONSE"]._serialized_end =
|
|
106
|
-
_globals["_INTEGRATIONSSERVICE"]._serialized_start =
|
|
107
|
-
_globals["_INTEGRATIONSSERVICE"]._serialized_end =
|
|
106
|
+
_globals["_TESTINTEGRATIONRESPONSE"]._serialized_start = 2919
|
|
107
|
+
_globals["_TESTINTEGRATIONRESPONSE"]._serialized_end = 3160
|
|
108
|
+
_globals["_INTEGRATIONSSERVICE"]._serialized_start = 3781
|
|
109
|
+
_globals["_INTEGRATIONSSERVICE"]._serialized_end = 4740
|
|
108
110
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -220,8 +220,32 @@ class DeleteIntegrationResponse(_message.Message):
|
|
|
220
220
|
__slots__ = ()
|
|
221
221
|
def __init__(self) -> None: ...
|
|
222
222
|
|
|
223
|
+
class PreviewedMessage(_message.Message):
|
|
224
|
+
__slots__ = ("value_base64", "key_base64", "topic", "partition", "offset", "timestamp_ms")
|
|
225
|
+
VALUE_BASE64_FIELD_NUMBER: _ClassVar[int]
|
|
226
|
+
KEY_BASE64_FIELD_NUMBER: _ClassVar[int]
|
|
227
|
+
TOPIC_FIELD_NUMBER: _ClassVar[int]
|
|
228
|
+
PARTITION_FIELD_NUMBER: _ClassVar[int]
|
|
229
|
+
OFFSET_FIELD_NUMBER: _ClassVar[int]
|
|
230
|
+
TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
|
|
231
|
+
value_base64: str
|
|
232
|
+
key_base64: str
|
|
233
|
+
topic: str
|
|
234
|
+
partition: str
|
|
235
|
+
offset: str
|
|
236
|
+
timestamp_ms: int
|
|
237
|
+
def __init__(
|
|
238
|
+
self,
|
|
239
|
+
value_base64: _Optional[str] = ...,
|
|
240
|
+
key_base64: _Optional[str] = ...,
|
|
241
|
+
topic: _Optional[str] = ...,
|
|
242
|
+
partition: _Optional[str] = ...,
|
|
243
|
+
offset: _Optional[str] = ...,
|
|
244
|
+
timestamp_ms: _Optional[int] = ...,
|
|
245
|
+
) -> None: ...
|
|
246
|
+
|
|
223
247
|
class TestIntegrationRequest(_message.Message):
|
|
224
|
-
__slots__ = ("kind", "environment_variables", "integration_id")
|
|
248
|
+
__slots__ = ("kind", "environment_variables", "integration_id", "include_preview")
|
|
225
249
|
class EnvironmentVariablesEntry(_message.Message):
|
|
226
250
|
__slots__ = ("key", "value")
|
|
227
251
|
KEY_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -233,30 +257,36 @@ class TestIntegrationRequest(_message.Message):
|
|
|
233
257
|
KIND_FIELD_NUMBER: _ClassVar[int]
|
|
234
258
|
ENVIRONMENT_VARIABLES_FIELD_NUMBER: _ClassVar[int]
|
|
235
259
|
INTEGRATION_ID_FIELD_NUMBER: _ClassVar[int]
|
|
260
|
+
INCLUDE_PREVIEW_FIELD_NUMBER: _ClassVar[int]
|
|
236
261
|
kind: IntegrationKind
|
|
237
262
|
environment_variables: _containers.ScalarMap[str, str]
|
|
238
263
|
integration_id: str
|
|
264
|
+
include_preview: bool
|
|
239
265
|
def __init__(
|
|
240
266
|
self,
|
|
241
267
|
kind: _Optional[_Union[IntegrationKind, str]] = ...,
|
|
242
268
|
environment_variables: _Optional[_Mapping[str, str]] = ...,
|
|
243
269
|
integration_id: _Optional[str] = ...,
|
|
270
|
+
include_preview: bool = ...,
|
|
244
271
|
) -> None: ...
|
|
245
272
|
|
|
246
273
|
class TestIntegrationResponse(_message.Message):
|
|
247
|
-
__slots__ = ("kind", "success", "message", "latency_seconds")
|
|
274
|
+
__slots__ = ("kind", "success", "message", "latency_seconds", "preview_messages")
|
|
248
275
|
KIND_FIELD_NUMBER: _ClassVar[int]
|
|
249
276
|
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
250
277
|
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
|
251
278
|
LATENCY_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
|
279
|
+
PREVIEW_MESSAGES_FIELD_NUMBER: _ClassVar[int]
|
|
252
280
|
kind: str
|
|
253
281
|
success: bool
|
|
254
282
|
message: str
|
|
255
283
|
latency_seconds: float
|
|
284
|
+
preview_messages: _containers.RepeatedCompositeFieldContainer[PreviewedMessage]
|
|
256
285
|
def __init__(
|
|
257
286
|
self,
|
|
258
287
|
kind: _Optional[str] = ...,
|
|
259
288
|
success: bool = ...,
|
|
260
289
|
message: _Optional[str] = ...,
|
|
261
290
|
latency_seconds: _Optional[float] = ...,
|
|
291
|
+
preview_messages: _Optional[_Iterable[_Union[PreviewedMessage, _Mapping]]] = ...,
|
|
262
292
|
) -> None: ...
|
|
@@ -21,7 +21,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
24
|
-
b'\n\x1f\x63halk/server/v1/scheduler.proto\x12\x0f\x63halk.server.v1\x1a\x1f\x63halk/auth/v1/permissions.proto\x1a\x1b\x63halk/server/v1/batch.proto\x1a)chalk/server/v1/scheduled_query_run.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xfe\x05\n\x0f\x43ronResolverRun\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12!\n\x0cresolver_fqn\x18\x03 \x01(\tR\x0bresolverFqn\x12\x12\n\x04kind\x18\x04 \x01(\tR\x04kind\x12+\n\x11schedule_readable\x18\x05 \x01(\tR\x10scheduleReadable\x12\x36\n\x17schedule_resolver_value\x18\x06 \x01(\tR\x15scheduleResolverValue\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12(\n\rdeployment_id\x18\x08 \x01(\tH\x00R\x0c\x64\x65ploymentId\x88\x01\x01\x12\x31\n\x03\x65nd\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x03\x65nd\x88\x01\x01\x12:\n\x05\x62\x61tch\x18\n \x01(\x0b\x32\x1f.chalk.server.v1.BatchOperationH\x02R\x05\x62\x61tch\x88\x01\x01\x12\x46\n\x0ctrigger_kind\x18\x0b \x01(\x0e\x32#.chalk.server.v1.CronRunTriggerKindR\x0btriggerKind\x12@\n\x0blower_bound\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\nlowerBound\x88\x01\x01\x12@\n\x0bupper_bound\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\nupperBound\x88\x01\x01\x12$\n\x0bmax_samples\x18\x0e \x01(\x03H\x05R\nmaxSamples\x88\x01\x01\x42\x10\n\x0e_deployment_idB\x06\n\x04_endB\x08\n\x06_batchB\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_boundB\x0e\n\x0c_max_samples"\x9d\x03\n ManualTriggerCronResolverRequest\x12!\n\x0cresolver_fqn\x18\x01 \x01(\tR\x0bresolverFqn\x12$\n\x0bmax_samples\x18\x02 \x01(\x03H\x00R\nmaxSamples\x88\x01\x01\x12@\n\x0blower_bound\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nlowerBound\x88\x01\x01\x12@\n\x0bupper_bound\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\nupperBound\x88\x01\x01\x12\x30\n\x11timestamping_mode\x18\x06 \x01(\tH\x03R\x10timestampingMode\x88\x01\x01\x12$\n\x0bjob_options\x18\x07 \x01(\tH\x04R\njobOptions\x88\x01\x01\x42\x0e\n\x0c_max_samplesB\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_boundB\x14\n\x12_timestamping_modeB\x0e\n\x0c_job_options"q\n!ManualTriggerCronResolverResponse\x12L\n\x11\x63ron_resolver_run\x18\x01 \x01(\x0b\x32 .chalk.server.v1.CronResolverRunR\x0f\x63ronResolverRun"\
|
|
24
|
+
b'\n\x1f\x63halk/server/v1/scheduler.proto\x12\x0f\x63halk.server.v1\x1a\x1f\x63halk/auth/v1/permissions.proto\x1a\x1b\x63halk/server/v1/batch.proto\x1a)chalk/server/v1/scheduled_query_run.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto"\xfe\x05\n\x0f\x43ronResolverRun\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12%\n\x0e\x65nvironment_id\x18\x02 \x01(\tR\renvironmentId\x12!\n\x0cresolver_fqn\x18\x03 \x01(\tR\x0bresolverFqn\x12\x12\n\x04kind\x18\x04 \x01(\tR\x04kind\x12+\n\x11schedule_readable\x18\x05 \x01(\tR\x10scheduleReadable\x12\x36\n\x17schedule_resolver_value\x18\x06 \x01(\tR\x15scheduleResolverValue\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12(\n\rdeployment_id\x18\x08 \x01(\tH\x00R\x0c\x64\x65ploymentId\x88\x01\x01\x12\x31\n\x03\x65nd\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\x03\x65nd\x88\x01\x01\x12:\n\x05\x62\x61tch\x18\n \x01(\x0b\x32\x1f.chalk.server.v1.BatchOperationH\x02R\x05\x62\x61tch\x88\x01\x01\x12\x46\n\x0ctrigger_kind\x18\x0b \x01(\x0e\x32#.chalk.server.v1.CronRunTriggerKindR\x0btriggerKind\x12@\n\x0blower_bound\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03R\nlowerBound\x88\x01\x01\x12@\n\x0bupper_bound\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\nupperBound\x88\x01\x01\x12$\n\x0bmax_samples\x18\x0e \x01(\x03H\x05R\nmaxSamples\x88\x01\x01\x42\x10\n\x0e_deployment_idB\x06\n\x04_endB\x08\n\x06_batchB\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_boundB\x0e\n\x0c_max_samples"\x9d\x03\n ManualTriggerCronResolverRequest\x12!\n\x0cresolver_fqn\x18\x01 \x01(\tR\x0bresolverFqn\x12$\n\x0bmax_samples\x18\x02 \x01(\x03H\x00R\nmaxSamples\x88\x01\x01\x12@\n\x0blower_bound\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nlowerBound\x88\x01\x01\x12@\n\x0bupper_bound\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\nupperBound\x88\x01\x01\x12\x30\n\x11timestamping_mode\x18\x06 \x01(\tH\x03R\x10timestampingMode\x88\x01\x01\x12$\n\x0bjob_options\x18\x07 \x01(\tH\x04R\njobOptions\x88\x01\x01\x42\x0e\n\x0c_max_samplesB\x0e\n\x0c_lower_boundB\x0e\n\x0c_upper_boundB\x14\n\x12_timestamping_modeB\x0e\n\x0c_job_options"q\n!ManualTriggerCronResolverResponse\x12L\n\x11\x63ron_resolver_run\x18\x01 \x01(\x0b\x32 .chalk.server.v1.CronResolverRunR\x0f\x63ronResolverRun"\xf0\x04\n"ManualTriggerScheduledQueryRequest\x12"\n\rcron_query_id\x18\x01 \x01(\x03R\x0b\x63ronQueryId\x12p\n\x0fplanner_options\x18\x02 \x03(\x0b\x32G.chalk.server.v1.ManualTriggerScheduledQueryRequest.PlannerOptionsEntryR\x0eplannerOptions\x12\x33\n\x15incremental_resolvers\x18\x03 \x03(\tR\x14incrementalResolvers\x12$\n\x0bmax_samples\x18\x04 \x01(\x03H\x01R\nmaxSamples\x88\x01\x01\x12j\n\renv_overrides\x18\x05 \x03(\x0b\x32\x45.chalk.server.v1.ManualTriggerScheduledQueryRequest.EnvOverridesEntryR\x0c\x65nvOverrides\x12(\n\x0f\x63ron_query_name\x18\x06 \x01(\tH\x00R\rcronQueryName\x1aY\n\x13PlannerOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value:\x02\x38\x01\x1a?\n\x11\x45nvOverridesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x17\n\x15\x63ron_query_identifierB\x0e\n\x0c_max_samples"y\n#ManualTriggerScheduledQueryResponse\x12R\n\x13scheduled_query_run\x18\x01 \x01(\x0b\x32".chalk.server.v1.ScheduledQueryRunR\x11scheduledQueryRun*\x9c\x01\n\x12\x43ronRunTriggerKind\x12%\n!CRON_RUN_TRIGGER_KIND_UNSPECIFIED\x10\x00\x12 \n\x1c\x43RON_RUN_TRIGGER_KIND_MANUAL\x10\x01\x12\x1d\n\x19\x43RON_RUN_TRIGGER_KIND_API\x10\x02\x12\x1e\n\x1a\x43RON_RUN_TRIGGER_KIND_CRON\x10\x03\x32\xac\x02\n\x10SchedulerService\x12\x87\x01\n\x19ManualTriggerCronResolver\x12\x31.chalk.server.v1.ManualTriggerCronResolverRequest\x1a\x32.chalk.server.v1.ManualTriggerCronResolverResponse"\x03\x80}\x11\x12\x8d\x01\n\x1bManualTriggerScheduledQuery\x12\x33.chalk.server.v1.ManualTriggerScheduledQueryRequest\x1a\x34.chalk.server.v1.ManualTriggerScheduledQueryResponse"\x03\x80}\x11\x42\x97\x01\n\x13\x63om.chalk.server.v1B\x0eSchedulerProtoP\x01Z\x12server/v1;serverv1\xa2\x02\x03\x43SX\xaa\x02\x0f\x43halk.Server.V1\xca\x02\x0f\x43halk\\Server\\V1\xe2\x02\x1b\x43halk\\Server\\V1\\GPBMetadata\xea\x02\x11\x43halk::Server::V1b\x06proto3'
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
_globals = globals()
|
|
@@ -40,8 +40,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
40
40
|
_globals["_SCHEDULERSERVICE"].methods_by_name["ManualTriggerCronResolver"]._serialized_options = b"\200}\021"
|
|
41
41
|
_globals["_SCHEDULERSERVICE"].methods_by_name["ManualTriggerScheduledQuery"]._options = None
|
|
42
42
|
_globals["_SCHEDULERSERVICE"].methods_by_name["ManualTriggerScheduledQuery"]._serialized_options = b"\200}\021"
|
|
43
|
-
_globals["_CRONRUNTRIGGERKIND"]._serialized_start =
|
|
44
|
-
_globals["_CRONRUNTRIGGERKIND"]._serialized_end =
|
|
43
|
+
_globals["_CRONRUNTRIGGERKIND"]._serialized_start = 2271
|
|
44
|
+
_globals["_CRONRUNTRIGGERKIND"]._serialized_end = 2427
|
|
45
45
|
_globals["_CRONRESOLVERRUN"]._serialized_start = 221
|
|
46
46
|
_globals["_CRONRESOLVERRUN"]._serialized_end = 987
|
|
47
47
|
_globals["_MANUALTRIGGERCRONRESOLVERREQUEST"]._serialized_start = 990
|
|
@@ -49,13 +49,13 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
49
49
|
_globals["_MANUALTRIGGERCRONRESOLVERRESPONSE"]._serialized_start = 1405
|
|
50
50
|
_globals["_MANUALTRIGGERCRONRESOLVERRESPONSE"]._serialized_end = 1518
|
|
51
51
|
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST"]._serialized_start = 1521
|
|
52
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST"]._serialized_end =
|
|
53
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_PLANNEROPTIONSENTRY"]._serialized_start =
|
|
54
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_PLANNEROPTIONSENTRY"]._serialized_end =
|
|
55
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_ENVOVERRIDESENTRY"]._serialized_start =
|
|
56
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_ENVOVERRIDESENTRY"]._serialized_end =
|
|
57
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYRESPONSE"]._serialized_start =
|
|
58
|
-
_globals["_MANUALTRIGGERSCHEDULEDQUERYRESPONSE"]._serialized_end =
|
|
59
|
-
_globals["_SCHEDULERSERVICE"]._serialized_start =
|
|
60
|
-
_globals["_SCHEDULERSERVICE"]._serialized_end =
|
|
52
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST"]._serialized_end = 2145
|
|
53
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_PLANNEROPTIONSENTRY"]._serialized_start = 1950
|
|
54
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_PLANNEROPTIONSENTRY"]._serialized_end = 2039
|
|
55
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_ENVOVERRIDESENTRY"]._serialized_start = 2041
|
|
56
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYREQUEST_ENVOVERRIDESENTRY"]._serialized_end = 2104
|
|
57
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYRESPONSE"]._serialized_start = 2147
|
|
58
|
+
_globals["_MANUALTRIGGERSCHEDULEDQUERYRESPONSE"]._serialized_end = 2268
|
|
59
|
+
_globals["_SCHEDULERSERVICE"]._serialized_start = 2430
|
|
60
|
+
_globals["_SCHEDULERSERVICE"]._serialized_end = 2730
|
|
61
61
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -123,7 +123,14 @@ class ManualTriggerCronResolverResponse(_message.Message):
|
|
|
123
123
|
def __init__(self, cron_resolver_run: _Optional[_Union[CronResolverRun, _Mapping]] = ...) -> None: ...
|
|
124
124
|
|
|
125
125
|
class ManualTriggerScheduledQueryRequest(_message.Message):
|
|
126
|
-
__slots__ = (
|
|
126
|
+
__slots__ = (
|
|
127
|
+
"cron_query_id",
|
|
128
|
+
"planner_options",
|
|
129
|
+
"incremental_resolvers",
|
|
130
|
+
"max_samples",
|
|
131
|
+
"env_overrides",
|
|
132
|
+
"cron_query_name",
|
|
133
|
+
)
|
|
127
134
|
class PlannerOptionsEntry(_message.Message):
|
|
128
135
|
__slots__ = ("key", "value")
|
|
129
136
|
KEY_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -147,11 +154,13 @@ class ManualTriggerScheduledQueryRequest(_message.Message):
|
|
|
147
154
|
INCREMENTAL_RESOLVERS_FIELD_NUMBER: _ClassVar[int]
|
|
148
155
|
MAX_SAMPLES_FIELD_NUMBER: _ClassVar[int]
|
|
149
156
|
ENV_OVERRIDES_FIELD_NUMBER: _ClassVar[int]
|
|
157
|
+
CRON_QUERY_NAME_FIELD_NUMBER: _ClassVar[int]
|
|
150
158
|
cron_query_id: int
|
|
151
159
|
planner_options: _containers.MessageMap[str, _struct_pb2.Value]
|
|
152
160
|
incremental_resolvers: _containers.RepeatedScalarFieldContainer[str]
|
|
153
161
|
max_samples: int
|
|
154
162
|
env_overrides: _containers.ScalarMap[str, str]
|
|
163
|
+
cron_query_name: str
|
|
155
164
|
def __init__(
|
|
156
165
|
self,
|
|
157
166
|
cron_query_id: _Optional[int] = ...,
|
|
@@ -159,6 +168,7 @@ class ManualTriggerScheduledQueryRequest(_message.Message):
|
|
|
159
168
|
incremental_resolvers: _Optional[_Iterable[str]] = ...,
|
|
160
169
|
max_samples: _Optional[int] = ...,
|
|
161
170
|
env_overrides: _Optional[_Mapping[str, str]] = ...,
|
|
171
|
+
cron_query_name: _Optional[str] = ...,
|
|
162
172
|
) -> None: ...
|
|
163
173
|
|
|
164
174
|
class ManualTriggerScheduledQueryResponse(_message.Message):
|
chalk/_version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2.93.
|
|
1
|
+
__version__ = "2.93.4"
|
chalk/client/client.py
CHANGED
|
@@ -19,6 +19,7 @@ from typing import (
|
|
|
19
19
|
|
|
20
20
|
import requests
|
|
21
21
|
|
|
22
|
+
from chalk._gen.chalk.server.v1.scheduler_pb2 import ManualTriggerScheduledQueryResponse
|
|
22
23
|
from chalk.client.models import (
|
|
23
24
|
BranchDeployResponse,
|
|
24
25
|
BranchIdParam,
|
|
@@ -1085,6 +1086,52 @@ class ChalkClient:
|
|
|
1085
1086
|
"""
|
|
1086
1087
|
...
|
|
1087
1088
|
|
|
1089
|
+
def run_scheduled_query(
|
|
1090
|
+
self,
|
|
1091
|
+
name: str,
|
|
1092
|
+
planner_options: Optional[Mapping[str, Any]],
|
|
1093
|
+
incremental_resolvers: Optional[Sequence[str]],
|
|
1094
|
+
max_samples: Optional[int],
|
|
1095
|
+
env_overrides: Optional[Mapping[str, str]],
|
|
1096
|
+
) -> ManualTriggerScheduledQueryResponse:
|
|
1097
|
+
"""
|
|
1098
|
+
Manually trigger a scheduled query request.
|
|
1099
|
+
|
|
1100
|
+
Parameters
|
|
1101
|
+
----------
|
|
1102
|
+
name
|
|
1103
|
+
The name of the scheduled query to be triggered.
|
|
1104
|
+
incremental_resolvers
|
|
1105
|
+
If set to None, Chalk will incrementalize resolvers in the query's root namespaces.
|
|
1106
|
+
If set to a list of resolvers, this set will be used for incrementalization.
|
|
1107
|
+
Incremental resolvers must return a feature time in its output, and must return a `DataFrame`.
|
|
1108
|
+
Most commonly, this will be the name of a SQL file resolver. Chalk will ingest all new data
|
|
1109
|
+
from these resolvers and propagate changes to values in the root namespace.
|
|
1110
|
+
max_samples
|
|
1111
|
+
The maximum number of samples to compute.
|
|
1112
|
+
env_overrides:
|
|
1113
|
+
A dictionary of environment values to override during this specific triggered query.
|
|
1114
|
+
|
|
1115
|
+
Other Parameters
|
|
1116
|
+
----------------
|
|
1117
|
+
planner_options
|
|
1118
|
+
A dictionary of options to pass to the planner.
|
|
1119
|
+
These are typically provided by Chalk Support for specific use cases.
|
|
1120
|
+
|
|
1121
|
+
Returns
|
|
1122
|
+
-------
|
|
1123
|
+
ManualTriggerScheduledQueryResponse
|
|
1124
|
+
A response message containing metadata around the triggered run.
|
|
1125
|
+
|
|
1126
|
+
Examples
|
|
1127
|
+
--------
|
|
1128
|
+
>>> from chalk.client.client_grpc import ChalkGRPCClient
|
|
1129
|
+
>>> ChalkGRPCClient().run_scheduled_query(
|
|
1130
|
+
... name="my_scheduled_query",
|
|
1131
|
+
... )
|
|
1132
|
+
"""
|
|
1133
|
+
...
|
|
1134
|
+
|
|
1088
1135
|
def prompt_evaluation(
|
|
1089
1136
|
self,
|
|
1090
1137
|
prompts: list[Prompt | str],
|
chalk/client/client_grpc.py
CHANGED
|
@@ -74,6 +74,11 @@ from chalk._gen.chalk.server.v1.model_registry_pb2 import (
|
|
|
74
74
|
)
|
|
75
75
|
from chalk._gen.chalk.server.v1.model_registry_pb2_grpc import ModelRegistryServiceStub
|
|
76
76
|
from chalk._gen.chalk.server.v1.offline_queries_pb2_grpc import OfflineQueryMetadataServiceStub
|
|
77
|
+
from chalk._gen.chalk.server.v1.scheduler_pb2 import (
|
|
78
|
+
ManualTriggerScheduledQueryRequest,
|
|
79
|
+
ManualTriggerScheduledQueryResponse,
|
|
80
|
+
)
|
|
81
|
+
from chalk._gen.chalk.server.v1.scheduler_pb2_grpc import SchedulerServiceStub
|
|
77
82
|
from chalk._gen.chalk.server.v1.script_tasks_pb2 import CreateScriptTaskRequest, CreateScriptTaskResponse
|
|
78
83
|
from chalk._gen.chalk.server.v1.script_tasks_pb2_grpc import ScriptTaskServiceStub
|
|
79
84
|
from chalk._gen.chalk.server.v1.team_pb2 import (
|
|
@@ -279,6 +284,14 @@ class StubProvider:
|
|
|
279
284
|
)
|
|
280
285
|
return OfflineQueryMetadataServiceStub(self._server_channel)
|
|
281
286
|
|
|
287
|
+
@cached_property
|
|
288
|
+
def scheduled_query_stub(self) -> SchedulerServiceStub:
|
|
289
|
+
if self._server_channel is None:
|
|
290
|
+
raise ValueError(
|
|
291
|
+
"The GRPC engine service is not available. If you would like to set up a GRPC service, please contact Chalk."
|
|
292
|
+
)
|
|
293
|
+
return SchedulerServiceStub(self._server_channel)
|
|
294
|
+
|
|
282
295
|
@cached_property
|
|
283
296
|
def sql_stub(self) -> SqlServiceStub:
|
|
284
297
|
if self._engine_channel is None:
|
|
@@ -523,6 +536,9 @@ class StubRefresher:
|
|
|
523
536
|
def call_offline_query_stub(self, fn: Callable[[OfflineQueryMetadataServiceStub], T]) -> T:
|
|
524
537
|
return self._retry_callable(fn, lambda: self._stub.offline_query_stub)
|
|
525
538
|
|
|
539
|
+
def call_scheduled_query_stub(self, fn: Callable[[SchedulerServiceStub], T]) -> T:
|
|
540
|
+
return self._retry_callable(fn, lambda: self._stub.scheduled_query_stub)
|
|
541
|
+
|
|
526
542
|
def call_sql_stub(self, fn: Callable[[SqlServiceStub], T]) -> T:
|
|
527
543
|
return self._retry_callable(fn, lambda: self._stub.sql_stub)
|
|
528
544
|
|
|
@@ -1229,6 +1245,62 @@ class ChalkGRPCClient:
|
|
|
1229
1245
|
body_type=online_query_pb2.FEATHER_BODY_TYPE_RECORD_BATCHES,
|
|
1230
1246
|
)
|
|
1231
1247
|
|
|
1248
|
+
def run_scheduled_query(
|
|
1249
|
+
self,
|
|
1250
|
+
name: str,
|
|
1251
|
+
planner_options: Optional[Mapping[str, Any]],
|
|
1252
|
+
incremental_resolvers: Optional[Sequence[str]],
|
|
1253
|
+
max_samples: Optional[int],
|
|
1254
|
+
env_overrides: Optional[Mapping[str, str]],
|
|
1255
|
+
) -> ManualTriggerScheduledQueryResponse:
|
|
1256
|
+
"""
|
|
1257
|
+
Manually trigger a scheduled query request.
|
|
1258
|
+
|
|
1259
|
+
Parameters
|
|
1260
|
+
----------
|
|
1261
|
+
name
|
|
1262
|
+
The name of the scheduled query to be triggered.
|
|
1263
|
+
incremental_resolvers
|
|
1264
|
+
If set to None, Chalk will incrementalize resolvers in the query's root namespaces.
|
|
1265
|
+
If set to a list of resolvers, this set will be used for incrementalization.
|
|
1266
|
+
Incremental resolvers must return a feature time in its output, and must return a `DataFrame`.
|
|
1267
|
+
Most commonly, this will be the name of a SQL file resolver. Chalk will ingest all new data
|
|
1268
|
+
from these resolvers and propagate changes to values in the root namespace.
|
|
1269
|
+
max_samples
|
|
1270
|
+
The maximum number of samples to compute.
|
|
1271
|
+
env_overrides:
|
|
1272
|
+
A dictionary of environment values to override during this specific triggered query.
|
|
1273
|
+
|
|
1274
|
+
Other Parameters
|
|
1275
|
+
----------------
|
|
1276
|
+
planner_options
|
|
1277
|
+
A dictionary of options to pass to the planner.
|
|
1278
|
+
These are typically provided by Chalk Support for specific use cases.
|
|
1279
|
+
|
|
1280
|
+
Returns
|
|
1281
|
+
-------
|
|
1282
|
+
ManualTriggerScheduledQueryResponse
|
|
1283
|
+
A response message containing metadata around the triggered run.
|
|
1284
|
+
|
|
1285
|
+
Examples
|
|
1286
|
+
--------
|
|
1287
|
+
>>> from chalk.client.client_grpc import ChalkGRPCClient
|
|
1288
|
+
>>> ChalkGRPCClient().run_scheduled_query(
|
|
1289
|
+
... name="my_scheduled_query",
|
|
1290
|
+
... )
|
|
1291
|
+
"""
|
|
1292
|
+
return self._stub_refresher.call_scheduled_query_stub(
|
|
1293
|
+
lambda x: x.ManualTriggerScheduledQuery(
|
|
1294
|
+
request=ManualTriggerScheduledQueryRequest(
|
|
1295
|
+
cron_query_name=name,
|
|
1296
|
+
planner_options=planner_options or {},
|
|
1297
|
+
incremental_resolvers=incremental_resolvers or (),
|
|
1298
|
+
max_samples=max_samples,
|
|
1299
|
+
env_overrides=env_overrides or {},
|
|
1300
|
+
),
|
|
1301
|
+
)
|
|
1302
|
+
)
|
|
1303
|
+
|
|
1232
1304
|
def get_graph(self, deployment: DeploymentId | None = None) -> Graph:
|
|
1233
1305
|
"""Get the graph for a given deployment.
|
|
1234
1306
|
|
chalk/client/client_impl.py
CHANGED
|
@@ -51,6 +51,7 @@ from typing_extensions import NoReturn, override
|
|
|
51
51
|
from urllib3 import Retry
|
|
52
52
|
|
|
53
53
|
import chalk._repr.utils as repr_utils
|
|
54
|
+
from chalk._gen.chalk.server.v1.scheduler_pb2 import ManualTriggerScheduledQueryResponse
|
|
54
55
|
from chalk._reporting.models import BatchReport, BatchReportResponse
|
|
55
56
|
from chalk._reporting.progress import ProgressService
|
|
56
57
|
from chalk._upload_features.utils import to_multi_upload_inputs
|
|
@@ -2409,6 +2410,69 @@ https://docs.chalk.ai/cli/apply
|
|
|
2409
2410
|
initialized_dataset.is_finished = True
|
|
2410
2411
|
return initialized_dataset
|
|
2411
2412
|
|
|
2413
|
+
def run_scheduled_query(
|
|
2414
|
+
self,
|
|
2415
|
+
name: str,
|
|
2416
|
+
planner_options: Optional[Mapping[str, Any]] = None,
|
|
2417
|
+
incremental_resolvers: Optional[Sequence[str]] = None,
|
|
2418
|
+
max_samples: Optional[int] = None,
|
|
2419
|
+
env_overrides: Optional[Mapping[str, str]] = None,
|
|
2420
|
+
) -> ManualTriggerScheduledQueryResponse:
|
|
2421
|
+
"""
|
|
2422
|
+
Manually trigger a scheduled query request.
|
|
2423
|
+
|
|
2424
|
+
Parameters
|
|
2425
|
+
----------
|
|
2426
|
+
name
|
|
2427
|
+
The name of the scheduled query to be triggered.
|
|
2428
|
+
incremental_resolvers
|
|
2429
|
+
If set to None, Chalk will incrementalize resolvers in the query's root namespaces.
|
|
2430
|
+
If set to a list of resolvers, this set will be used for incrementalization.
|
|
2431
|
+
Incremental resolvers must return a feature time in its output, and must return a `DataFrame`.
|
|
2432
|
+
Most commonly, this will be the name of a SQL file resolver. Chalk will ingest all new data
|
|
2433
|
+
from these resolvers and propagate changes to values in the root namespace.
|
|
2434
|
+
max_samples
|
|
2435
|
+
The maximum number of samples to compute.
|
|
2436
|
+
env_overrides:
|
|
2437
|
+
A dictionary of environment values to override during this specific triggered query.
|
|
2438
|
+
|
|
2439
|
+
Other Parameters
|
|
2440
|
+
----------------
|
|
2441
|
+
planner_options
|
|
2442
|
+
A dictionary of options to pass to the planner.
|
|
2443
|
+
These are typically provided by Chalk Support for specific use cases.
|
|
2444
|
+
|
|
2445
|
+
Returns
|
|
2446
|
+
-------
|
|
2447
|
+
ManualTriggerScheduledQueryResponse
|
|
2448
|
+
A response message containing metadata around the triggered run.
|
|
2449
|
+
|
|
2450
|
+
Examples
|
|
2451
|
+
--------
|
|
2452
|
+
>>> from chalk.client.client_grpc import ChalkGRPCClient
|
|
2453
|
+
>>> ChalkGRPCClient().run_scheduled_query(
|
|
2454
|
+
... name="my_scheduled_query",
|
|
2455
|
+
... )
|
|
2456
|
+
"""
|
|
2457
|
+
from chalk.client.client_grpc import ChalkGRPCClient
|
|
2458
|
+
|
|
2459
|
+
client_grpc = ChalkGRPCClient(
|
|
2460
|
+
client_id=self._client_id,
|
|
2461
|
+
client_secret=self._client_secret,
|
|
2462
|
+
environment=self._primary_environment,
|
|
2463
|
+
api_server=self._api_server,
|
|
2464
|
+
)
|
|
2465
|
+
|
|
2466
|
+
resp = client_grpc.run_scheduled_query(
|
|
2467
|
+
name=name,
|
|
2468
|
+
planner_options=planner_options,
|
|
2469
|
+
incremental_resolvers=incremental_resolvers,
|
|
2470
|
+
max_samples=max_samples,
|
|
2471
|
+
env_overrides=env_overrides,
|
|
2472
|
+
)
|
|
2473
|
+
|
|
2474
|
+
return resp
|
|
2475
|
+
|
|
2412
2476
|
def prompt_evaluation(
|
|
2413
2477
|
self,
|
|
2414
2478
|
prompts: list[Prompt | str],
|
|
@@ -5,6 +5,8 @@ import functools
|
|
|
5
5
|
from typing import Any, Callable, List, Type, TypeVar, cast
|
|
6
6
|
|
|
7
7
|
from chalk._lsp.error_builder import FeatureClassErrorBuilder
|
|
8
|
+
from chalk.features.feature_wrapper import UnresolvedFeature
|
|
9
|
+
from chalk.utils.notebook import is_notebook
|
|
8
10
|
|
|
9
11
|
T = TypeVar("T")
|
|
10
12
|
V = TypeVar("V")
|
|
@@ -54,6 +56,11 @@ def classproperty_support(cls: Type[T]) -> Type[T]:
|
|
|
54
56
|
if (res := self.__chalk_notebook_feature_expressions__.get(item)) is not None:
|
|
55
57
|
return res
|
|
56
58
|
|
|
59
|
+
# If in notebook, fallback to constructing FQN string instead of raising error
|
|
60
|
+
if is_notebook():
|
|
61
|
+
fqn = f"{self.namespace}.{item}"
|
|
62
|
+
return UnresolvedFeature(fqn)
|
|
63
|
+
|
|
57
64
|
builder: FeatureClassErrorBuilder = self.__chalk_error_builder__
|
|
58
65
|
builder.invalid_attribute(
|
|
59
66
|
root_feature_str=self.namespace,
|
|
@@ -25,6 +25,7 @@ from chalk.utils.collections import ensure_tuple
|
|
|
25
25
|
SUPPORTED_LOCAL_MODELS = {
|
|
26
26
|
"all-MiniLM-L6-v2", # https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2
|
|
27
27
|
"sample-bert", # For internal Chalk use
|
|
28
|
+
"sample-linear-nn", # For internal Chalk use
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
# This will eventually be included in SUPPORTED_LOCAL_MODELS
|
|
@@ -50,6 +50,7 @@ from chalk.features._encoding.pyarrow import (
|
|
|
50
50
|
rich_to_pyarrow,
|
|
51
51
|
)
|
|
52
52
|
from chalk.features._encoding.rich import structure_primitive_to_rich, unstructure_rich_to_primitive
|
|
53
|
+
from chalk.features.feature_wrapper import UnresolvedFeature
|
|
53
54
|
from chalk.utils.collections import unwrap_annotated_if_needed, unwrap_optional_and_annotated_if_needed
|
|
54
55
|
from chalk.utils.df_utils import pa_array_to_pl_series
|
|
55
56
|
from chalk.utils.json import JSON, TJSON, is_pyarrow_json_type, pyarrow_json_type
|
|
@@ -1234,8 +1235,14 @@ class FeatureConverter(PrimitiveFeatureConverter[_TPrim], Generic[_TPrim, _TRich
|
|
|
1234
1235
|
# because it is also used for error handling inside of `from_rich_to_primitive`.
|
|
1235
1236
|
self._name = name
|
|
1236
1237
|
if rich_default != ...:
|
|
1237
|
-
#
|
|
1238
|
-
|
|
1238
|
+
# In notebook environments, UnresolvedFeature may be used as a placeholder
|
|
1239
|
+
# for features that can't be resolved due to a stale registry.
|
|
1240
|
+
# Treat these as missing defaults since they're not concrete values.
|
|
1241
|
+
if isinstance(rich_default, UnresolvedFeature):
|
|
1242
|
+
rich_default = ...
|
|
1243
|
+
else:
|
|
1244
|
+
# The missing value strategy doesn't really matter because rich_default is not missing
|
|
1245
|
+
primitive_default = self.from_rich_to_primitive(rich_default, missing_value_strategy="allow")
|
|
1239
1246
|
super().__init__(
|
|
1240
1247
|
name, is_nullable=is_nullable, pyarrow_dtype=pyarrow_dtype, primitive_default=primitive_default
|
|
1241
1248
|
)
|
chalk/features/feature_field.py
CHANGED
|
@@ -405,12 +405,10 @@ class Feature(Generic[_TPrim, _TRich]):
|
|
|
405
405
|
|
|
406
406
|
if offline_ttl is None:
|
|
407
407
|
offline_ttl = timedelta(0)
|
|
408
|
-
elif offline_ttl is ...:
|
|
409
|
-
# Should we allow the offline_ttl to be set via the class decorator?
|
|
410
|
-
offline_ttl = CHALK_MAX_TIMEDELTA
|
|
411
408
|
elif isinstance(offline_ttl, str):
|
|
412
409
|
offline_ttl = parse_chalk_duration(offline_ttl)
|
|
413
|
-
|
|
410
|
+
if offline_ttl is not ...:
|
|
411
|
+
self.offline_ttl = offline_ttl
|
|
414
412
|
|
|
415
413
|
self.cache_strategy = cache_strategy
|
|
416
414
|
|
chalk/features/feature_set.py
CHANGED
|
@@ -179,6 +179,7 @@ class FeaturesImpl(metaclass=FeaturesMeta):
|
|
|
179
179
|
__chalk_is_singleton__: ClassVar[bool]
|
|
180
180
|
__chalk_etl_offline_to_online__: ClassVar[bool]
|
|
181
181
|
__chalk_max_staleness__: ClassVar[timedelta]
|
|
182
|
+
__chalk_offline_ttl__: ClassVar[timedelta]
|
|
182
183
|
__chalk_cache_strategy__: ClassVar[CacheStrategy]
|
|
183
184
|
__chalk_namespace__: ClassVar[str]
|
|
184
185
|
__chalk_primary__: ClassVar[Feature | None] = None # The primary key feature
|
|
@@ -34,7 +34,7 @@ from chalk.streams import Windowed
|
|
|
34
34
|
from chalk.streams._windows import GroupByWindowed, get_name_with_duration
|
|
35
35
|
from chalk.utils import notebook
|
|
36
36
|
from chalk.utils.collections import ensure_tuple
|
|
37
|
-
from chalk.utils.duration import Duration, parse_chalk_duration, parse_chalk_duration_s
|
|
37
|
+
from chalk.utils.duration import CHALK_MAX_TIMEDELTA, Duration, parse_chalk_duration, parse_chalk_duration_s
|
|
38
38
|
from chalk.utils.metaprogramming import MISSING, set_new_attribute
|
|
39
39
|
from chalk.utils.string import to_snake_case
|
|
40
40
|
from chalk.stores.online_store_config import OnlineStoreConfig
|
|
@@ -65,6 +65,7 @@ def features(
|
|
|
65
65
|
singleton: bool = False,
|
|
66
66
|
cache_nulls: CacheNullsType = True,
|
|
67
67
|
cache_defaults: CacheDefaultsType = True,
|
|
68
|
+
offline_ttl: Optional[Duration] = None,
|
|
68
69
|
) -> Callable[[Type[T]], Type[T]]: ...
|
|
69
70
|
|
|
70
71
|
|
|
@@ -84,6 +85,7 @@ def features(
|
|
|
84
85
|
online_store_config: Optional[OnlineStoreConfig] = None,
|
|
85
86
|
cache_nulls: CacheNullsType = True,
|
|
86
87
|
cache_defaults: CacheDefaultsType = True,
|
|
88
|
+
offline_ttl: Optional[Duration] = None,
|
|
87
89
|
) -> Union[Callable[[Type[T]], Type[T]], Type[T]]:
|
|
88
90
|
"""Chalk lets you spell out your features directly in Python.
|
|
89
91
|
|
|
@@ -141,6 +143,8 @@ def features(
|
|
|
141
143
|
The `cache_nulls` and `cache_defaults` options can be used together on the same feature with the
|
|
142
144
|
following exceptions: if `cache_nulls=False`, then `cache_defaults` cannot be `"evict_defaults"`, and if
|
|
143
145
|
`cache_nulls="evict_defaults"`, then `cache_defaults` cannot be `False`.
|
|
146
|
+
offline_ttl
|
|
147
|
+
Sets a maximum age for values eligible to be retrieved from the offline store, defined in relation to the query's current point-in-time.
|
|
144
148
|
Other Parameters
|
|
145
149
|
----------------
|
|
146
150
|
cls
|
|
@@ -186,6 +190,7 @@ def features(
|
|
|
186
190
|
node=source_info and source_info.tree,
|
|
187
191
|
)
|
|
188
192
|
nonlocal max_staleness
|
|
193
|
+
nonlocal offline_ttl
|
|
189
194
|
if name is not None and re.sub(r"[^a-z_0-9]", "", namespace) != namespace:
|
|
190
195
|
error_builder.add_diagnostic(
|
|
191
196
|
message=(
|
|
@@ -220,6 +225,19 @@ def features(
|
|
|
220
225
|
raise_error=ValueError,
|
|
221
226
|
code="13",
|
|
222
227
|
)
|
|
228
|
+
if offline_ttl is None:
|
|
229
|
+
offline_ttl = CHALK_MAX_TIMEDELTA
|
|
230
|
+
else:
|
|
231
|
+
try:
|
|
232
|
+
offline_ttl = parse_chalk_duration(offline_ttl)
|
|
233
|
+
except ValueError as e:
|
|
234
|
+
error_builder.add_diagnostic(
|
|
235
|
+
message=f"Invalid 'offline_ttl'. {e.args[0]}",
|
|
236
|
+
label=f"invalid duration {offline_ttl}",
|
|
237
|
+
range=error_builder.decorator_kwarg_value_range(kwarg="offline_ttl"),
|
|
238
|
+
raise_error=ValueError,
|
|
239
|
+
code="13",
|
|
240
|
+
)
|
|
223
241
|
|
|
224
242
|
cache_strategy = get_cache_strategy_from_cache_settings(
|
|
225
243
|
cache_nulls=cache_nulls,
|
|
@@ -271,6 +289,7 @@ def features(
|
|
|
271
289
|
tags=ensure_tuple(tags),
|
|
272
290
|
etl_offline_to_online=etl_offline_to_online,
|
|
273
291
|
max_staleness=max_staleness,
|
|
292
|
+
offline_ttl=offline_ttl,
|
|
274
293
|
cache_strategy=cache_strategy,
|
|
275
294
|
namespace=namespace,
|
|
276
295
|
singleton=singleton,
|
|
@@ -419,6 +438,7 @@ def _get_field(
|
|
|
419
438
|
class_tags: Optional[Tuple[str, ...]],
|
|
420
439
|
class_etl_offline_to_online: bool,
|
|
421
440
|
class_max_staleness: timedelta,
|
|
441
|
+
class_offline_ttl: timedelta,
|
|
422
442
|
namespace: str,
|
|
423
443
|
is_singleton: bool,
|
|
424
444
|
class_cache_strategy: CacheStrategy = CacheStrategy.ALL,
|
|
@@ -521,6 +541,7 @@ def _get_field(
|
|
|
521
541
|
class_tags=class_tags,
|
|
522
542
|
class_etl_offline_to_online=class_etl_offline_to_online,
|
|
523
543
|
class_max_staleness=class_max_staleness,
|
|
544
|
+
class_offline_ttl=class_offline_ttl,
|
|
524
545
|
class_cache_strategy=class_cache_strategy,
|
|
525
546
|
error_builder=error_builder,
|
|
526
547
|
)
|
|
@@ -534,6 +555,7 @@ def _process_field(
|
|
|
534
555
|
class_tags: Optional[Tuple[str, ...]],
|
|
535
556
|
class_etl_offline_to_online: bool,
|
|
536
557
|
class_max_staleness: timedelta,
|
|
558
|
+
class_offline_ttl: timedelta,
|
|
537
559
|
error_builder: FeatureClassErrorBuilder,
|
|
538
560
|
class_cache_strategy: CacheStrategy = CacheStrategy.ALL,
|
|
539
561
|
) -> Feature:
|
|
@@ -596,6 +618,10 @@ def _process_field(
|
|
|
596
618
|
if not hasattr(f, "max_staleness"):
|
|
597
619
|
f.max_staleness = class_max_staleness
|
|
598
620
|
|
|
621
|
+
# The attribute is not defined if the feature intends to use the class default
|
|
622
|
+
if not hasattr(f, "offline_ttl"):
|
|
623
|
+
f.offline_ttl = class_offline_ttl
|
|
624
|
+
|
|
599
625
|
f_cache_nulls, f_cache_defaults = get_cache_settings_from_strategy(f.cache_strategy)
|
|
600
626
|
class_cache_nulls, class_cache_defaults = get_cache_settings_from_strategy(class_cache_strategy)
|
|
601
627
|
|
|
@@ -800,6 +826,7 @@ def _process_class(
|
|
|
800
826
|
tags: Tuple[str, ...],
|
|
801
827
|
etl_offline_to_online: bool,
|
|
802
828
|
max_staleness: timedelta,
|
|
829
|
+
offline_ttl: timedelta,
|
|
803
830
|
namespace: str,
|
|
804
831
|
singleton: bool,
|
|
805
832
|
online_store_config: Optional[OnlineStoreConfig],
|
|
@@ -1123,6 +1150,7 @@ def _process_class(
|
|
|
1123
1150
|
typ=int,
|
|
1124
1151
|
pyarrow_dtype=pa.uint8(),
|
|
1125
1152
|
max_staleness=None,
|
|
1153
|
+
offline_ttl=None,
|
|
1126
1154
|
cache_strategy=CacheStrategy.ALL,
|
|
1127
1155
|
etl_offline_to_online=False,
|
|
1128
1156
|
is_autogenerated=True,
|
|
@@ -1204,6 +1232,7 @@ def _process_class(
|
|
|
1204
1232
|
class_tags=tuple(cls.__chalk_tags__),
|
|
1205
1233
|
class_etl_offline_to_online=cls.__chalk_etl_offline_to_online__,
|
|
1206
1234
|
class_max_staleness=cls.__chalk_max_staleness__,
|
|
1235
|
+
class_offline_ttl=cls.__chalk_offline_ttl__,
|
|
1207
1236
|
class_cache_strategy=cls.__chalk_cache_strategy__,
|
|
1208
1237
|
)
|
|
1209
1238
|
|
|
@@ -1237,6 +1266,7 @@ def _process_class(
|
|
|
1237
1266
|
set_new_attribute(cls=cls, name="__chalk_owner__", value=owner)
|
|
1238
1267
|
set_new_attribute(cls=cls, name="__chalk_tags__", value=list(tags))
|
|
1239
1268
|
set_new_attribute(cls=cls, name="__chalk_max_staleness__", value=max_staleness)
|
|
1269
|
+
set_new_attribute(cls=cls, name="__chalk_offline_ttl__", value=offline_ttl)
|
|
1240
1270
|
set_new_attribute(cls=cls, name="__chalk_cache_strategy__", value=cache_strategy)
|
|
1241
1271
|
set_new_attribute(cls=cls, name="__is_features__", value=True)
|
|
1242
1272
|
set_new_attribute(cls=cls, name="__len__", value=_len_fn)
|
|
@@ -1270,6 +1300,7 @@ def _process_class(
|
|
|
1270
1300
|
class_tags=tags,
|
|
1271
1301
|
class_etl_offline_to_online=etl_offline_to_online,
|
|
1272
1302
|
class_max_staleness=max_staleness,
|
|
1303
|
+
class_offline_ttl=offline_ttl,
|
|
1273
1304
|
class_cache_strategy=cache_strategy,
|
|
1274
1305
|
namespace=namespace,
|
|
1275
1306
|
is_singleton=singleton,
|
|
@@ -1325,6 +1356,7 @@ def _process_class(
|
|
|
1325
1356
|
class_tags=tags,
|
|
1326
1357
|
class_etl_offline_to_online=etl_offline_to_online,
|
|
1327
1358
|
class_max_staleness=max_staleness,
|
|
1359
|
+
class_offline_ttl=offline_ttl,
|
|
1328
1360
|
class_cache_strategy=cache_strategy,
|
|
1329
1361
|
error_builder=error_builder,
|
|
1330
1362
|
)
|
|
@@ -1532,6 +1564,7 @@ def _class_setattr(
|
|
|
1532
1564
|
class_tags=tuple(cls.__chalk_tags__),
|
|
1533
1565
|
class_etl_offline_to_online=cls.__chalk_etl_offline_to_online__,
|
|
1534
1566
|
class_max_staleness=cls.__chalk_max_staleness__,
|
|
1567
|
+
class_offline_ttl=cls.__chalk_offline_ttl__,
|
|
1535
1568
|
class_cache_strategy=cls.__chalk_cache_strategy__,
|
|
1536
1569
|
)
|
|
1537
1570
|
if existing_feature is not None:
|
|
@@ -11,6 +11,7 @@ from chalk.features._chalkop import op, Aggregation
|
|
|
11
11
|
from chalk.features.filter import Filter
|
|
12
12
|
from chalk.serialization.parsed_annotation import ParsedAnnotation
|
|
13
13
|
from chalk.utils.collections import ensure_tuple
|
|
14
|
+
from chalk.utils.notebook import is_notebook
|
|
14
15
|
|
|
15
16
|
if TYPE_CHECKING:
|
|
16
17
|
from chalk.features.feature_field import Feature
|
|
@@ -22,16 +23,43 @@ class NearestNeighborException(ValueError):
|
|
|
22
23
|
...
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
class UnresolvedFeature:
|
|
27
|
+
"""Fallback for features that can't be resolved in notebook environments.
|
|
28
|
+
|
|
29
|
+
This allows notebooks to work even when the feature registry is stale or incomplete.
|
|
30
|
+
The server will validate the feature exists when the query is executed.
|
|
31
|
+
"""
|
|
32
|
+
__slots__ = ("fqn",)
|
|
33
|
+
|
|
34
|
+
def __init__(self, fqn: str):
|
|
35
|
+
self.fqn = fqn
|
|
36
|
+
super().__init__()
|
|
37
|
+
|
|
38
|
+
def __str__(self):
|
|
39
|
+
return self.fqn
|
|
40
|
+
|
|
41
|
+
def __repr__(self):
|
|
42
|
+
return f"UnresolvedFeature({self.fqn!r})"
|
|
43
|
+
|
|
44
|
+
def __hash__(self):
|
|
45
|
+
return hash(self.fqn)
|
|
46
|
+
|
|
47
|
+
def __eq__(self, other: object):
|
|
48
|
+
if isinstance(other, UnresolvedFeature):
|
|
49
|
+
return self.fqn == other.fqn
|
|
50
|
+
return False
|
|
51
|
+
|
|
52
|
+
|
|
25
53
|
class _MarkedUnderlyingFeature:
|
|
26
54
|
__slots__ = ("_fn", "_source", "_debug_info")
|
|
27
55
|
|
|
28
|
-
def __init__(self, fn: Callable[[], Feature | Filter | type[DataFrame] | FeatureWrapper | Aggregation],
|
|
56
|
+
def __init__(self, fn: Callable[[], Feature | Filter | type[DataFrame] | FeatureWrapper | Aggregation | UnresolvedFeature],
|
|
29
57
|
debug_info: Any = None) -> None:
|
|
30
58
|
super().__init__()
|
|
31
59
|
self._fn = fn
|
|
32
60
|
self._debug_info = debug_info
|
|
33
61
|
|
|
34
|
-
def __call__(self, *args: Any, **kwds: Any) -> Feature | Filter | type[DataFrame] | FeatureWrapper | Aggregation:
|
|
62
|
+
def __call__(self, *args: Any, **kwds: Any) -> Feature | Filter | type[DataFrame] | FeatureWrapper | Aggregation | UnresolvedFeature:
|
|
35
63
|
return self._fn()
|
|
36
64
|
|
|
37
65
|
|
|
@@ -51,7 +79,7 @@ class FeatureWrapper:
|
|
|
51
79
|
super().__init__()
|
|
52
80
|
self._chalk_underlying = underlying
|
|
53
81
|
|
|
54
|
-
def _chalk_get_underlying(self) -> Feature | Aggregation | Filter | type[DataFrame]:
|
|
82
|
+
def _chalk_get_underlying(self) -> Feature | Aggregation | Filter | type[DataFrame] | UnresolvedFeature:
|
|
55
83
|
if isinstance(self._chalk_underlying, _MarkedUnderlyingFeature):
|
|
56
84
|
self._chalk_underlying = self._chalk_underlying()
|
|
57
85
|
if isinstance(self._chalk_underlying, FeatureWrapper):
|
|
@@ -303,6 +331,12 @@ class FeatureWrapper:
|
|
|
303
331
|
if f.attribute_name == item:
|
|
304
332
|
return FeatureWrapper(underlying.copy_with_path(f))
|
|
305
333
|
|
|
334
|
+
if is_notebook():
|
|
335
|
+
# Construct FQN by preserving the path from the underlying feature
|
|
336
|
+
# If underlying has a path, we need to include it in the FQN
|
|
337
|
+
fqn = f"{underlying.root_fqn}.{item}"
|
|
338
|
+
return UnresolvedFeature(fqn)
|
|
339
|
+
|
|
306
340
|
assert underlying.features_cls is not None
|
|
307
341
|
underlying.features_cls.__chalk_error_builder__.invalid_attribute(
|
|
308
342
|
root_feature_str=joined_class.namespace,
|
|
@@ -314,6 +348,11 @@ class FeatureWrapper:
|
|
|
314
348
|
)
|
|
315
349
|
assert False, "unreachable"
|
|
316
350
|
|
|
351
|
+
# If in notebook, fallback to constructing FQN string instead of raising error
|
|
352
|
+
if is_notebook():
|
|
353
|
+
fqn = f"{underlying.fqn}.{item}"
|
|
354
|
+
return UnresolvedFeature(fqn)
|
|
355
|
+
|
|
317
356
|
assert underlying.features_cls is not None
|
|
318
357
|
underlying.features_cls.__chalk_error_builder__.invalid_attribute(
|
|
319
358
|
root_feature_str=underlying.fqn,
|
chalk/features/resolver.py
CHANGED
|
@@ -555,28 +555,18 @@ class ResolverRegistry:
|
|
|
555
555
|
short_name = resolver.name
|
|
556
556
|
if short_name in self._short_name_to_resolver:
|
|
557
557
|
if not override and not notebook.is_notebook():
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
message=(
|
|
571
|
-
f"Another resolver with the same function name '{resolver.name}' in module "
|
|
572
|
-
f"'{self._short_name_to_resolver[short_name].__module__}' exists. "
|
|
573
|
-
f"Resolver function names must be unique. Please rename this resolver in module '{resolver.__module__}'."
|
|
574
|
-
),
|
|
575
|
-
label="duplicate resolver shortname",
|
|
576
|
-
code="71",
|
|
577
|
-
range=resolver.lsp_builder.function_name(),
|
|
578
|
-
raise_error=None,
|
|
579
|
-
)
|
|
558
|
+
# Same short name was reused
|
|
559
|
+
resolver.lsp_builder.add_diagnostic(
|
|
560
|
+
message=(
|
|
561
|
+
f"Another resolver with the same function name '{resolver.name}' in module "
|
|
562
|
+
f"'{self._short_name_to_resolver[short_name].__module__}' exists. "
|
|
563
|
+
f"Resolver function names must be unique. Please rename this resolver in module '{resolver.__module__}'."
|
|
564
|
+
),
|
|
565
|
+
label="duplicate resolver shortname",
|
|
566
|
+
code="71",
|
|
567
|
+
range=resolver.lsp_builder.function_name(),
|
|
568
|
+
raise_error=None,
|
|
569
|
+
)
|
|
580
570
|
return
|
|
581
571
|
existing_resolver = self._short_name_to_resolver[short_name]
|
|
582
572
|
# Need to remove the resolver from the typed registry
|
|
@@ -280,6 +280,8 @@ class UpsertCronQueryGQL:
|
|
|
280
280
|
resourceGroup: Optional[str] = None
|
|
281
281
|
plannerOptions: Optional[Dict[str, str]] = None
|
|
282
282
|
completionDeadline: Optional[str] = None
|
|
283
|
+
numShards: Optional[int] = None
|
|
284
|
+
numWorkers: Optional[int] = None
|
|
283
285
|
|
|
284
286
|
|
|
285
287
|
@dataclasses_json.dataclass_json
|
chalk/parsed/json_conversions.py
CHANGED
|
@@ -429,6 +429,8 @@ def convert_type_to_gql(
|
|
|
429
429
|
resourceGroup=t.resource_group,
|
|
430
430
|
plannerOptions=t.planner_options,
|
|
431
431
|
completionDeadline=None if t.completion_deadline is None else timedelta_to_duration(t.completion_deadline),
|
|
432
|
+
numShards=t.num_shards,
|
|
433
|
+
numWorkers=t.num_workers,
|
|
432
434
|
)
|
|
433
435
|
|
|
434
436
|
if isinstance(t, NamedQuery):
|
chalk/queries/scheduled_query.py
CHANGED
|
@@ -29,6 +29,8 @@ class ScheduledQuery:
|
|
|
29
29
|
planner_options: dict[str, str] | None = None,
|
|
30
30
|
resource_group: str | None = None,
|
|
31
31
|
completion_deadline: timedelta | None = None,
|
|
32
|
+
num_shards: int | None = None,
|
|
33
|
+
num_workers: int | None = None,
|
|
32
34
|
):
|
|
33
35
|
"""Create an offline query which runs on a schedule.
|
|
34
36
|
|
|
@@ -162,6 +164,9 @@ class ScheduledQuery:
|
|
|
162
164
|
|
|
163
165
|
self.completion_deadline = completion_deadline
|
|
164
166
|
|
|
167
|
+
self.num_shards = num_shards
|
|
168
|
+
self.num_workers = num_workers
|
|
169
|
+
|
|
165
170
|
CRON_QUERY_REGISTRY[name] = self
|
|
166
171
|
|
|
167
172
|
|
|
@@ -321,7 +321,10 @@ def get_sql_file_resolvers(
|
|
|
321
321
|
continue
|
|
322
322
|
_filepath_to_sql_string[filepath] = sql_string_result.sql_string
|
|
323
323
|
yield get_sql_file_resolver(sources, sql_string_result, has_import_errors)
|
|
324
|
-
|
|
324
|
+
# Only yield generated resolvers whose filepath is under the directory being scanned
|
|
325
|
+
for sql_string_result in _GENERATED_SQL_FILE_RESOLVER_REGISTRY.get_generated_sql_file_resolvers(
|
|
326
|
+
filter_by_directory=sql_file_resolve_location
|
|
327
|
+
):
|
|
325
328
|
yield get_sql_file_resolver(sources, sql_string_result, has_import_errors)
|
|
326
329
|
|
|
327
330
|
|
|
@@ -344,8 +347,12 @@ def get_sql_file_resolvers_from_paths(
|
|
|
344
347
|
sql_string_result=sql_string_result,
|
|
345
348
|
has_import_errors=has_import_errors,
|
|
346
349
|
)
|
|
350
|
+
# Only yield generated resolvers whose filepath is in the paths list
|
|
351
|
+
# If paths is empty, yield all generated resolvers (no filtering)
|
|
347
352
|
for sql_string_result in _GENERATED_SQL_FILE_RESOLVER_REGISTRY.get_generated_sql_file_resolvers():
|
|
348
|
-
|
|
353
|
+
# Check if this generated resolver's filepath is in the provided paths
|
|
354
|
+
if not paths or sql_string_result.path in paths:
|
|
355
|
+
yield get_sql_file_resolver(sources, sql_string_result, has_import_errors)
|
|
349
356
|
|
|
350
357
|
|
|
351
358
|
def get_sql_file_resolver(
|
|
@@ -1601,8 +1608,29 @@ class GeneratedSQLFileResolverRegistry:
|
|
|
1601
1608
|
filepath=filepath, sql_string=sql_string, comment_dict=comment_dict, postprocessing_expr=postprocessing_expr
|
|
1602
1609
|
)
|
|
1603
1610
|
|
|
1604
|
-
def get_generated_sql_file_resolvers(self) -> Iterable[SQLStringResult]:
|
|
1611
|
+
def get_generated_sql_file_resolvers(self, filter_by_directory: Path | None = None) -> Iterable[SQLStringResult]:
|
|
1612
|
+
"""
|
|
1613
|
+
Yield generated SQL file resolvers, optionally filtered by directory.
|
|
1614
|
+
|
|
1615
|
+
Args:
|
|
1616
|
+
filter_by_directory: If provided, only yield resolvers whose filepath is under this directory.
|
|
1617
|
+
If None, yield all generated resolvers (legacy behavior).
|
|
1618
|
+
"""
|
|
1605
1619
|
for name, generated_info in self.resolver_name_to_generated_infos.items():
|
|
1620
|
+
# If filtering by directory is requested, check if the resolver's filepath is under that directory
|
|
1621
|
+
if filter_by_directory is not None:
|
|
1622
|
+
# Special case: notebook resolvers (filepath == "<notebook>") should never be auto-yielded
|
|
1623
|
+
# when scanning directories, only when explicitly requested
|
|
1624
|
+
if generated_info.filepath == "<notebook>":
|
|
1625
|
+
continue
|
|
1626
|
+
|
|
1627
|
+
# Convert to absolute paths for comparison and check if resolver path is under filter directory
|
|
1628
|
+
resolver_path = Path(generated_info.filepath).resolve()
|
|
1629
|
+
filter_path = Path(filter_by_directory).resolve()
|
|
1630
|
+
|
|
1631
|
+
if not resolver_path.is_relative_to(filter_path):
|
|
1632
|
+
continue
|
|
1633
|
+
|
|
1606
1634
|
yield SQLStringResult(
|
|
1607
1635
|
path=generated_info.filepath,
|
|
1608
1636
|
sql_string=generated_info.sql_string,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
chalk/__init__.py,sha256=9YxwkAt3Im0OCMfpmnIB_4PKjZfBCcRmwATLXdHNRm4,2609
|
|
2
|
-
chalk/_version.py,sha256=
|
|
2
|
+
chalk/_version.py,sha256=utCJDEQ9kRnlcF3Y3HW8XTiSD1NNySR-0CrYIG6jZyo,23
|
|
3
3
|
chalk/cli.py,sha256=ckqqfOI-A2mT23-rnZzDMmblYj-2x1VBX8ebHlIEn9A,5873
|
|
4
4
|
chalk/importer.py,sha256=hCEo7eqSfXZWklkFB2geeipGhiD0qNjPBpQJvOBW6N0,63083
|
|
5
5
|
chalk/prompts.py,sha256=2H9UomLAamdfRTNUdKs9i3VTpiossuyRhntqsAXUhhg,16117
|
|
@@ -390,8 +390,8 @@ chalk/_gen/chalk/server/v1/incident_pb2.py,sha256=4-uejdKheTLIk90OqClCAxb6esH8hM
|
|
|
390
390
|
chalk/_gen/chalk/server/v1/incident_pb2.pyi,sha256=eP3FEl3eHkIRXfXLr_2cn-_GlHHirKQZv87DBg2jLaU,6861
|
|
391
391
|
chalk/_gen/chalk/server/v1/incident_pb2_grpc.py,sha256=VCyAf0skoHSgQPkD4n8rKQPYesinqHqN8TEwyu7XGUo,159
|
|
392
392
|
chalk/_gen/chalk/server/v1/incident_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
393
|
-
chalk/_gen/chalk/server/v1/integrations_pb2.py,sha256=
|
|
394
|
-
chalk/_gen/chalk/server/v1/integrations_pb2.pyi,sha256=
|
|
393
|
+
chalk/_gen/chalk/server/v1/integrations_pb2.py,sha256=BSgvuWniq6oyJhoBz1Ptcov3Q9G1u8NdpQp_ogRWbDE,14216
|
|
394
|
+
chalk/_gen/chalk/server/v1/integrations_pb2.pyi,sha256=_EJVXKyY75KI9xu32ZmHkew2APzNf8IWHrc2cAayfSM,11977
|
|
395
395
|
chalk/_gen/chalk/server/v1/integrations_pb2_grpc.py,sha256=bWarXrUn1O7t6RhGCCKo0X0IIXaA9SKln7AQDVEY8vM,16185
|
|
396
396
|
chalk/_gen/chalk/server/v1/integrations_pb2_grpc.pyi,sha256=uV38oDuzdnQObTbdFjrVSVH0C92FTB4Wx_Cd4v1-wr0,3478
|
|
397
397
|
chalk/_gen/chalk/server/v1/kube_pb2.py,sha256=5cV8jL3Nwal2FTX3-6dh0lrMxKduzjanC3hV8lLU-CI,6791
|
|
@@ -462,8 +462,8 @@ chalk/_gen/chalk/server/v1/scheduled_query_run_pb2.py,sha256=ykS7SrO0bu74O55qu6E
|
|
|
462
462
|
chalk/_gen/chalk/server/v1/scheduled_query_run_pb2.pyi,sha256=M9JNVrg74MI-ay5bOzJU-BdC8h-jUkrAmlssiCFTln4,6113
|
|
463
463
|
chalk/_gen/chalk/server/v1/scheduled_query_run_pb2_grpc.py,sha256=VCyAf0skoHSgQPkD4n8rKQPYesinqHqN8TEwyu7XGUo,159
|
|
464
464
|
chalk/_gen/chalk/server/v1/scheduled_query_run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
|
465
|
-
chalk/_gen/chalk/server/v1/scheduler_pb2.py,sha256=
|
|
466
|
-
chalk/_gen/chalk/server/v1/scheduler_pb2.pyi,sha256=
|
|
465
|
+
chalk/_gen/chalk/server/v1/scheduler_pb2.py,sha256=51WGM0OLvEzZBvgy7gubBGkUH3NSDwEHRZ1P1enkz0c,8061
|
|
466
|
+
chalk/_gen/chalk/server/v1/scheduler_pb2.pyi,sha256=G--OoEXULE2nRhp2pQ9rXYRicqeY7J47FWDwBdNvSx0,7154
|
|
467
467
|
chalk/_gen/chalk/server/v1/scheduler_pb2_grpc.py,sha256=LEfa6Htuud5PHvl9_daN-Bs0KfBPkvrS9YHjM8EjY08,4969
|
|
468
468
|
chalk/_gen/chalk/server/v1/scheduler_pb2_grpc.pyi,sha256=tDMzDHvI-TNcmQzCmlKebNl8KECl7p41zgPmZOreC1o,1395
|
|
469
469
|
chalk/_gen/chalk/server/v1/script_tasks_pb2.py,sha256=MfrJdphkoDV-aNWYF10pG_cvPFlVO72-LK_RUmTQYX8,7534
|
|
@@ -550,11 +550,11 @@ chalk/_validation/validation.py,sha256=9cCMfZa9-1wxkXLme_ylmD5vIA1qExJD6aqbYvbmK
|
|
|
550
550
|
chalk/byte_transmit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
551
551
|
chalk/byte_transmit/model.py,sha256=LFX8pj9X_CWXeap7fDnMl9YmXsYTgq7jBAbEWkxoYoE,13048
|
|
552
552
|
chalk/client/__init__.py,sha256=wu3WQVzE5gRj6noQQDOdYJUgDaz_9QtbjXH4KuoIlXQ,1782
|
|
553
|
-
chalk/client/client.py,sha256=
|
|
553
|
+
chalk/client/client.py,sha256=aIOIB7OTLZ6jWfesAVRqeT6mFqtsjeAk0e8UE29bzRI,102940
|
|
554
554
|
chalk/client/client_async.py,sha256=nFFTWJbdBlb7zksyjOMBY566tZTAyNXQhCnq06LHWl0,50803
|
|
555
555
|
chalk/client/client_async_impl.py,sha256=ZphhgTB49JBWHCGXe-dI0wWWKc9zPcOczy02q_gFy50,6925
|
|
556
|
-
chalk/client/client_grpc.py,sha256=
|
|
557
|
-
chalk/client/client_impl.py,sha256=
|
|
556
|
+
chalk/client/client_grpc.py,sha256=86W32GXemHb0xt78sUKhgorY2Me3ud53YNzEr09NcDg,93683
|
|
557
|
+
chalk/client/client_impl.py,sha256=smNVo-vItnjbuN-8beFNb986uOVDaPTCkd6JTfT76WY,210503
|
|
558
558
|
chalk/client/dataset.py,sha256=LneWwaAOHCjtj7gaJjsSeVNruj-QJ51hjRi62zrFNVE,77561
|
|
559
559
|
chalk/client/exc.py,sha256=kZJ80YbSeSRDmTLTh240j_eRdJFZBa7IaDsNSRoDroU,4145
|
|
560
560
|
chalk/client/models.py,sha256=CqJ8vdMAPrjOo--GWQVr2WF3zfP5bfhULho0_YL0p6o,60883
|
|
@@ -578,18 +578,18 @@ chalk/df/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
578
578
|
chalk/df/ast_parser.py,sha256=t-DwUxd2hN8LECRSBx85DIv9FtILgMiHyGyCTINfgQw,11199
|
|
579
579
|
chalk/features/__init__.py,sha256=5doD7bFwRthzwdmizbRaPVHiCABiNpiOiAJVFlwqNnA,6943
|
|
580
580
|
chalk/features/_chalkop.py,sha256=N229Tsoc3fgAiyoH6ZtygrD6uCdkBk_JSOXQSpDd6QA,18383
|
|
581
|
-
chalk/features/_class_property.py,sha256=
|
|
581
|
+
chalk/features/_class_property.py,sha256=YR_GjTcdDKYEyQ4uyGLpt-CYvs4XuVnLEI1N2QEyTNA,3579
|
|
582
582
|
chalk/features/_document.py,sha256=ck3J958tNEIIKU4s_uoLObM-H2PG0Oqs4DtKtouGJVE,368
|
|
583
583
|
chalk/features/_geospatial.py,sha256=OF3lasbFstw5gj8vrAqkU8815bvZeHoFRppS9ZfB5rU,4382
|
|
584
584
|
chalk/features/_last.py,sha256=IyYe0PVAKBu8FRhCZiK6Dy5afKbwDHEUTES5qVXbaZU,1163
|
|
585
585
|
chalk/features/_tensor.py,sha256=2SQz9cnIywGjHL6LoWj4lrVBa854McFUttJSNV1hKp8,7111
|
|
586
586
|
chalk/features/_vector.py,sha256=jtJmUTtCaUFru4Fw17PYWozl3pPEdIOCYAuZOqIaN3Y,7205
|
|
587
587
|
chalk/features/feature_cache_strategy.py,sha256=bXV-tjHfPzUotMpZ3h_D9Xxq-V1CLj_UcVtGIGMpMkI,4942
|
|
588
|
-
chalk/features/feature_field.py,sha256=
|
|
589
|
-
chalk/features/feature_set.py,sha256=
|
|
590
|
-
chalk/features/feature_set_decorator.py,sha256=
|
|
588
|
+
chalk/features/feature_field.py,sha256=A2QU5lKKo1QSKC6wWH6xLLgKjHzT2c_WJ3ZuA4XyHJM,93637
|
|
589
|
+
chalk/features/feature_set.py,sha256=Hhf2PhdaYbdfCdo6DmsXoFKHR-CUcI-FIGLM_pN4HFE,12453
|
|
590
|
+
chalk/features/feature_set_decorator.py,sha256=EqW8qDUZzzcSdHCg8sTjqIA1FmxQ3UuzXuliThr7KU4,66580
|
|
591
591
|
chalk/features/feature_time.py,sha256=iUk8NDelig81jP7QT3tguyzx5eOZ-YC84OVgJRRKVwo,1639
|
|
592
|
-
chalk/features/feature_wrapper.py,sha256=
|
|
592
|
+
chalk/features/feature_wrapper.py,sha256=OolNWGGX67IAEMHCObFvOCpH5EmwjbMvMygRSBJJtu0,19259
|
|
593
593
|
chalk/features/filter.py,sha256=2ldMbqvXC-nJ0jc-OZ36qHtrej-Jkx4TNQ1W_NZodAs,11177
|
|
594
594
|
chalk/features/hooks.py,sha256=KPJnudnhosEH7UptQT8W8sumIYPcZVMVjaJJJhPsOyk,5489
|
|
595
595
|
chalk/features/inference.py,sha256=hQ6htPh6Q-XzfRjpEgMHKaCGwpKlnGG0wcxoGqwPQfo,4912
|
|
@@ -597,20 +597,20 @@ chalk/features/live_updates.py,sha256=8ZbiDjcLqfFruSL15_aycwzSqJ0TbKNhas06KfZLyL
|
|
|
597
597
|
chalk/features/namespace_context.py,sha256=fL-nPohqtNiyPDS1uQTAaHLns4aivuBL2Flf50DajU4,1813
|
|
598
598
|
chalk/features/primary.py,sha256=BZ8mrMmKfRNy_wnKGDJt2cdnejP_CZb6xBsD9Ljgajc,5209
|
|
599
599
|
chalk/features/pseudofeatures.py,sha256=50Pe_Xi8ttYWtgNNRpgkhBxP8xoCZCYwyLb0aWUQ-PI,2147
|
|
600
|
-
chalk/features/resolver.py,sha256=
|
|
600
|
+
chalk/features/resolver.py,sha256=uH9bpYB_a8ihARHaUTvGe6-S2qZmwnB-YczW99DtLLQ,181763
|
|
601
601
|
chalk/features/tag.py,sha256=LRmKRA8ANCOvmaIAk-L5j1QW2U0aah2SeASy8Uydkmk,2675
|
|
602
602
|
chalk/features/underscore.py,sha256=4xnfQV3bfvVn0PNEtkT4J-k7hW4ebtH9KBe4_BvGjY4,26763
|
|
603
603
|
chalk/features/underscore_features.py,sha256=PlVCoaDDffOgtiSMaxPSWCoj8IjscbkOzDLA471HsJ4,13005
|
|
604
604
|
chalk/features/_embedding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
605
605
|
chalk/features/_embedding/cohere.py,sha256=lOPUBgxgalKRC-2VsfvvIWiDkWULL0BZouSNmvDOyVA,3678
|
|
606
|
-
chalk/features/_embedding/embedding.py,sha256=
|
|
606
|
+
chalk/features/_embedding/embedding.py,sha256=sHZ48AaiNPPlSuFvmpZIE8PVPSKbthGFTqAC-3BBFdg,18334
|
|
607
607
|
chalk/features/_embedding/embedding_provider.py,sha256=4bpla6qs9AkDzVWX4u_VV3lg1b8m4d35VMztRaUcgLE,1855
|
|
608
608
|
chalk/features/_embedding/openai.py,sha256=9St_ks5oavMoKlaw-Q3Flvj32XAIApgScwX8aPiZP6E,6286
|
|
609
609
|
chalk/features/_embedding/sentence_transformer.py,sha256=hNYuT9D-16C49lkhIVK_KXZTYYD1mJsPs_mfBrMd3DA,4811
|
|
610
610
|
chalk/features/_embedding/utils.py,sha256=gUYUJCt-9XLeioC3QYg42yc5f69ywAr_w_Q-xoF3o54,877
|
|
611
611
|
chalk/features/_embedding/vertexai.py,sha256=PUaMmd7qbK9vXrlce_8BQHg_OM9L982k6LuyM_PU-5w,5362
|
|
612
612
|
chalk/features/_encoding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
613
|
-
chalk/features/_encoding/converter.py,sha256=
|
|
613
|
+
chalk/features/_encoding/converter.py,sha256=Emb48g_d0njx0Ix5-IcoByBaS__E6aNTmLBOdK-88TY,65392
|
|
614
614
|
chalk/features/_encoding/http.py,sha256=MVmkgv90O4sOnImc-FrRPVwYR2U7zOGduNkHO4umoe4,2227
|
|
615
615
|
chalk/features/_encoding/inputs.py,sha256=4K4kOCAl0MuobAC_lVJE70toQVrPt2ZlzrlwYALuLHE,10151
|
|
616
616
|
chalk/features/_encoding/json.py,sha256=lHSBWIjNKMDmt_AmiFtf4ZsW5QPIEC6r7NvDW0IdqPI,13804
|
|
@@ -661,9 +661,9 @@ chalk/parsed/_graph_validation.py,sha256=XHVPw4cf-nkPdHrqGXevsFuOrMtWtibUTRkTuiz
|
|
|
661
661
|
chalk/parsed/_metadata.py,sha256=TCjKr20Fs4Yguo97yKjATurwOdV-DoFQeiGxbX_s1hs,6749
|
|
662
662
|
chalk/parsed/branch_state.py,sha256=g3sCyjOWlcc3rJwTF-ZVoWMbFWmzJQVDjnQQ2x7mrtQ,8306
|
|
663
663
|
chalk/parsed/branch_state_rich.py,sha256=X9st1vRMRMOfnEy3hwitsAyNcTzZlubXJt9jI1MlNoo,3911
|
|
664
|
-
chalk/parsed/duplicate_input_gql.py,sha256=
|
|
664
|
+
chalk/parsed/duplicate_input_gql.py,sha256=IbVRKDCS-M7f9k127LpeVjRlXvzp1tuIek-bOqTULC4,20196
|
|
665
665
|
chalk/parsed/expressions.py,sha256=A8U54v9jacLX4UVtLqSUYUjL-lOnI-kWvG2hHZvfYE0,554
|
|
666
|
-
chalk/parsed/json_conversions.py,sha256=
|
|
666
|
+
chalk/parsed/json_conversions.py,sha256=GRBg2KvwahP1tXwr7n--s7ueULN6prEDPO2I9B9MWzk,30459
|
|
667
667
|
chalk/parsed/to_proto.py,sha256=Ajq20zLvHlnGjP1YhvMbsEFo5Jw5q9NUT9GqlM4y4no,75025
|
|
668
668
|
chalk/parsed/user_types_to_json.py,sha256=ZJWdYFqyhr5InvItQybtHadXQjW3vjHrv8hjMGtL3Bc,13318
|
|
669
669
|
chalk/parsed/validation_from_registries.py,sha256=nfiAj1tvWRu0RrkhkGtElhAsL8V7ayEKUisrKQF-wYc,7900
|
|
@@ -675,7 +675,7 @@ chalk/parsed/_proto/validation.py,sha256=D6dOnCoeARHOLPHQb8zYGXDc0eWJblSQ4tO4rb_
|
|
|
675
675
|
chalk/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
676
676
|
chalk/queries/named_query.py,sha256=Yc_g7QYCmEbgKneGPQ8FPsKeic6B3MY2LeX4fPEHyWc,8537
|
|
677
677
|
chalk/queries/query_context.py,sha256=O8ZVXq2cD3YnhIzRHOtewlRl4ur-Pzsz4SricO3H7Fo,2989
|
|
678
|
-
chalk/queries/scheduled_query.py,sha256=
|
|
678
|
+
chalk/queries/scheduled_query.py,sha256=VJ4rIXpVIwhmSsaOHuJ6TUsafSGIjLZfb-mz0S7dAjY,7145
|
|
679
679
|
chalk/serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
680
680
|
chalk/serialization/parsed_annotation.py,sha256=1-xwevPMsZ9E407SuRWZdRQKMuR2TligWprkmdb5dxM,25526
|
|
681
681
|
chalk/sink/__init__.py,sha256=R58HP9J4hSJbYiKk7xg-uTN3hmpLlt7knLHkco2JdlU,101
|
|
@@ -688,7 +688,7 @@ chalk/sql/_internal/chalk_query.py,sha256=O2Mv0JHWvSrP3iDfkooy22yoDuWAH57m1i8qcy
|
|
|
688
688
|
chalk/sql/_internal/incremental.py,sha256=xqnohrZIoqE3y92edUl_oEkHQoFZw9GN8GIOUynyyEI,2900
|
|
689
689
|
chalk/sql/_internal/query_execution_parameters.py,sha256=FT0GixOryGeKR1x7UrQNoGFtySd_8-B4Xrp38nFi0FU,3679
|
|
690
690
|
chalk/sql/_internal/query_registry.py,sha256=jOk2x9NvW2pZocI_iTvgd9DyOlr4-ajz8rTi0kkLSaI,3005
|
|
691
|
-
chalk/sql/_internal/sql_file_resolver.py,sha256=
|
|
691
|
+
chalk/sql/_internal/sql_file_resolver.py,sha256=BCGTpe3tVLQTWNSrfyUFsg8VfO-pupeN8yxGpiSmy5E,77817
|
|
692
692
|
chalk/sql/_internal/sql_settings.py,sha256=9lcpHNrmEhr1Zxl_Ct7U0p0AbLUvlpSayxHEPmyqu8E,543
|
|
693
693
|
chalk/sql/_internal/sql_source.py,sha256=D5GEYIBVyGpsb66qcXasJaldM6uhE4sZSaaTbYqd3Q4,42302
|
|
694
694
|
chalk/sql/_internal/sql_source_group.py,sha256=RIMEjEG3oSGwign37w9avpCRdVfVQepR8SPVv6JoOx0,5562
|
|
@@ -764,8 +764,8 @@ chalk/utils/tracing.py,sha256=Glx8YrtjWy0zE5YbpgfgcsLDshAKnnYm9poiWNeCxXs,11075
|
|
|
764
764
|
chalk/utils/weak_set_by_identity.py,sha256=VmikA_laYwFeOphCwXJIuyOIkrdlQe0bSzaXq7onoQw,953
|
|
765
765
|
chalk/utils/pydanticutil/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
766
766
|
chalk/utils/pydanticutil/pydantic_compat.py,sha256=O575lLYJ5GvZC4HMzR9yATxf9XwjC6NrDUXbNwZidlE,3031
|
|
767
|
-
chalkpy-2.93.
|
|
768
|
-
chalkpy-2.93.
|
|
769
|
-
chalkpy-2.93.
|
|
770
|
-
chalkpy-2.93.
|
|
771
|
-
chalkpy-2.93.
|
|
767
|
+
chalkpy-2.93.4.dist-info/METADATA,sha256=YmIFo4vQ1F-AsT9gysGlfwvEo_6yD_5QFHPfM-pUDKI,27494
|
|
768
|
+
chalkpy-2.93.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
769
|
+
chalkpy-2.93.4.dist-info/entry_points.txt,sha256=Vg23sd8icwq-morJrljVFr-kQnMbm95rZfZj5wsZGis,42
|
|
770
|
+
chalkpy-2.93.4.dist-info/top_level.txt,sha256=1Q6_19IGYfNxSw50W8tYKEJ2t5HKQ3W9Wiw4ia5yg2c,6
|
|
771
|
+
chalkpy-2.93.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|