sunholo 0.125.1__tar.gz → 0.125.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sunholo-0.125.1/src/sunholo.egg-info → sunholo-0.125.2}/PKG-INFO +1 -1
- {sunholo-0.125.1 → sunholo-0.125.2}/pyproject.toml +1 -1
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/alloydb_client.py +33 -22
- {sunholo-0.125.1 → sunholo-0.125.2/src/sunholo.egg-info}/PKG-INFO +1 -1
- {sunholo-0.125.1 → sunholo-0.125.2}/LICENSE.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/MANIFEST.in +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/README.md +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/setup.cfg +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/langserve.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/route.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/agents/swagger.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/archive/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/archive/archive.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/auth/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/auth/gcloud.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/auth/refresh.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/auth/run.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/azure/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/azure/auth.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/azure/blobs.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/azure/event_grid.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/bots/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/bots/discord.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/bots/webapp.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/azure.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/encode_metadata.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/images.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/process_chunker_data.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/publish.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/pubsub.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/cli.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/configs.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/deploy.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/embedder.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/swagger.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/cli/vertex.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/components/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/components/llm.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/components/retriever.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/custom_logging.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/alloydb.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/database.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/lancedb.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/database/uuid.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/cli.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/embedder/embed_metadata.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/excel/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/excel/plugin.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/download_folder.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/extract_and_sign.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/file_handling.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/genaiv2.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/images.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/init.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/process_funcs_cls.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/genai/safety.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/invoke/async_class.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/invoke/direct_vac_func.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/langchain_types.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/langfuse/evals.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/llamaindex/llamaindex_class.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/llamaindex/user_history.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/mcp/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/mcp/cli.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/ollama/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/ollama/ollama_images.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/qna/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/qna/parsers.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/qna/retry.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/senses/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/senses/stream_voice.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/agent_service.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/app.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/my_log.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/tools/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/tools/your_agent.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/agent/vac_service.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/project/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/project/app.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/project/my_log.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/project/vac_service.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/system_services/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/system_services/app.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/templates/system_services/my_log.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/terraform/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/terraform/tfvars_editor.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/tools/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/tools/web_browser.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/api_key.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/big_context.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/config.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/config_class.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/gcp.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/mime.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/parsers.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/utils/version.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/extensions_call.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/genai_functions.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/init.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/safety.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo/vertex/type_dict_to_json.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/src/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_async.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_async_genai2.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_chat_history.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_config.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_genai2.py +0 -0
- {sunholo-0.125.1 → sunholo-0.125.2}/tests/test_unstructured.py +0 -0
@@ -610,19 +610,20 @@ class AlloyDBClient:
|
|
610
610
|
if items and isinstance(items[0], dict):
|
611
611
|
# If the first item is a dictionary, we need to create columns for all its keys
|
612
612
|
sample_item = items[0]
|
613
|
-
# Flatten the dictionary with the key as prefix
|
614
|
-
flattened_item = self._flatten_dict_for_schema(sample_item, key, "_")
|
615
613
|
|
616
|
-
#
|
617
|
-
for item_key, item_value in
|
618
|
-
|
619
|
-
|
614
|
+
# Create columns for all keys in the sample item
|
615
|
+
for item_key, item_value in sample_item.items():
|
616
|
+
column_key = f"{key}_{item_key}"
|
617
|
+
column_type = self._get_sql_type(item_value)
|
618
|
+
columns.append(f'"{column_key}" {column_type}')
|
620
619
|
else:
|
621
620
|
# If items are simple values, just add a column for the list key itself
|
622
|
-
|
621
|
+
column_type = self._get_sql_type(items[0] if items else None)
|
622
|
+
columns.append(f'"{key}" {column_type}')
|
623
623
|
else:
|
624
624
|
# Regular handling for non-list fields
|
625
|
-
|
625
|
+
column_type = self._get_sql_type(value)
|
626
|
+
columns.append(f'"{key}" {column_type}')
|
626
627
|
|
627
628
|
# Add metadata columns
|
628
629
|
columns.extend([
|
@@ -656,41 +657,40 @@ class AlloyDBClient:
|
|
656
657
|
for user in users:
|
657
658
|
grant_sql = f'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE "{table_name}" TO "{user}";'
|
658
659
|
if self.engine_type == "pg8000":
|
659
|
-
self.
|
660
|
+
self._execute_sql_pg8000(grant_sql)
|
660
661
|
else:
|
661
662
|
await self._execute_sql_async_langchain(grant_sql)
|
662
663
|
|
663
664
|
return result
|
664
665
|
|
665
|
-
def
|
666
|
+
def _get_sql_type(self, value):
|
666
667
|
"""
|
667
|
-
Helper method to
|
668
|
+
Helper method to determine SQL type from a Python value.
|
668
669
|
|
669
670
|
Args:
|
670
|
-
key (str): The column name
|
671
671
|
value: The value to determine the column type
|
672
672
|
|
673
673
|
Returns:
|
674
|
-
str: SQL
|
674
|
+
str: SQL type
|
675
675
|
"""
|
676
676
|
if value is None:
|
677
677
|
# For unknown types (None), default to TEXT
|
678
|
-
return
|
678
|
+
return "TEXT"
|
679
679
|
elif isinstance(value, dict):
|
680
680
|
# For nested objects, store as JSONB
|
681
|
-
return
|
681
|
+
return "JSONB"
|
682
682
|
elif isinstance(value, list):
|
683
683
|
# For arrays, store as JSONB
|
684
|
-
return
|
684
|
+
return "JSONB"
|
685
685
|
elif isinstance(value, int):
|
686
|
-
return
|
686
|
+
return "INTEGER"
|
687
687
|
elif isinstance(value, float):
|
688
|
-
return
|
688
|
+
return "NUMERIC"
|
689
689
|
elif isinstance(value, bool):
|
690
|
-
return
|
690
|
+
return "BOOLEAN"
|
691
691
|
else:
|
692
692
|
# Default to TEXT for strings and other types
|
693
|
-
return
|
693
|
+
return "TEXT"
|
694
694
|
|
695
695
|
def _flatten_dict_for_schema(self, nested_dict, parent_key='', separator='.'):
|
696
696
|
"""
|
@@ -789,6 +789,8 @@ class AlloyDBClient:
|
|
789
789
|
primary_list_key = next(iter(expandable_lists))
|
790
790
|
primary_list = expandable_lists[primary_list_key]
|
791
791
|
|
792
|
+
log.info(f"Expanding list '{primary_list_key}' with {len(primary_list)} items into separate rows")
|
793
|
+
|
792
794
|
# For each item in the primary list, create a new row
|
793
795
|
for item_idx, item in enumerate(primary_list):
|
794
796
|
# Create a copy of the regular data
|
@@ -797,7 +799,12 @@ class AlloyDBClient:
|
|
797
799
|
# Add the current item from the primary list
|
798
800
|
if isinstance(item, dict):
|
799
801
|
# If it's a dictionary, flatten it with the primary key as prefix
|
800
|
-
flattened_item =
|
802
|
+
flattened_item = {}
|
803
|
+
for k, v in item.items():
|
804
|
+
flattened_key = f"{primary_list_key}_{k}"
|
805
|
+
flattened_item[flattened_key] = v
|
806
|
+
|
807
|
+
# Update row data with flattened item
|
801
808
|
row_data.update(flattened_item)
|
802
809
|
else:
|
803
810
|
# If it's a simple value, just add it with the list key
|
@@ -809,8 +816,12 @@ class AlloyDBClient:
|
|
809
816
|
# Insert this row
|
810
817
|
result = await self._insert_single_row(table_name, row_data, metadata)
|
811
818
|
results.append(result)
|
819
|
+
|
820
|
+
return results
|
812
821
|
|
813
|
-
|
822
|
+
# If we somehow get here (shouldn't happen), fall back to single row insert
|
823
|
+
return await self._insert_single_row(table_name, regular_data, metadata)
|
824
|
+
|
814
825
|
|
815
826
|
async def _insert_single_row(self, table_name: str, data: dict, metadata: dict = None):
|
816
827
|
"""
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|