everyrow 0.1.10__py3-none-any.whl → 0.2.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.
- everyrow/__init__.py +8 -1
- everyrow/api_utils.py +5 -1
- everyrow/billing.py +29 -0
- everyrow/constants.py +1 -1
- everyrow/generated/__init__.py +1 -1
- everyrow/generated/api/{default/interrupt_chat_task_tasks_chat_interrupt_post.py → artifacts/create_artifact_artifacts_post.py} +38 -32
- everyrow/generated/api/billing/__init__.py +1 -0
- everyrow/generated/api/{default/get_queues_stats_jobs_queues_get.py → billing/get_billing_balance_billing_get.py} +25 -17
- everyrow/generated/api/operations/__init__.py +1 -0
- everyrow/generated/api/{default/re_execute_task_endpoint_tasks_re_execute_post.py → operations/agent_map_operations_agent_map_post.py} +53 -41
- everyrow/generated/api/{default/create_workflow_from_artifact_workflows_from_artifact_post.py → operations/dedupe_operations_dedupe_post.py} +39 -33
- everyrow/generated/api/{default/submit_task_tasks_post.py → operations/merge_operations_merge_post.py} +37 -29
- everyrow/generated/api/{default/copy_workflow_endpoint_workflows_copy_post.py → operations/rank_operations_rank_post.py} +43 -29
- everyrow/generated/api/{default/export_to_google_sheets_export_post.py → operations/screen_operations_screen_post.py} +43 -31
- everyrow/generated/api/operations/single_agent_operations_single_agent_post.py +236 -0
- everyrow/generated/api/sessions/__init__.py +1 -0
- everyrow/generated/api/{default/copy_artifacts_artifacts_copy_post.py → sessions/create_session_endpoint_sessions_post.py} +35 -27
- everyrow/generated/api/tasks/__init__.py +1 -0
- everyrow/generated/api/{default/get_job_progress_for_task_jobs_progress_get.py → tasks/get_task_result_tasks_task_id_result_get.py} +45 -33
- everyrow/generated/api/{default/get_task_status_endpoint_tasks_task_id_status_get.py → tasks/get_task_status_tasks_task_id_status_get.py} +24 -42
- everyrow/generated/models/__init__.py +82 -266
- everyrow/generated/models/agent_map_operation.py +315 -0
- everyrow/generated/models/{artifact_group_record_metadata_type_0.py → agent_map_operation_input_type_1_item.py} +5 -5
- everyrow/generated/models/agent_map_operation_input_type_2.py +46 -0
- everyrow/generated/models/{standalone_artifact_record_analysis_type_0.py → agent_map_operation_response_schema_type_0.py} +5 -5
- everyrow/generated/models/{create_query_params.py → billing_response.py} +13 -12
- everyrow/generated/models/{continue_task_request.py → create_artifact_request.py} +43 -43
- everyrow/generated/models/create_artifact_request_data_type_0_item.py +46 -0
- everyrow/generated/models/{task_metadata_cols_to_rename_type_0.py → create_artifact_request_data_type_1.py} +5 -5
- everyrow/generated/models/{copy_artifacts_response.py → create_artifact_response.py} +12 -12
- everyrow/generated/models/{create_session_request.py → create_session.py} +6 -7
- everyrow/generated/models/dedupe_operation.py +151 -0
- everyrow/generated/models/dedupe_operation_input_type_1_item.py +46 -0
- everyrow/generated/models/{import_request_token_data.py → dedupe_operation_input_type_2.py} +5 -5
- everyrow/generated/models/error_response.py +109 -0
- everyrow/generated/models/{task_insert_query_params.py → error_response_details_type_0.py} +5 -5
- everyrow/generated/models/insufficient_balance_error.py +8 -0
- everyrow/generated/models/{llm_enum.py → llm_enum_public.py} +1 -20
- everyrow/generated/models/merge_operation.py +278 -0
- everyrow/generated/models/merge_operation_left_input_type_1_item.py +46 -0
- everyrow/generated/models/{chat_completion_message_tool_call.py → merge_operation_left_input_type_2.py} +5 -5
- everyrow/generated/models/merge_operation_right_input_type_1_item.py +46 -0
- everyrow/generated/models/merge_operation_right_input_type_2.py +46 -0
- everyrow/generated/models/merge_operation_use_web_search_type_0.py +10 -0
- everyrow/generated/models/operation_response.py +131 -0
- everyrow/generated/models/{multi_agent_effort_level.py → public_effort_level.py} +1 -1
- everyrow/generated/models/public_task_type.py +12 -0
- everyrow/generated/models/rank_operation.py +203 -0
- everyrow/generated/models/rank_operation_input_type_1_item.py +46 -0
- everyrow/generated/models/{export_request_token_data.py → rank_operation_input_type_2.py} +5 -5
- everyrow/generated/models/{artifact_group_record_analysis_type_0.py → rank_operation_response_schema_type_0.py} +5 -5
- everyrow/generated/models/screen_operation.py +186 -0
- everyrow/generated/models/screen_operation_input_type_1_item.py +46 -0
- everyrow/generated/models/screen_operation_input_type_2.py +46 -0
- everyrow/generated/models/screen_operation_response_schema_type_0.py +46 -0
- everyrow/generated/models/{create_session_response.py → session_response.py} +7 -8
- everyrow/generated/models/single_agent_operation.py +304 -0
- everyrow/generated/models/single_agent_operation_input_type_1_item.py +46 -0
- everyrow/generated/models/single_agent_operation_input_type_2.py +46 -0
- everyrow/generated/models/single_agent_operation_response_schema_type_0.py +46 -0
- everyrow/generated/models/task_result_response.py +185 -0
- everyrow/generated/models/task_result_response_data_type_0_item.py +46 -0
- everyrow/generated/models/task_result_response_data_type_1.py +46 -0
- everyrow/generated/models/task_status_response.py +99 -19
- everyrow/ops.py +360 -434
- everyrow/session.py +5 -7
- everyrow/task.py +68 -115
- {everyrow-0.1.10.dist-info → everyrow-0.2.0.dist-info}/METADATA +22 -8
- everyrow-0.2.0.dist-info/RECORD +81 -0
- everyrow/citations.py +0 -50
- everyrow/generated/api/default/continue_task_endpoint_tasks_continue_post.py +0 -208
- everyrow/generated/api/default/create_api_key_endpoint_api_keys_create_post.py +0 -186
- everyrow/generated/api/default/create_session_endpoint_sessions_create_post.py +0 -198
- everyrow/generated/api/default/generate_feedback_endpoint_tasks_generate_feedback_post.py +0 -186
- everyrow/generated/api/default/get_artifacts_artifacts_get.py +0 -260
- everyrow/generated/api/default/get_default_timeout_seconds_models_default_timeout_seconds_get.py +0 -165
- everyrow/generated/api/default/get_metrics_metrics_get.py +0 -80
- everyrow/generated/api/default/get_user_usage_usage_get.py +0 -123
- everyrow/generated/api/default/healthz_healthz_get.py +0 -127
- everyrow/generated/api/default/import_from_google_sheets_import_post.py +0 -170
- everyrow/generated/api/default/list_api_keys_endpoint_api_keys_get.py +0 -186
- everyrow/generated/api/default/revoke_api_key_endpoint_api_keys_key_id_revoke_post.py +0 -181
- everyrow/generated/api/default/revoke_jobs_for_task_jobs_revoke_post.py +0 -164
- everyrow/generated/api/default/rollback_to_message_endpoint_tasks_chat_rollback_post.py +0 -186
- everyrow/generated/api/default/submit_chat_task_tasks_chat_post.py +0 -164
- everyrow/generated/api/default/task_resource_estimation_task_resource_estimation_post.py +0 -319
- everyrow/generated/api/default/trigger_workflow_execution_endpoint_workflows_trigger_post.py +0 -166
- everyrow/generated/api/default/whoami_whoami_get.py +0 -127
- everyrow/generated/models/agent_improvement_instruction.py +0 -69
- everyrow/generated/models/agent_query_params.py +0 -383
- everyrow/generated/models/agent_query_params_system_prompt_kind_type_0.py +0 -10
- everyrow/generated/models/agent_task_args.py +0 -163
- everyrow/generated/models/agent_task_args_processing_mode.py +0 -9
- everyrow/generated/models/allowed_suggestions.py +0 -9
- everyrow/generated/models/api_key_info.py +0 -163
- everyrow/generated/models/artifact_changed_payload.py +0 -89
- everyrow/generated/models/artifact_group_record.py +0 -363
- everyrow/generated/models/artifact_group_record_trace_mapping_type_0.py +0 -46
- everyrow/generated/models/artifact_status.py +0 -14
- everyrow/generated/models/auto_cohort_conversation_message.py +0 -533
- everyrow/generated/models/aux_data.py +0 -128
- everyrow/generated/models/aux_data_source_bank.py +0 -59
- everyrow/generated/models/chat_message_metadata.py +0 -193
- everyrow/generated/models/concatenate_query_params.py +0 -46
- everyrow/generated/models/concatenate_request.py +0 -306
- everyrow/generated/models/continue_reason.py +0 -9
- everyrow/generated/models/controller_improvement_round.py +0 -79
- everyrow/generated/models/conversation_changed_payload.py +0 -89
- everyrow/generated/models/copy_artifacts_request.py +0 -70
- everyrow/generated/models/copy_workflow_request.py +0 -62
- everyrow/generated/models/copy_workflow_response.py +0 -70
- everyrow/generated/models/create_api_key_request.py +0 -95
- everyrow/generated/models/create_api_key_response.py +0 -96
- everyrow/generated/models/create_group_query_params.py +0 -61
- everyrow/generated/models/create_group_request.py +0 -305
- everyrow/generated/models/create_request.py +0 -305
- everyrow/generated/models/create_workflow_from_artifact_request.py +0 -92
- everyrow/generated/models/create_workflow_from_artifact_response.py +0 -70
- everyrow/generated/models/data_frame_method.py +0 -18
- everyrow/generated/models/date_cutoffs.py +0 -145
- everyrow/generated/models/dedupe_public_params.py +0 -64
- everyrow/generated/models/dedupe_request_params.py +0 -311
- everyrow/generated/models/deep_merge_public_params.py +0 -143
- everyrow/generated/models/deep_merge_request.py +0 -313
- everyrow/generated/models/deep_rank_public_params.py +0 -109
- everyrow/generated/models/deep_rank_request.py +0 -313
- everyrow/generated/models/deep_screen_public_params.py +0 -132
- everyrow/generated/models/deep_screen_request.py +0 -313
- everyrow/generated/models/derive_expression.py +0 -69
- everyrow/generated/models/derive_query_params.py +0 -75
- everyrow/generated/models/derive_request.py +0 -307
- everyrow/generated/models/document_query_tool.py +0 -12
- everyrow/generated/models/drop_columns_query_params.py +0 -61
- everyrow/generated/models/drop_columns_request.py +0 -305
- everyrow/generated/models/event_type.py +0 -14
- everyrow/generated/models/execution_metadata.py +0 -146
- everyrow/generated/models/export_request.py +0 -75
- everyrow/generated/models/export_to_google_sheets_export_post_response_export_to_google_sheets_export_post.py +0 -46
- everyrow/generated/models/filter_query_params.py +0 -91
- everyrow/generated/models/filter_request.py +0 -305
- everyrow/generated/models/flatten_query_params.py +0 -46
- everyrow/generated/models/flatten_request.py +0 -305
- everyrow/generated/models/generate_feedback_request.py +0 -62
- everyrow/generated/models/group_by_query_params.py +0 -62
- everyrow/generated/models/group_by_request.py +0 -305
- everyrow/generated/models/healthz_healthz_get_response_healthz_healthz_get.py +0 -46
- everyrow/generated/models/image_chat_content_part.py +0 -80
- everyrow/generated/models/image_chat_content_part_image_url.py +0 -46
- everyrow/generated/models/import_from_google_sheets_import_post_response_import_from_google_sheets_import_post.py +0 -46
- everyrow/generated/models/import_request.py +0 -83
- everyrow/generated/models/join_query_params.py +0 -73
- everyrow/generated/models/join_request.py +0 -305
- everyrow/generated/models/map_agent_request_params.py +0 -313
- everyrow/generated/models/map_multi_agent_request_params.py +0 -313
- everyrow/generated/models/message_created_payload.py +0 -98
- everyrow/generated/models/multi_agent_query_params.py +0 -264
- everyrow/generated/models/multi_modal_chat_message.py +0 -160
- everyrow/generated/models/multi_modal_chat_message_role.py +0 -10
- everyrow/generated/models/preview_metadata.py +0 -144
- everyrow/generated/models/processing_mode.py +0 -10
- everyrow/generated/models/progress_status.py +0 -83
- everyrow/generated/models/queue_stats.py +0 -77
- everyrow/generated/models/reduce_agent_request_params.py +0 -305
- everyrow/generated/models/reduce_multi_agent_request_params.py +0 -305
- everyrow/generated/models/resource_estimation_response.py +0 -85
- everyrow/generated/models/response_schema_type.py +0 -9
- everyrow/generated/models/revoke_api_key_response.py +0 -61
- everyrow/generated/models/rollback_to_message_request.py +0 -62
- everyrow/generated/models/rollback_to_message_response.py +0 -77
- everyrow/generated/models/session_changed_payload.py +0 -69
- everyrow/generated/models/simple_chat_message.py +0 -121
- everyrow/generated/models/simple_chat_message_role.py +0 -10
- everyrow/generated/models/simple_chat_message_with_tool_calls.py +0 -156
- everyrow/generated/models/source_database_entry.py +0 -92
- everyrow/generated/models/standalone_artifact_record.py +0 -311
- everyrow/generated/models/standalone_artifact_record_metadata_type_0.py +0 -46
- everyrow/generated/models/standalone_artifact_record_trace_mapping_type_0.py +0 -46
- everyrow/generated/models/status_count.py +0 -71
- everyrow/generated/models/status_count_status.py +0 -13
- everyrow/generated/models/submit_chat_task_body.py +0 -497
- everyrow/generated/models/submit_chat_task_body_selected_task_type_type_0.py +0 -11
- everyrow/generated/models/submit_task_body.py +0 -745
- everyrow/generated/models/task_changed_payload.py +0 -105
- everyrow/generated/models/task_effort.py +0 -10
- everyrow/generated/models/task_id_request.py +0 -62
- everyrow/generated/models/task_insert.py +0 -725
- everyrow/generated/models/task_metadata.py +0 -323
- everyrow/generated/models/task_response.py +0 -62
- everyrow/generated/models/task_type.py +0 -31
- everyrow/generated/models/text_chat_content_part.py +0 -74
- everyrow/generated/models/tool_response_message.py +0 -127
- everyrow/generated/models/toolkit_constants.py +0 -80
- everyrow/generated/models/trace_changed_payload.py +0 -94
- everyrow/generated/models/trace_info.py +0 -78
- everyrow/generated/models/trigger_workflow_execution_request.py +0 -112
- everyrow/generated/models/trigger_workflow_execution_request_task_params.py +0 -65
- everyrow/generated/models/trigger_workflow_execution_request_task_params_additional_property.py +0 -46
- everyrow/generated/models/trigger_workflow_execution_response.py +0 -69
- everyrow/generated/models/upload_csv_payload.py +0 -310
- everyrow/generated/models/upload_csv_query_params.py +0 -114
- everyrow/generated/models/usage_response.py +0 -77
- everyrow/generated/models/whoami_whoami_get_response_whoami_whoami_get.py +0 -46
- everyrow/generated/models/workflow_leaf_node_input.py +0 -70
- everyrow-0.1.10.dist-info/RECORD +0 -183
- /everyrow/generated/api/{default → artifacts}/__init__.py +0 -0
- {everyrow-0.1.10.dist-info → everyrow-0.2.0.dist-info}/WHEEL +0 -0
- {everyrow-0.1.10.dist-info → everyrow-0.2.0.dist-info}/licenses/LICENSE.txt +0 -0
everyrow/session.py
CHANGED
|
@@ -5,11 +5,11 @@ from datetime import datetime
|
|
|
5
5
|
from uuid import UUID
|
|
6
6
|
|
|
7
7
|
from everyrow.api_utils import create_client, handle_response
|
|
8
|
-
from everyrow.generated.api.
|
|
9
|
-
|
|
8
|
+
from everyrow.generated.api.sessions import (
|
|
9
|
+
create_session_endpoint_sessions_post,
|
|
10
10
|
)
|
|
11
11
|
from everyrow.generated.client import AuthenticatedClient
|
|
12
|
-
from everyrow.generated.models.
|
|
12
|
+
from everyrow.generated.models.create_session import CreateSession
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class Session:
|
|
@@ -61,11 +61,9 @@ async def create_session(
|
|
|
61
61
|
await client.__aenter__()
|
|
62
62
|
|
|
63
63
|
try:
|
|
64
|
-
response = await
|
|
64
|
+
response = await create_session_endpoint_sessions_post.asyncio(
|
|
65
65
|
client=client,
|
|
66
|
-
body=
|
|
67
|
-
name=name or f"everyrow-sdk-session-{datetime.now().isoformat()}"
|
|
68
|
-
),
|
|
66
|
+
body=CreateSession(name=name or f"everyrow-sdk-session-{datetime.now().isoformat()}"),
|
|
69
67
|
)
|
|
70
68
|
response = handle_response(response)
|
|
71
69
|
session = Session(client=client, session_id=response.session_id)
|
everyrow/task.py
CHANGED
|
@@ -1,33 +1,36 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from
|
|
2
|
+
from enum import StrEnum
|
|
3
|
+
from typing import TypeVar
|
|
3
4
|
from uuid import UUID
|
|
4
5
|
|
|
5
6
|
from pandas import DataFrame
|
|
6
7
|
from pydantic.main import BaseModel
|
|
7
8
|
|
|
8
9
|
from everyrow.api_utils import create_client, handle_response
|
|
9
|
-
from everyrow.citations import render_citations_group, render_citations_standalone
|
|
10
10
|
from everyrow.constants import EveryrowError
|
|
11
|
-
from everyrow.generated.api.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
submit_task_tasks_post,
|
|
11
|
+
from everyrow.generated.api.tasks import (
|
|
12
|
+
get_task_result_tasks_task_id_result_get,
|
|
13
|
+
get_task_status_tasks_task_id_status_get,
|
|
15
14
|
)
|
|
16
15
|
from everyrow.generated.client import AuthenticatedClient
|
|
17
16
|
from everyrow.generated.models import (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
TaskEffort,
|
|
17
|
+
LLMEnumPublic,
|
|
18
|
+
TaskResultResponse,
|
|
19
|
+
TaskResultResponseDataType1,
|
|
22
20
|
TaskStatus,
|
|
23
21
|
TaskStatusResponse,
|
|
24
22
|
)
|
|
25
|
-
from everyrow.generated.
|
|
23
|
+
from everyrow.generated.types import Unset
|
|
26
24
|
from everyrow.result import ScalarResult, TableResult
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
LLM = LLMEnumPublic
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class EffortLevel(StrEnum):
|
|
30
|
+
LOW = "low"
|
|
31
|
+
MEDIUM = "medium"
|
|
32
|
+
HIGH = "high"
|
|
33
|
+
|
|
31
34
|
|
|
32
35
|
T = TypeVar("T", bound=BaseModel)
|
|
33
36
|
|
|
@@ -41,71 +44,57 @@ class EveryrowTask[T: BaseModel]:
|
|
|
41
44
|
self._is_expand = is_expand
|
|
42
45
|
self._response_model = response_model
|
|
43
46
|
|
|
44
|
-
|
|
47
|
+
def set_submitted(
|
|
45
48
|
self,
|
|
46
|
-
|
|
49
|
+
task_id: UUID,
|
|
50
|
+
session_id: UUID,
|
|
47
51
|
client: AuthenticatedClient,
|
|
48
|
-
) ->
|
|
49
|
-
task_id = await submit_task(body, client)
|
|
52
|
+
) -> None:
|
|
50
53
|
self.task_id = task_id
|
|
51
|
-
self.session_id =
|
|
54
|
+
self.session_id = session_id
|
|
52
55
|
self._client = client
|
|
53
|
-
return task_id
|
|
54
56
|
|
|
55
|
-
async def get_status(
|
|
56
|
-
self, client: AuthenticatedClient | None = None
|
|
57
|
-
) -> TaskStatusResponse:
|
|
57
|
+
async def get_status(self, client: AuthenticatedClient | None = None) -> TaskStatusResponse:
|
|
58
58
|
if self.task_id is None:
|
|
59
59
|
raise EveryrowError("Task must be submitted before fetching status")
|
|
60
60
|
client = client or self._client
|
|
61
61
|
if client is None:
|
|
62
|
-
raise EveryrowError(
|
|
63
|
-
"No client available. Provide a client or use the task within a session context."
|
|
64
|
-
)
|
|
62
|
+
raise EveryrowError("No client available. Provide a client or use the task within a session context.")
|
|
65
63
|
return await get_task_status(self.task_id, client)
|
|
66
64
|
|
|
67
|
-
async def await_result(
|
|
68
|
-
self, client: AuthenticatedClient | None = None
|
|
69
|
-
) -> TableResult | ScalarResult[T]:
|
|
65
|
+
async def await_result(self, client: AuthenticatedClient | None = None) -> TableResult | ScalarResult[T]:
|
|
70
66
|
if self.task_id is None:
|
|
71
67
|
raise EveryrowError("Task must be submitted before awaiting result")
|
|
72
68
|
client = client or self._client
|
|
73
69
|
if client is None:
|
|
74
|
-
raise EveryrowError(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
artifact_id =
|
|
79
|
-
|
|
80
|
-
)
|
|
70
|
+
raise EveryrowError("No client available. Provide a client or use the task within a session context.")
|
|
71
|
+
final_status = await await_task_completion(self.task_id, client)
|
|
72
|
+
|
|
73
|
+
result_response = await get_task_result(self.task_id, client)
|
|
74
|
+
artifact_id = result_response.artifact_id
|
|
75
|
+
|
|
76
|
+
if isinstance(artifact_id, Unset) or artifact_id is None:
|
|
77
|
+
raise EveryrowError("Task result has no artifact ID")
|
|
78
|
+
|
|
79
|
+
error = final_status.error if not isinstance(final_status.error, Unset) else None
|
|
81
80
|
|
|
82
81
|
if self._is_map or self._is_expand:
|
|
83
|
-
data =
|
|
82
|
+
data = _extract_table_data(result_response)
|
|
84
83
|
return TableResult(
|
|
85
84
|
artifact_id=artifact_id,
|
|
86
85
|
data=data,
|
|
87
|
-
error=
|
|
86
|
+
error=error,
|
|
88
87
|
)
|
|
89
88
|
else:
|
|
90
|
-
data =
|
|
91
|
-
artifact_id, self._response_model, client=client
|
|
92
|
-
)
|
|
89
|
+
data = _extract_scalar_data(result_response, self._response_model)
|
|
93
90
|
return ScalarResult(
|
|
94
91
|
artifact_id=artifact_id,
|
|
95
92
|
data=data,
|
|
96
|
-
error=
|
|
93
|
+
error=error,
|
|
97
94
|
)
|
|
98
95
|
|
|
99
96
|
|
|
100
|
-
async def
|
|
101
|
-
response = await submit_task_tasks_post.asyncio(client=client, body=body)
|
|
102
|
-
response = handle_response(response)
|
|
103
|
-
return response.task_id
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
async def await_task_completion(
|
|
107
|
-
task_id: UUID, client: AuthenticatedClient
|
|
108
|
-
) -> TaskStatusResponse:
|
|
97
|
+
async def await_task_completion(task_id: UUID, client: AuthenticatedClient) -> TaskStatusResponse:
|
|
109
98
|
max_retries = 3
|
|
110
99
|
retries = 0
|
|
111
100
|
while True:
|
|
@@ -113,9 +102,7 @@ async def await_task_completion(
|
|
|
113
102
|
status_response = await get_task_status(task_id, client)
|
|
114
103
|
except Exception as e:
|
|
115
104
|
if retries >= max_retries:
|
|
116
|
-
raise EveryrowError(
|
|
117
|
-
f"Failed to get task status after {max_retries} retries"
|
|
118
|
-
) from e
|
|
105
|
+
raise EveryrowError(f"Failed to get task status after {max_retries} retries") from e
|
|
119
106
|
retries += 1
|
|
120
107
|
else:
|
|
121
108
|
retries = 0
|
|
@@ -126,64 +113,42 @@ async def await_task_completion(
|
|
|
126
113
|
):
|
|
127
114
|
break
|
|
128
115
|
await asyncio.sleep(1)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
)
|
|
116
|
+
|
|
117
|
+
if status_response.status == TaskStatus.FAILED:
|
|
118
|
+
error_msg = status_response.error if not isinstance(status_response.error, Unset) else "Unknown error"
|
|
119
|
+
raise EveryrowError(f"Task failed: {error_msg}")
|
|
120
|
+
|
|
121
|
+
if status_response.status == TaskStatus.REVOKED:
|
|
122
|
+
raise EveryrowError("Task was revoked")
|
|
136
123
|
|
|
137
124
|
return status_response
|
|
138
125
|
|
|
139
126
|
|
|
140
|
-
async def get_task_status(
|
|
141
|
-
task_id
|
|
142
|
-
) -> TaskStatusResponse:
|
|
143
|
-
response = await get_task_status_endpoint_tasks_task_id_status_get.asyncio(
|
|
144
|
-
client=client, task_id=task_id
|
|
145
|
-
)
|
|
127
|
+
async def get_task_status(task_id: UUID, client: AuthenticatedClient) -> TaskStatusResponse:
|
|
128
|
+
response = await get_task_status_tasks_task_id_status_get.asyncio(task_id=task_id, client=client)
|
|
146
129
|
response = handle_response(response)
|
|
147
130
|
return response
|
|
148
131
|
|
|
149
132
|
|
|
150
|
-
async def
|
|
151
|
-
|
|
152
|
-
client: AuthenticatedClient,
|
|
153
|
-
) -> DataFrame:
|
|
154
|
-
response = await get_artifacts_artifacts_get.asyncio(
|
|
155
|
-
client=client, artifact_ids=[artifact_id]
|
|
156
|
-
)
|
|
133
|
+
async def get_task_result(task_id: UUID, client: AuthenticatedClient) -> TaskResultResponse:
|
|
134
|
+
response = await get_task_result_tasks_task_id_result_get.asyncio(task_id=task_id, client=client)
|
|
157
135
|
response = handle_response(response)
|
|
158
|
-
|
|
159
|
-
raise EveryrowError(f"Expected 1 artifact, got {len(response)}")
|
|
160
|
-
artifact = response[0]
|
|
161
|
-
if not isinstance(artifact, ArtifactGroupRecord):
|
|
162
|
-
raise EveryrowError("Expected table result, but got a scalar")
|
|
163
|
-
|
|
164
|
-
artifact = render_citations_group(artifact)
|
|
165
|
-
|
|
166
|
-
return DataFrame([a.data for a in artifact.artifacts])
|
|
136
|
+
return response
|
|
167
137
|
|
|
168
138
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
)
|
|
174
|
-
response = await get_artifacts_artifacts_get.asyncio(
|
|
175
|
-
client=client, artifact_ids=[artifact_id]
|
|
176
|
-
)
|
|
177
|
-
response = handle_response(response)
|
|
178
|
-
if len(response) != 1:
|
|
179
|
-
raise EveryrowError(f"Expected 1 artifact, got {len(response)}")
|
|
180
|
-
artifact = response[0]
|
|
181
|
-
if not isinstance(artifact, StandaloneArtifactRecord):
|
|
182
|
-
raise EveryrowError("Expected scalar result, but got a table")
|
|
139
|
+
def _extract_table_data(result: TaskResultResponse) -> DataFrame:
|
|
140
|
+
if isinstance(result.data, list):
|
|
141
|
+
records = [item.additional_properties for item in result.data]
|
|
142
|
+
return DataFrame(records)
|
|
143
|
+
raise EveryrowError("Expected table result (list of records), but got scalar or null")
|
|
183
144
|
|
|
184
|
-
artifact = render_citations_standalone(artifact)
|
|
185
145
|
|
|
186
|
-
|
|
146
|
+
def _extract_scalar_data[T: BaseModel](result: TaskResultResponse, response_model: type[T]) -> T:
|
|
147
|
+
if isinstance(result.data, TaskResultResponseDataType1):
|
|
148
|
+
return response_model(**result.data.additional_properties)
|
|
149
|
+
if isinstance(result.data, list) and len(result.data) == 1:
|
|
150
|
+
return response_model(**result.data[0].additional_properties)
|
|
151
|
+
raise EveryrowError("Expected scalar result, but got table or null")
|
|
187
152
|
|
|
188
153
|
|
|
189
154
|
async def fetch_task_data(
|
|
@@ -192,9 +157,6 @@ async def fetch_task_data(
|
|
|
192
157
|
) -> DataFrame:
|
|
193
158
|
"""Fetch the result data for a completed task as a pandas DataFrame.
|
|
194
159
|
|
|
195
|
-
This is a convenience helper that retrieves the table-level group artifact
|
|
196
|
-
associated with a task and returns it as a DataFrame.
|
|
197
|
-
|
|
198
160
|
Args:
|
|
199
161
|
task_id: The UUID of the task to fetch data for (can be a string or UUID).
|
|
200
162
|
client: Optional authenticated client. If not provided, one will be created
|
|
@@ -205,11 +167,6 @@ async def fetch_task_data(
|
|
|
205
167
|
|
|
206
168
|
Raises:
|
|
207
169
|
EveryrowError: If the task has not completed, failed, or has no artifact.
|
|
208
|
-
|
|
209
|
-
Example:
|
|
210
|
-
>>> from everyrow import fetch_task_data
|
|
211
|
-
>>> df = await fetch_task_data("12345678-1234-1234-1234-123456789abc")
|
|
212
|
-
>>> print(df.head())
|
|
213
170
|
"""
|
|
214
171
|
if isinstance(task_id, str):
|
|
215
172
|
task_id = UUID(task_id)
|
|
@@ -219,12 +176,8 @@ async def fetch_task_data(
|
|
|
219
176
|
|
|
220
177
|
status_response = await get_task_status(task_id, client)
|
|
221
178
|
|
|
222
|
-
if status_response.status
|
|
223
|
-
raise EveryrowError(
|
|
224
|
-
f"Task {task_id} is not completed (status: {status_response.status.value}). Error: {status_response.error}"
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
if status_response.artifact_id is None:
|
|
228
|
-
raise EveryrowError(f"Task {task_id} has no associated artifact.")
|
|
179
|
+
if status_response.status != TaskStatus.COMPLETED:
|
|
180
|
+
raise EveryrowError(f"Task {task_id} is not completed (status: {status_response.status.value}).")
|
|
229
181
|
|
|
230
|
-
|
|
182
|
+
result_response = await get_task_result(task_id, client)
|
|
183
|
+
return _extract_table_data(result_response)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: everyrow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: An SDK for everyrow.io: agent ops at spreadsheet scale
|
|
5
5
|
License-File: LICENSE.txt
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -213,7 +213,7 @@ result = await agent_map(
|
|
|
213
213
|
print(result.data.head())
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
-
**More:** [docs](docs/
|
|
216
|
+
**More:** [docs](docs/reference/RESEARCH.md) / [basic usage](docs/case_studies/basic-usage/notebook.ipynb)
|
|
217
217
|
|
|
218
218
|
### Derive
|
|
219
219
|
|
|
@@ -355,11 +355,12 @@ lefthook install
|
|
|
355
355
|
```
|
|
356
356
|
|
|
357
357
|
```bash
|
|
358
|
-
uv run pytest
|
|
359
|
-
uv run
|
|
360
|
-
uv run ruff
|
|
361
|
-
uv run
|
|
362
|
-
|
|
358
|
+
uv run pytest # unit tests
|
|
359
|
+
uv run --env-file .env pytest -m integration # integration tests (requires EVERYROW_API_KEY)
|
|
360
|
+
uv run ruff check . # lint
|
|
361
|
+
uv run ruff format . # format
|
|
362
|
+
uv run basedpyright # type check
|
|
363
|
+
./generate_openapi.sh # regenerate client
|
|
363
364
|
```
|
|
364
365
|
|
|
365
366
|
---
|
|
@@ -370,4 +371,17 @@ Built by [FutureSearch](https://futuresearch.ai). We kept running into the same
|
|
|
370
371
|
|
|
371
372
|
[everyrow.io](https://everyrow.io) (app/dashboard) · [case studies](https://futuresearch.ai/solutions/) · [research](https://futuresearch.ai/research/)
|
|
372
373
|
|
|
373
|
-
|
|
374
|
+
**Citing everyrow:** If you use this software in your research, please cite it using the metadata in [CITATION.cff](CITATION.cff) or the BibTeX below:
|
|
375
|
+
|
|
376
|
+
```bibtex
|
|
377
|
+
@software{everyrow,
|
|
378
|
+
author = {FutureSearch},
|
|
379
|
+
title = {everyrow},
|
|
380
|
+
url = {https://github.com/futuresearch/everyrow-sdk},
|
|
381
|
+
version = {0.2.0},
|
|
382
|
+
year = {2026},
|
|
383
|
+
license = {MIT}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**License** MIT license. See [LICENSE.txt](LICENSE.txt).
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
everyrow/__init__.py,sha256=z8oDcFaWns-sUIzAo063uzHRgPkptz1kAA2LhMTJ2Xw,328
|
|
2
|
+
everyrow/api_utils.py,sha256=Wi3Yd30w11U02T_jt3GINebI2Ievhp8d42NHWxYAI4k,1641
|
|
3
|
+
everyrow/billing.py,sha256=Oc0MsRl2CpnC8tH6srBnmdBNpgdygofKMKTdg8_MsLw,873
|
|
4
|
+
everyrow/constants.py,sha256=oHWD2JAOeRySkf0K824XM6j07AzlTq_SUFvbpetrF1g,94
|
|
5
|
+
everyrow/ops.py,sha256=rQUos96M97kurRHE3kHlvB2LDvYWaoJPj0khQ72BBkI,25906
|
|
6
|
+
everyrow/result.py,sha256=2vCiE17kdbgkYKAdvfkpXJsSCr10U8FdO8NpS8eiofg,413
|
|
7
|
+
everyrow/session.py,sha256=5ZB8bK3VtqC7VMKvKfyA1qKSYylOi-7XeXuSkLMsLRk,2656
|
|
8
|
+
everyrow/task.py,sha256=UdGmt5OPQ4HGhx5iCRG6XlH2iUXZlkF7CV4y7mhDEqQ,6576
|
|
9
|
+
everyrow/generated/__init__.py,sha256=7Zs5P68qSl1JSVmnLh4Uq-czi5SV3Fr7e923BVohTuA,155
|
|
10
|
+
everyrow/generated/client.py,sha256=-rT3epMc77Y7QMTy5o1oH5hkGLufY9qFrD1rb7qItFU,12384
|
|
11
|
+
everyrow/generated/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
|
|
12
|
+
everyrow/generated/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
|
|
13
|
+
everyrow/generated/types.py,sha256=0We4NPvhIYASRpQ3le41nmJeEAVm42-2VKdzlJ4Ogok,1343
|
|
14
|
+
everyrow/generated/api/__init__.py,sha256=zTSiG_ujSjAqWPyc435YXaX9XTlpMjiJWBbV-f-YtdA,45
|
|
15
|
+
everyrow/generated/api/artifacts/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
16
|
+
everyrow/generated/api/artifacts/create_artifact_artifacts_post.py,sha256=cs7-asfGObxTUtXPAhdeHkA-sqxx9oThAPfyqVYW4Rk,4847
|
|
17
|
+
everyrow/generated/api/billing/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
18
|
+
everyrow/generated/api/billing/get_billing_balance_billing_get.py,sha256=3ddtkiRKQCEXPYg0Z451Yu8AKymhrl5rflWyMcDahSk,3429
|
|
19
|
+
everyrow/generated/api/operations/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
20
|
+
everyrow/generated/api/operations/agent_map_operations_agent_map_post.py,sha256=GkW8ihrL5UtYlAmRZNSg85fuHZzql2ifvr0NlgNyb20,6081
|
|
21
|
+
everyrow/generated/api/operations/dedupe_operations_dedupe_post.py,sha256=tUwWJsGBuFVN4wAgNvcnec5TVHVPMu8gqYP8rdBM5VM,5019
|
|
22
|
+
everyrow/generated/api/operations/merge_operations_merge_post.py,sha256=aPZipbvuu_q_oPpPm6fNVbZ0S9NsfEQ9-JafZdwp32Y,4939
|
|
23
|
+
everyrow/generated/api/operations/rank_operations_rank_post.py,sha256=xyJnMZOnkqKqZDxDr8ErVOrVCxVbe1ZbqPa9Edod3cE,4951
|
|
24
|
+
everyrow/generated/api/operations/screen_operations_screen_post.py,sha256=riZ37utYJPBgrlVGPRGRczafIutUNSBy2dps0WAgYuk,5011
|
|
25
|
+
everyrow/generated/api/operations/single_agent_operations_single_agent_post.py,sha256=yVIWTTxbkqQu1lDriYeHvo8qkbRneXPqZ78DlpYn2Tw,7761
|
|
26
|
+
everyrow/generated/api/sessions/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
27
|
+
everyrow/generated/api/sessions/create_session_endpoint_sessions_post.py,sha256=CLjFKbfV2XD1tqJGTomqXXpMNctylzZ8I0rOL1MvOBA,4376
|
|
28
|
+
everyrow/generated/api/tasks/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
29
|
+
everyrow/generated/api/tasks/get_task_result_tasks_task_id_result_get.py,sha256=mxRzES_LfgxTCiXdx50i2CXRHgvcDLbJzEIcYwSDGpo,5048
|
|
30
|
+
everyrow/generated/api/tasks/get_task_status_tasks_task_id_status_get.py,sha256=W2FWklD65wEdu72fU5v8wzFb8McZmD32O5o3gzcfPsc,4672
|
|
31
|
+
everyrow/generated/models/__init__.py,sha256=8AfDWIlIpCl2ub3xxXyYLr-KrBd9ZOCvRnMyZ0SwstU,4527
|
|
32
|
+
everyrow/generated/models/agent_map_operation.py,sha256=K4vbipYRizEnUMVTeZcaE_b_81n8fln6RvH5007Av0Q,12671
|
|
33
|
+
everyrow/generated/models/agent_map_operation_input_type_1_item.py,sha256=GgXSAQ4q4Tdw_aysRnHrCojHvmFi4w0Lnl65jLDkrlo,1351
|
|
34
|
+
everyrow/generated/models/agent_map_operation_input_type_2.py,sha256=2Nl3D4Cnb3lSHGhHTMCnQUbcXPK5_aelAIi0LXhwois,1328
|
|
35
|
+
everyrow/generated/models/agent_map_operation_response_schema_type_0.py,sha256=vOwu7fCzhtLJgm_brEvpRbFBp8A9Y0fCXnNBnBlh4bY,1376
|
|
36
|
+
everyrow/generated/models/billing_response.py,sha256=wv8dTv6jZ5F5KjS3M5zwmDcf7r5ROYh5iTUbXWVwwMo,1743
|
|
37
|
+
everyrow/generated/models/create_artifact_request.py,sha256=mZLGtjIILakvViSfFi-jWGWFhf7H2wQtG_KHzQbT4fo,4605
|
|
38
|
+
everyrow/generated/models/create_artifact_request_data_type_0_item.py,sha256=vpQZVjBgmeDT4-799HBreVKeULghq24WKAikYVbSGNc,1366
|
|
39
|
+
everyrow/generated/models/create_artifact_request_data_type_1.py,sha256=WwFB0AKrxqjoNntV3jaAoK4ZPXFnYGZlgxVityIlLlM,1343
|
|
40
|
+
everyrow/generated/models/create_artifact_response.py,sha256=2JSlTpY3sS_DWCjgoBridc6QziBjPuTUrMsiyxkBIZs,1929
|
|
41
|
+
everyrow/generated/models/create_session.py,sha256=wvqS0gYFo1q85Ow3E_uPnRavIjcYLKw1007nEzxnelg,1503
|
|
42
|
+
everyrow/generated/models/dedupe_operation.py,sha256=i6rM5XAifdpvouyCk9MU6e35baragJwznDKULihibLo,5302
|
|
43
|
+
everyrow/generated/models/dedupe_operation_input_type_1_item.py,sha256=nQocF04VEwIM2Mm0YKth7zSMwYAsfq2gWbv_95eJhPU,1338
|
|
44
|
+
everyrow/generated/models/dedupe_operation_input_type_2.py,sha256=SxS0qQuU4nHT9yMW8f-Mu5MlgelfPG5HIrMb_aL6zgA,1315
|
|
45
|
+
everyrow/generated/models/error_response.py,sha256=t1mtTt6dRzXQgit6slBktTzIycqKuWkxLvY6Ba__v54,3284
|
|
46
|
+
everyrow/generated/models/error_response_details_type_0.py,sha256=mSLFizTmH-jTYn09eL5s3e1iI5nAdKWOpHnetKx-UGs,1315
|
|
47
|
+
everyrow/generated/models/http_validation_error.py,sha256=ceDDkSqsvFmTdFwrra6lwo-L-BAHNX8h8bwaKyxPkEk,2317
|
|
48
|
+
everyrow/generated/models/insufficient_balance_error.py,sha256=LqjyKHBPejWM_r1AsrcKmIPLDrWKyLbeHJBVY0nHmj0,2638
|
|
49
|
+
everyrow/generated/models/llm_enum_public.py,sha256=AU2r8aadd-JkwhXVavmCZrRBecuakhNolIy9H8f2fAg,1350
|
|
50
|
+
everyrow/generated/models/merge_operation.py,sha256=AqN5TShJQ7FgGeQKVhnNnTSU-besQurT2f9bL90X6T8,10890
|
|
51
|
+
everyrow/generated/models/merge_operation_left_input_type_1_item.py,sha256=OuaH6nFuq1UQo8NXkmv2GeYLj_sWbvdLFVubnGt5Uhk,1356
|
|
52
|
+
everyrow/generated/models/merge_operation_left_input_type_2.py,sha256=mjY5QnuREiIwV5qi79sWOxoIdSy6FjOHaT3fcOEIuk0,1333
|
|
53
|
+
everyrow/generated/models/merge_operation_right_input_type_1_item.py,sha256=a_XH8yZB9HmTDWGfFAtkCEYCMHhBE5hXRhTwPO3F5rg,1361
|
|
54
|
+
everyrow/generated/models/merge_operation_right_input_type_2.py,sha256=c24_J6xv7ASJP3LzPbML72J3NBFgHemRDYetdB-T4vs,1338
|
|
55
|
+
everyrow/generated/models/merge_operation_use_web_search_type_0.py,sha256=C4pBVJssNaOkfimp86wgbTgKJuBllJ03EqVBTdgzEXk,184
|
|
56
|
+
everyrow/generated/models/operation_response.py,sha256=7iuCVtyHir5AY7SPexeyY_kw_9YBkGVsH2wp_hbpnxk,3918
|
|
57
|
+
everyrow/generated/models/public_effort_level.py,sha256=vPdbY13dO3q0KNKN8OTgXqqQf6v4526zquwlMt0g5V4,178
|
|
58
|
+
everyrow/generated/models/public_task_type.py,sha256=2MCa8Z_zDWOEcUSr6ux08Sc7JEGGtxRbehWdKF2LsXU,221
|
|
59
|
+
everyrow/generated/models/rank_operation.py,sha256=QmVqs83hQdCUzNZ_bBHiPlIfLQWawC3zBLq43j1MRdg,7397
|
|
60
|
+
everyrow/generated/models/rank_operation_input_type_1_item.py,sha256=3jDUXFV87M9NCMHd64QQA5GzW68iQq9O0qnzaB8126I,1328
|
|
61
|
+
everyrow/generated/models/rank_operation_input_type_2.py,sha256=ma5sofRgv9q9PvsBDIWXFGBwGPKICsk6FAYlsf12Dg4,1305
|
|
62
|
+
everyrow/generated/models/rank_operation_response_schema_type_0.py,sha256=dUKIutYuompTBKqYe2znSPJBvfOnjlm2ns2nO_LrRVY,1353
|
|
63
|
+
everyrow/generated/models/screen_operation.py,sha256=gHXaRqV2oHXh-7VJS46yvU1m16hMTOjkLfCowwYJ1bo,6918
|
|
64
|
+
everyrow/generated/models/screen_operation_input_type_1_item.py,sha256=X2kSbeZXRBMjSUEeK0B5E8loRbfkkQiNTpi-HUx9QIw,1338
|
|
65
|
+
everyrow/generated/models/screen_operation_input_type_2.py,sha256=26G_W1Zhx1MEOHoJP7Ty_X9HNVZKwqIAvpzzj-RZsqk,1315
|
|
66
|
+
everyrow/generated/models/screen_operation_response_schema_type_0.py,sha256=3OMoKwmHLK81HgScTsNeL3TPZLajeWMfiRNng4r9DrE,1363
|
|
67
|
+
everyrow/generated/models/session_response.py,sha256=1L27retPnHk_5FCgYpkDJ_8j5zpnIatsRVVkIsXl-5E,1618
|
|
68
|
+
everyrow/generated/models/single_agent_operation.py,sha256=tkXU78MaAWmsySdzSQhMn04pii4G3iWBQf-aBAcw24U,11893
|
|
69
|
+
everyrow/generated/models/single_agent_operation_input_type_1_item.py,sha256=Kze2hVfabLSsB47Vhy5Ck4R6SaPXw5PunB4CkTZNxAc,1366
|
|
70
|
+
everyrow/generated/models/single_agent_operation_input_type_2.py,sha256=fKvpPQM-_N49jqJAdZUwwguv2DW-zWGZCj-hICcLQX0,1343
|
|
71
|
+
everyrow/generated/models/single_agent_operation_response_schema_type_0.py,sha256=Z0gIRLrfZYmZqwDpqqt4iBk7u0_Dg2S-g-skshzPH04,1391
|
|
72
|
+
everyrow/generated/models/task_result_response.py,sha256=3K22Ymj4jLe3YDbmnQHm0PNkzuJDu3iVJuMYMydW8fw,6280
|
|
73
|
+
everyrow/generated/models/task_result_response_data_type_0_item.py,sha256=XTmW7RRPDX07Z4Oqg3JkRY8qrhFwizYtrwYXUAgIvMw,1351
|
|
74
|
+
everyrow/generated/models/task_result_response_data_type_1.py,sha256=BT5NBWuIWtc6RNMqmRvcKrkcNIGo1eWYMsfGykkGuOk,1328
|
|
75
|
+
everyrow/generated/models/task_status.py,sha256=wtFjPLXyNeLQrudS8IJgkQUU_gGx53OdliHlwJhaQPc,237
|
|
76
|
+
everyrow/generated/models/task_status_response.py,sha256=6HDLnc-5MhUgXHisjoobUA6UI9VNortdAW2w1mvuV_s,6086
|
|
77
|
+
everyrow/generated/models/validation_error.py,sha256=n8d_ZobQV26pm0KyDAKvIo93uOBhz2BH59jpJAKwoPY,2180
|
|
78
|
+
everyrow-0.2.0.dist-info/METADATA,sha256=yUdzgHTprrteylODCwwpYqptj5xF-9a8s82GpOGShOE,13090
|
|
79
|
+
everyrow-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
80
|
+
everyrow-0.2.0.dist-info/licenses/LICENSE.txt,sha256=8gN2nA06HyReyL7Mfu9nsBIpUF-B6wL5SJenlMRN8ac,1070
|
|
81
|
+
everyrow-0.2.0.dist-info/RECORD,,
|
everyrow/citations.py
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from everyrow.generated.models import (
|
|
5
|
-
ArtifactGroupRecord,
|
|
6
|
-
AuxDataSourceBank,
|
|
7
|
-
StandaloneArtifactRecord,
|
|
8
|
-
)
|
|
9
|
-
from everyrow.generated.types import Unset
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def _render_citations(
|
|
13
|
-
data: dict[str, Any], source_bank: AuxDataSourceBank
|
|
14
|
-
) -> dict[str, Any]:
|
|
15
|
-
result = deepcopy(data)
|
|
16
|
-
for source_id, source_data in source_bank.to_dict().items():
|
|
17
|
-
for key, value in result.items():
|
|
18
|
-
if isinstance(value, str):
|
|
19
|
-
result[key] = value.replace(source_id, source_data["url"])
|
|
20
|
-
else:
|
|
21
|
-
result[key] = value
|
|
22
|
-
return result
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def render_citations_standalone(artifact: StandaloneArtifactRecord):
|
|
26
|
-
if isinstance(artifact.aux_data, Unset) or isinstance(
|
|
27
|
-
artifact.aux_data.source_bank, Unset
|
|
28
|
-
):
|
|
29
|
-
return artifact
|
|
30
|
-
source_bank = (
|
|
31
|
-
artifact.aux_data.source_bank
|
|
32
|
-
) # create reference simply to make the type checker happy before deepcopy.
|
|
33
|
-
artifact = deepcopy(artifact)
|
|
34
|
-
artifact.data = _render_citations(artifact.data, source_bank)
|
|
35
|
-
return artifact
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def render_citations_group(artifact: ArtifactGroupRecord) -> ArtifactGroupRecord:
|
|
39
|
-
artifact = deepcopy(artifact)
|
|
40
|
-
new_artifacts = []
|
|
41
|
-
for artifact_item in artifact.artifacts:
|
|
42
|
-
if isinstance(artifact_item, StandaloneArtifactRecord):
|
|
43
|
-
item_to_add = render_citations_standalone(artifact_item)
|
|
44
|
-
elif isinstance(artifact_item, ArtifactGroupRecord):
|
|
45
|
-
item_to_add = render_citations_group(artifact_item)
|
|
46
|
-
else:
|
|
47
|
-
item_to_add = artifact_item
|
|
48
|
-
new_artifacts.append(item_to_add)
|
|
49
|
-
artifact.artifacts = new_artifacts
|
|
50
|
-
return artifact
|