From d32e6f30a0b57fd236107516b1c19b17cecd32a0 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Fri, 8 Sep 2023 16:53:01 +1200 Subject: [PATCH 01/19] chore/refractor-incremental-ingest-chromadb --- .gitignore | 7 +- snowdev/functions/utils/ingest.py | 149 ++++++++++++++++++++++++++++-- 2 files changed, 147 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c09e3dc..b4cadc0 100644 --- a/.gitignore +++ b/.gitignore @@ -155,4 +155,9 @@ install-snowpark-ml-1.0.2.sh !examples/src/ !examples/static/ -chroma_db/ \ No newline at end of file +.vscode/ + +chroma_db/ + +# checksums for chromadb +checksums.json \ No newline at end of file diff --git a/snowdev/functions/utils/ingest.py b/snowdev/functions/utils/ingest.py index 8e5a92d..4b4be32 100644 --- a/snowdev/functions/utils/ingest.py +++ b/snowdev/functions/utils/ingest.py @@ -1,6 +1,9 @@ from __future__ import annotations -from typing import Any, Dict +import hashlib +import json +import os +from typing import Any, Dict, List, NamedTuple import pkg_resources from langchain.document_loaders import DirectoryLoader @@ -8,12 +11,18 @@ from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import Chroma from pydantic import BaseModel +from termcolor import colored class Secrets(BaseModel): OPENAI_API_KEY: str +class Document(NamedTuple): + content: str + metadata: dict + + class Config(BaseModel): chunk_size: int = 1000 chunk_overlap: int = 0 @@ -23,22 +32,146 @@ class Config(BaseModel): class DocumentProcessor: - def __init__(self, secrets: Secrets, config: Config): - self.loader_py = DirectoryLoader(config.docs_dir, glob="**/*.py") - self.loader_md = DirectoryLoader(config.docs_dir, glob="**/*.md") + def __init__( + self, secrets: Secrets, config: Config, checksum_file: str = "checksums.json" + ): + """ + Initialize the DocumentProcessor with the provided secrets and configuration. + """ + self._initialize_loaders(config.docs_dir) self.text_splitter = CharacterTextSplitter( chunk_size=config.chunk_size, chunk_overlap=config.chunk_overlap ) self.embeddings = OpenAIEmbeddings(openai_api_key=secrets.OPENAI_API_KEY) + self.checksum_file = checksum_file + self.checksum_dict = self._load_checksums() + + def _initialize_loaders(self, docs_dir: str): + """ + Initialize data loaders. + """ + self.loader_py = DirectoryLoader(docs_dir, glob="**/*.py") + self.loader_md = DirectoryLoader(docs_dir, glob="**/*.md") + self.loader_src_py = DirectoryLoader("src/", glob="**/*.py") + + def _load_checksums(self) -> Dict[str, str]: + """ + Load checksums from a checksum file. + """ + if os.path.exists(self.checksum_file): + with open(self.checksum_file, "r") as f: + try: + return json.load(f) + except json.decoder.JSONDecodeError: + print("Checksum file is empty. Creating a new checksum dictionary.") + return {} + else: + return {} + + def _save_checksums(self) -> None: + """ + Save checksums to the checksum file. + """ + with open(self.checksum_file, "w") as f: + json.dump(self.checksum_dict, f) + + @staticmethod + def _create_checksum(content: str) -> str: + """ + Create a checksum for the provided content. + """ + return hashlib.sha256(content.encode()).hexdigest() + + def _generate_prompt_from_path(self, path: str) -> str: + """ + Generate a prompt based on the file path. + """ + folder_name = os.path.basename(os.path.dirname(path)) + mappings = { + "src/sproc/": f"This is the stored procedure written in snowflake snowpark named {folder_name}.", + "src/udf/": f"This is the user-defined function written in snowflake snowpark named {folder_name}.", + "src/streamlit/": f"This is the Streamlit app written in snowflake snowpark named {folder_name}.", + } + return mappings.get(path, "") def process(self) -> Dict[str, Any]: - data_py = self.loader_py.load() - data_md = self.loader_md.load() - data = data_py + data_md + """ + Process the documents: load, filter, split, embed, and persist. + """ + data = self._load_and_filter_documents() + + if not data: + print(colored("No new documents found to embed.\n", "yellow")) + return {} + texts = self.text_splitter.split_documents(data) - print(f"Found {len(texts)} documents") + + if not texts: + print(colored("No new text segments found to embed.\n", "yellow")) + return {} + + print(colored(f"\n Found {len(texts)} documents \n", "cyan")) + vector_store = Chroma.from_documents( texts, self.embeddings, persist_directory="chroma_db" ) vector_store.persist() + + self._save_checksums() return vector_store + + def _load_and_filter_documents(self) -> List[str]: + """ + Load documents and filter out previously embedded ones. + """ + data_py = self.loader_py.load() + data_md = self.loader_md.load() + data_src_py = self.loader_src_py.load() + + # Filter out previously embedded files using checksums + data = [] + for record in data_py + data_md + data_src_py: + content = self._extract_content_from_record(record) + checksum = self._create_checksum(content) + filename = self._extract_filename_from_record(record) + + if checksum != self.checksum_dict.get(filename, None): + self.checksum_dict[filename] = checksum + prompt = self._generate_prompt_from_path(filename) + self._update_record_metadata(record, filename, prompt) + if not filename.startswith("src/"): + print( + colored(f"Embedding {filename} with Prompt: {prompt}", "green") + ) + data.append(record) + else: + if not filename.startswith("src/"): + print(colored(f"Skipped {filename}", "yellow")) + + return data + + @staticmethod + def _extract_content_from_record(record: Any) -> str: + """ + Extract content from a record. + """ + if isinstance(record, str): + return record + return record.content if hasattr(record, "content") else str(record) + + @staticmethod + def _extract_filename_from_record(record: Any) -> str: + """ + Extract filename from a record. + """ + return record.metadata["source"] if hasattr(record, "metadata") else "" + + @staticmethod + def _update_record_metadata(record: Any, filename: str, prompt: str) -> None: + """ + Update metadata for a record. + """ + if hasattr(record, "metadata"): + record.metadata["prompt"] = prompt + else: + record.metadata = {"prompt": prompt, "source": filename} From fca8bfe1a4260d3ee21a572623deeb2a256ae8ed Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Fri, 8 Sep 2023 17:16:52 +1200 Subject: [PATCH 02/19] Remove unused chain --- snowdev/functions/bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowdev/functions/bot.py b/snowdev/functions/bot.py index 4f525ae..79dc8ee 100644 --- a/snowdev/functions/bot.py +++ b/snowdev/functions/bot.py @@ -73,7 +73,7 @@ def get_chain_gpt(db): openai_api_key=os.environ["OPENAI_API_KEY"], max_tokens=500, ) - chain = LLMChain(llm=llm, prompt=SnowBot.QA_PROMPT) + chain = RetrievalQA.from_chain_type( llm, chain_type="stuff", From 07293bc35289bd42e54093b301ff5642427676ad Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Tue, 19 Sep 2023 20:50:26 +1200 Subject: [PATCH 03/19] Fix prompt --- snowdev/functions/utils/ingest.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/snowdev/functions/utils/ingest.py b/snowdev/functions/utils/ingest.py index 4b4be32..6fd9293 100644 --- a/snowdev/functions/utils/ingest.py +++ b/snowdev/functions/utils/ingest.py @@ -88,11 +88,16 @@ def _generate_prompt_from_path(self, path: str) -> str: """ folder_name = os.path.basename(os.path.dirname(path)) mappings = { - "src/sproc/": f"This is the stored procedure written in snowflake snowpark named {folder_name}.", - "src/udf/": f"This is the user-defined function written in snowflake snowpark named {folder_name}.", - "src/streamlit/": f"This is the Streamlit app written in snowflake snowpark named {folder_name}.", + "src/sproc": f"This is the stored procedure written in snowflake snowpark named {folder_name}.", + "src/udf": f"This is the user-defined function written in snowflake snowpark named {folder_name}.", + "src/streamlit": f"This is the Streamlit app written in snowflake snowpark named {folder_name}.", } - return mappings.get(path, "") + + for key, value in mappings.items(): + if key in path: + return value + + return "" def process(self) -> Dict[str, Any]: """ @@ -139,7 +144,7 @@ def _load_and_filter_documents(self) -> List[str]: self.checksum_dict[filename] = checksum prompt = self._generate_prompt_from_path(filename) self._update_record_metadata(record, filename, prompt) - if not filename.startswith("src/"): + if filename.startswith("src/"): print( colored(f"Embedding {filename} with Prompt: {prompt}", "green") ) From 49feba2cc46d8c884918e778fedd3e59af17b17f Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Tue, 19 Sep 2023 21:00:54 +1200 Subject: [PATCH 04/19] Refractor ingest --- snowdev/functions/utils/ingest.py | 104 ++++++++++-------------------- 1 file changed, 35 insertions(+), 69 deletions(-) diff --git a/snowdev/functions/utils/ingest.py b/snowdev/functions/utils/ingest.py index 6fd9293..6b042b2 100644 --- a/snowdev/functions/utils/ingest.py +++ b/snowdev/functions/utils/ingest.py @@ -3,6 +3,7 @@ import hashlib import json import os +from enum import Enum from typing import Any, Dict, List, NamedTuple import pkg_resources @@ -31,13 +32,20 @@ class Config(BaseModel): ) +class PathType(Enum): + SPROC = ("src/sproc", "stored procedure") + UDF = ("src/udf", "user-defined function") + STREAMLIT = ("src/streamlit", "Streamlit app") + + def __init__(self, path: str, desc: str): + self.path = path + self.desc = desc + + class DocumentProcessor: def __init__( self, secrets: Secrets, config: Config, checksum_file: str = "checksums.json" ): - """ - Initialize the DocumentProcessor with the provided secrets and configuration. - """ self._initialize_loaders(config.docs_dir) self.text_splitter = CharacterTextSplitter( chunk_size=config.chunk_size, chunk_overlap=config.chunk_overlap @@ -47,135 +55,93 @@ def __init__( self.checksum_dict = self._load_checksums() def _initialize_loaders(self, docs_dir: str): - """ - Initialize data loaders. - """ self.loader_py = DirectoryLoader(docs_dir, glob="**/*.py") self.loader_md = DirectoryLoader(docs_dir, glob="**/*.md") self.loader_src_py = DirectoryLoader("src/", glob="**/*.py") def _load_checksums(self) -> Dict[str, str]: - """ - Load checksums from a checksum file. - """ if os.path.exists(self.checksum_file): with open(self.checksum_file, "r") as f: try: return json.load(f) except json.decoder.JSONDecodeError: - print("Checksum file is empty. Creating a new checksum dictionary.") + print( + colored( + "Checksum file is empty. Creating a new checksum dictionary.", + "yellow", + ) + ) return {} else: return {} def _save_checksums(self) -> None: - """ - Save checksums to the checksum file. - """ with open(self.checksum_file, "w") as f: json.dump(self.checksum_dict, f) @staticmethod def _create_checksum(content: str) -> str: - """ - Create a checksum for the provided content. - """ return hashlib.sha256(content.encode()).hexdigest() def _generate_prompt_from_path(self, path: str) -> str: - """ - Generate a prompt based on the file path. - """ folder_name = os.path.basename(os.path.dirname(path)) - mappings = { - "src/sproc": f"This is the stored procedure written in snowflake snowpark named {folder_name}.", - "src/udf": f"This is the user-defined function written in snowflake snowpark named {folder_name}.", - "src/streamlit": f"This is the Streamlit app written in snowflake snowpark named {folder_name}.", - } - - for key, value in mappings.items(): - if key in path: - return value - + for path_type in PathType: + if path_type.path in path: + return f"This is the {path_type.desc} written in snowflake snowpark named {folder_name}." return "" def process(self) -> Dict[str, Any]: - """ - Process the documents: load, filter, split, embed, and persist. - """ data = self._load_and_filter_documents() - if not data: - print(colored("No new documents found to embed.\n", "yellow")) + print(colored("No new documents found to embed.", "yellow")) return {} texts = self.text_splitter.split_documents(data) - if not texts: - print(colored("No new text segments found to embed.\n", "yellow")) + print(colored("No new text segments found to embed.", "yellow")) return {} - print(colored(f"\n Found {len(texts)} documents \n", "cyan")) - + print(colored(f"Found {len(texts)} documents.", "cyan")) vector_store = Chroma.from_documents( texts, self.embeddings, persist_directory="chroma_db" ) vector_store.persist() - self._save_checksums() return vector_store def _load_and_filter_documents(self) -> List[str]: - """ - Load documents and filter out previously embedded ones. - """ - data_py = self.loader_py.load() - data_md = self.loader_md.load() - data_src_py = self.loader_src_py.load() - - # Filter out previously embedded files using checksums data = [] - for record in data_py + data_md + data_src_py: + for record in ( + self.loader_py.load() + self.loader_md.load() + self.loader_src_py.load() + ): content = self._extract_content_from_record(record) checksum = self._create_checksum(content) filename = self._extract_filename_from_record(record) - if checksum != self.checksum_dict.get(filename, None): + if checksum != self.checksum_dict.get(filename): self.checksum_dict[filename] = checksum prompt = self._generate_prompt_from_path(filename) self._update_record_metadata(record, filename, prompt) - if filename.startswith("src/"): - print( - colored(f"Embedding {filename} with Prompt: {prompt}", "green") - ) + log_msg = ( + colored(f"Embedding {filename} with Prompt: {prompt}", "green") + if filename.startswith("src/") + else colored(f"Skipped {filename}", "yellow") + ) + print(log_msg) data.append(record) - else: - if not filename.startswith("src/"): - print(colored(f"Skipped {filename}", "yellow")) return data @staticmethod def _extract_content_from_record(record: Any) -> str: - """ - Extract content from a record. - """ - if isinstance(record, str): - return record - return record.content if hasattr(record, "content") else str(record) + return getattr(record, "content", str(record)) @staticmethod def _extract_filename_from_record(record: Any) -> str: - """ - Extract filename from a record. - """ - return record.metadata["source"] if hasattr(record, "metadata") else "" + return getattr(record, "metadata", {}).get("source", "") @staticmethod def _update_record_metadata(record: Any, filename: str, prompt: str) -> None: - """ - Update metadata for a record. - """ if hasattr(record, "metadata"): record.metadata["prompt"] = prompt else: From 1cc0902f9363c58fe68c7906b8ada27aef6d0c35 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Fri, 22 Sep 2023 11:20:56 +1200 Subject: [PATCH 05/19] Use output parsers --- pyproject.toml | 4 +- snowdev/functions/bot.py | 122 +++++++++++++++--- snowdev/functions/helper.py | 44 ++++--- snowdev/functions/utils/templates/sproc.py | 3 +- .../functions/utils/templates/streamlit.py | 37 +----- snowdev/functions/utils/templates/udf.py | 4 +- 6 files changed, 139 insertions(+), 75 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f10ea5d..5dd826c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [tool.poetry] name = "snowdev" -version = "0.1.17" +version = "0.2.0" description = "snowdev: DevOps toolkit for Snowflake, facilitating seamless deployment of UDFs, stored procedures, and Streamlit apps using Snowpark's capabilities right from your local environment." authors = ["kaarthik "] readme = "README.md" homepage = "https://github.com/kaarthik108/snowdev" classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.10" diff --git a/snowdev/functions/bot.py b/snowdev/functions/bot.py index 79dc8ee..3098995 100644 --- a/snowdev/functions/bot.py +++ b/snowdev/functions/bot.py @@ -1,14 +1,18 @@ +import json import os import re import pkg_resources import toml -from langchain.chains import LLMChain, RetrievalQA +from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI from langchain.embeddings.openai import OpenAIEmbeddings from langchain.prompts.prompt import PromptTemplate from langchain.vectorstores import Chroma from termcolor import colored +from langchain.output_parsers import ResponseSchema, StructuredOutputParser +import yaml +from snowdev.functions.helper import SnowHelper from snowdev.functions.utils.templates.sproc import TEMPLATE as SPROC_TEMPLATE from snowdev.functions.utils.templates.streamlit import ( @@ -17,9 +21,15 @@ from snowdev.functions.utils.templates.udf import TEMPLATE as UDF_TEMPLATE from snowdev.functions.utils.ingest import DocumentProcessor, Secrets, Config from snowdev.functions.utils.snowpark_methods import SnowparkMethods +import re MODEL = "gpt-4" +response_schemas = [ + ResponseSchema(name="code", description="The full python code to run"), + ResponseSchema(name="packages", description="The packages to install to run the code, ignore snowflake related packages, streamlit and snowdev packages") +] + class SnowBot: @@ -28,7 +38,7 @@ class SnowBot: "sproc": SPROC_TEMPLATE, "streamlit": STREAMLIT_TEMPLATE, } - + @staticmethod def ai_embed(): """ @@ -50,11 +60,14 @@ def ai_embed(): @staticmethod def get_qa_prompt_for_type(template_type): + output_parser = StructuredOutputParser.from_response_schemas(response_schemas) + format_instructions = output_parser.get_format_instructions() if template_type not in SnowBot.TEMPLATES: raise ValueError(f"No template found for component type: {template_type}") return PromptTemplate( template=SnowBot.TEMPLATES[template_type], input_variables=["question", "context"], + partial_variables={"format_instructions": format_instructions}, ) @staticmethod @@ -83,30 +96,84 @@ def get_chain_gpt(db): return chain @staticmethod - def append_dependencies_to_toml(dependencies_dict): + def append_dependencies_to_toml(dependencies_dict, component_folder): """ Append new dependencies to app.toml file. """ - toml_path = "app.toml" - + toml_path = os.path.join(component_folder, "app.toml") if not os.path.exists(toml_path): print(colored(f"⚠️ {toml_path} does not exist!", "yellow")) return with open(toml_path, "r") as f: data = toml.load(f) - - for key, value in dependencies_dict.items(): - data["tool.poetry.dependencies"][key] = value + for package_name, default_version in dependencies_dict.items(): + print(f"Searching for package: {package_name}") + available_versions = SnowHelper.search_package_in_snowflake_channel(package_name) + if available_versions: + # Set the found latest version to the TOML data + data['tool']['poetry']['dependencies'][package_name] = available_versions + print( + colored( + f"\nPackage {package_name} is available on the Snowflake anaconda channel. Latest version: {available_versions}\n", + "green", + ) + ) + print( + colored( + "No need to create a package zip. Just include in your `app.toml` declaration.", + "green", + ) + ) + else: + print(colored(f"⚠️ Package {package_name} is not available on the Snowflake anaconda channel. Using default version: {default_version}", "yellow")) + data['tool']['poetry']['dependencies'][package_name] = default_version with open(toml_path, "w") as f: toml.dump(data, f) + + @staticmethod + def append_packages_to_environment_file(component_folder, template_type, packages): + if not isinstance(packages, list): + packages = [packages] + if template_type == "streamlit": + env_file_path = os.path.join(component_folder, "environment.yml") + + if not os.path.exists(env_file_path): + raise ValueError(f"The file '{env_file_path}' does not exist.") + + with open(env_file_path, "r") as env_file: + data = yaml.safe_load(env_file) or {} + + # Capture old data + old_channels = data.get('channels', []) + old_dependencies = data.get('dependencies', []) + + + # Ensure the packages are unique + for package in packages: + if package not in old_dependencies: + old_dependencies.append(package) + + # Construct new ordered dictionary + new_data = { + 'name': os.path.basename(component_folder), + 'channels': old_channels, + 'dependencies': old_dependencies + } + + with open(env_file_path, "w") as env_file: + yaml.safe_dump(new_data, env_file, sort_keys=False, default_flow_style=False) + + else: + # toml_file_path = os.path.join(component_folder, "app.toml") + dependencies_dict = {package: "*" for package in packages} + SnowBot.append_dependencies_to_toml(dependencies_dict, component_folder) + + @staticmethod def write_environment_file(component_folder, template_type): - """ - This is temporary, until we have a better way to auto create environment files through Langchain output parsers. - """ file_map = {"streamlit": "fill.yml", "udf": "fill.toml", "sproc": "fill.toml"} source_file_name = file_map.get(template_type) @@ -118,7 +185,7 @@ def write_environment_file(component_folder, template_type): ).decode("utf-8") target_file_name = ( - "environment.yml" if template_type == "streamlit" else source_file_name + "environment.yml" if template_type == "streamlit" else "app.toml" ) with open(os.path.join(component_folder, target_file_name), "w") as env_file: @@ -136,7 +203,7 @@ def create_new_ai_component(component_name, prompt, template_type): return SnowBot.QA_PROMPT = SnowBot.get_qa_prompt_for_type(template_type) - + # format_instructions = output_parser.get_format_instructions() # Check if the component already exists if SnowBot.component_exists(component_name, template_type): print( @@ -153,14 +220,22 @@ def create_new_ai_component(component_name, prompt, template_type): ) vectordb = Chroma(persist_directory="chroma_db", embedding_function=embeddings) chain = SnowBot.get_chain_gpt(vectordb) - response_content = chain(prompt)["result"] - - matches = re.findall(r"```(?:python)?\n(.*?)\n```", response_content, re.DOTALL) + res = chain(prompt) + response_content = res["result"] - if matches: - # Take the first match, as there might be multiple code blocks - response_content = matches[0].strip() + match = re.search(r"```json\n(.*?)\n```", response_content, re.DOTALL) + if match: + json_string = match.group(1).strip() else: + print(colored("JSON block not found in the response.\n", "red")) + print(colored("Retry the command again.", "red")) + return + new = json.loads(json_string, strict=False) + ai_generated_packages = new.get("packages", None) + + try: + response_content = new.get("code", None) + except: print( colored( "Unexpected response content format. Expected code block not found. Please try again", @@ -171,6 +246,7 @@ def create_new_ai_component(component_name, prompt, template_type): component_folder = os.path.join("src", template_type, component_name) os.makedirs(component_folder, exist_ok=True) SnowBot.write_environment_file(component_folder, template_type) + SnowBot.append_packages_to_environment_file(component_folder, template_type, ai_generated_packages) filename = "app.py" if template_type == "streamlit": @@ -185,3 +261,11 @@ def create_new_ai_component(component_name, prompt, template_type): "green", ) ) + + +# if __name__ == "__main__": +# # bot = SnowBot() +# # bot.append_packages_to_environment_file("src/streamlit/test_new", "streamlit", "pandas") +# SnowBot.create_new_ai_component( +# "test_new_", "Fetch data from customer and return the top 1 row", template_type="sproc" +# ) diff --git a/snowdev/functions/helper.py b/snowdev/functions/helper.py index f4926eb..12d7a89 100644 --- a/snowdev/functions/helper.py +++ b/snowdev/functions/helper.py @@ -1,4 +1,5 @@ from __future__ import annotations +import json import os import subprocess @@ -65,30 +66,43 @@ def get_packages_from_toml(cls, path): @classmethod def search_package_in_snowflake_channel(cls, package_name): + if len(package_name) <= 1: + print(f"Invalid package name: {package_name}") + return None cmd = [ "conda", "search", "-c", cls.SNOWFLAKE_ANACONDA_URL, "--override-channels", + "--json", package_name, ] - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, _ = process.communicate() - + + try: + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + except Exception as e: + print(f"Failed to execute command {cmd}: {e}") + return None + if process.returncode != 0: - return [] - - # Parse the results - lines = stdout.decode().split("\n") - versions = [] - for line in lines: - if package_name in line: - versions.append(line.split()[1]) # Extract the version from the result - - # Return all versions - return versions - + print(f"Command {cmd} failed with return code {process.returncode}: {stderr.decode()}") + return None + + try: + results = json.loads(stdout.decode()) + if package_name not in results: + print(f"Package {package_name} not found") + return None + versions = [package_info['version'] for package_info in results[package_name]] + latest_version = max(versions, key=lambda version: tuple(map(int, version.split('.')))) + except (json.JSONDecodeError, KeyError, ValueError) as e: + print(f"Failed to parse package versions for {package_name}. Output: {stdout.decode()}") + return None + # Return the latest version + return latest_version + @classmethod def is_package_available_in_snowflake_channel(cls, package_name): versions = cls.search_package_in_snowflake_channel(package_name) diff --git a/snowdev/functions/utils/templates/sproc.py b/snowdev/functions/utils/templates/sproc.py index e62e59a..bbc12b6 100644 --- a/snowdev/functions/utils/templates/sproc.py +++ b/snowdev/functions/utils/templates/sproc.py @@ -19,10 +19,9 @@ def handler(session: Session, args) -> str: print(handler(session,"test")) ## +\n {format_instructions} \n Question: ```{question}``` Context: ```{context}``` - -Answer: """ diff --git a/snowdev/functions/utils/templates/streamlit.py b/snowdev/functions/utils/templates/streamlit.py index f2da536..0ed0531 100644 --- a/snowdev/functions/utils/templates/streamlit.py +++ b/snowdev/functions/utils/templates/streamlit.py @@ -1,44 +1,11 @@ TEMPLATE = """ You're an AI assistant specializing in snowflake, a data warehouse. You're helping a user with a question about snowflake. and write snowpark python code to answer the question. -Use this format to write snowpark streamlit code to answer the question, place the code in the handler function. Always write in code blocks, and use the triple backtick notation to specify the language. For example, to write python code, use: ```python +Write the snowpark streamlit python code to answer the question -## -import streamlit as st -from snowflake.snowpark import Session - -def get_snowflake_session() -> Session: - try: - # for local session connection - from snowdev import SnowflakeConnection - - snow_session = SnowflakeConnection().get_session() - except ModuleNotFoundError: - # for snowflake session connection - from snowflake.snowpark.context import get_active_session - - snow_session = get_active_session() - return snow_session - - -session = get_snowflake_session() -laybuy_colour_palette = ["#751DFF", "#E1CFFF"] - -st.set_page_config( - layout="wide", - page_title="Snowflake test", - page_icon="❄️", -) -# any logic here or visualizations post title - -st.title("Testing") -st.caption("testing") - -## +\n {format_instructions} \n Question: ```{question}``` Context: ```{context}``` - -Answer: """ diff --git a/snowdev/functions/utils/templates/udf.py b/snowdev/functions/utils/templates/udf.py index 8eb9ec6..57a053a 100644 --- a/snowdev/functions/utils/templates/udf.py +++ b/snowdev/functions/utils/templates/udf.py @@ -17,9 +17,9 @@ def handler(df: str) -> str: print(handler("test")) ## +\n {format_instructions} \n + Question: ```{question}``` Context: ```{context}``` - -Answer: """ From e7b443f4b7dfb1dada57e28cdfff5e16979ec08f Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 11:18:36 +1200 Subject: [PATCH 06/19] Fix empty package --- .example.env | 3 +- snowdev/functions/bot.py | 65 +++++++++++++++++++++---------------- snowdev/functions/helper.py | 28 +++++++++++----- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/.example.env b/.example.env index 4b83e4e..d7052b4 100644 --- a/.example.env +++ b/.example.env @@ -6,4 +6,5 @@ DATABASE= SCHEMA= ROLE= -OPENAI_API_KEY= \ No newline at end of file +OPENAI_API_KEY= +LLM_MODEL=gpt-3.5-turbo-16k diff --git a/snowdev/functions/bot.py b/snowdev/functions/bot.py index 3098995..f5e68cc 100644 --- a/snowdev/functions/bot.py +++ b/snowdev/functions/bot.py @@ -23,11 +23,14 @@ from snowdev.functions.utils.snowpark_methods import SnowparkMethods import re -MODEL = "gpt-4" +MODEL = os.environ.get("LLM_MODEL", "gpt-4") response_schemas = [ ResponseSchema(name="code", description="The full python code to run"), - ResponseSchema(name="packages", description="The packages to install to run the code, ignore snowflake related packages, streamlit and snowdev packages") + ResponseSchema( + name="packages", + description="The packages to install to run the code, ignore snowflake related packages, streamlit and snowdev packages", + ), ] @@ -38,7 +41,7 @@ class SnowBot: "sproc": SPROC_TEMPLATE, "streamlit": STREAMLIT_TEMPLATE, } - + @staticmethod def ai_embed(): """ @@ -108,70 +111,74 @@ def append_dependencies_to_toml(dependencies_dict, component_folder): with open(toml_path, "r") as f: data = toml.load(f) for package_name, default_version in dependencies_dict.items(): - print(f"Searching for package: {package_name}") - available_versions = SnowHelper.search_package_in_snowflake_channel(package_name) + if not package_name.strip(): + continue + print(f"\nSearching for package: {package_name}") + available_versions = SnowHelper.search_package_in_snowflake_channel( + package_name + ) if available_versions: # Set the found latest version to the TOML data - data['tool']['poetry']['dependencies'][package_name] = available_versions + data["tool"]["poetry"]["dependencies"][ + package_name + ] = available_versions print( colored( f"\nPackage {package_name} is available on the Snowflake anaconda channel. Latest version: {available_versions}\n", "green", ) ) + else: print( colored( - "No need to create a package zip. Just include in your `app.toml` declaration.", - "green", + f"⚠️ Package {package_name} is not available on the Snowflake anaconda channel. Using default version: {default_version}", + "yellow", ) ) - else: - print(colored(f"⚠️ Package {package_name} is not available on the Snowflake anaconda channel. Using default version: {default_version}", "yellow")) - data['tool']['poetry']['dependencies'][package_name] = default_version + data["tool"]["poetry"]["dependencies"][package_name] = default_version with open(toml_path, "w") as f: toml.dump(data, f) - @staticmethod def append_packages_to_environment_file(component_folder, template_type, packages): if not isinstance(packages, list): packages = [packages] if template_type == "streamlit": env_file_path = os.path.join(component_folder, "environment.yml") - + if not os.path.exists(env_file_path): raise ValueError(f"The file '{env_file_path}' does not exist.") - + with open(env_file_path, "r") as env_file: data = yaml.safe_load(env_file) or {} - + # Capture old data - old_channels = data.get('channels', []) - old_dependencies = data.get('dependencies', []) - + old_channels = data.get("channels", []) + old_dependencies = data.get("dependencies", []) # Ensure the packages are unique for package in packages: if package not in old_dependencies: old_dependencies.append(package) - + # Construct new ordered dictionary new_data = { - 'name': os.path.basename(component_folder), - 'channels': old_channels, - 'dependencies': old_dependencies + "name": os.path.basename(component_folder), + "channels": old_channels, + "dependencies": old_dependencies, } - + with open(env_file_path, "w") as env_file: - yaml.safe_dump(new_data, env_file, sort_keys=False, default_flow_style=False) - + yaml.safe_dump( + new_data, env_file, sort_keys=False, default_flow_style=False + ) + else: # toml_file_path = os.path.join(component_folder, "app.toml") dependencies_dict = {package: "*" for package in packages} SnowBot.append_dependencies_to_toml(dependencies_dict, component_folder) - @staticmethod def write_environment_file(component_folder, template_type): file_map = {"streamlit": "fill.yml", "udf": "fill.toml", "sproc": "fill.toml"} @@ -246,7 +253,9 @@ def create_new_ai_component(component_name, prompt, template_type): component_folder = os.path.join("src", template_type, component_name) os.makedirs(component_folder, exist_ok=True) SnowBot.write_environment_file(component_folder, template_type) - SnowBot.append_packages_to_environment_file(component_folder, template_type, ai_generated_packages) + SnowBot.append_packages_to_environment_file( + component_folder, template_type, ai_generated_packages + ) filename = "app.py" if template_type == "streamlit": @@ -257,7 +266,7 @@ def create_new_ai_component(component_name, prompt, template_type): print( colored( - f"✅ {template_type.upper()} {component_name} generated successfully using AI!", + f"\n✅ {template_type.upper()} {component_name} generated successfully using AI!\n", "green", ) ) diff --git a/snowdev/functions/helper.py b/snowdev/functions/helper.py index 12d7a89..68af3c2 100644 --- a/snowdev/functions/helper.py +++ b/snowdev/functions/helper.py @@ -78,31 +78,41 @@ def search_package_in_snowflake_channel(cls, package_name): "--json", package_name, ] - + try: - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) stdout, stderr = process.communicate() except Exception as e: print(f"Failed to execute command {cmd}: {e}") return None - + if process.returncode != 0: - print(f"Command {cmd} failed with return code {process.returncode}: {stderr.decode()}") + print( + f"Command {cmd} failed with return code {process.returncode}: {stderr.decode()}" + ) return None - + try: results = json.loads(stdout.decode()) if package_name not in results: print(f"Package {package_name} not found") return None - versions = [package_info['version'] for package_info in results[package_name]] - latest_version = max(versions, key=lambda version: tuple(map(int, version.split('.')))) + versions = [ + package_info["version"] for package_info in results[package_name] + ] + latest_version = max( + versions, key=lambda version: tuple(map(int, version.split("."))) + ) except (json.JSONDecodeError, KeyError, ValueError) as e: - print(f"Failed to parse package versions for {package_name}. Output: {stdout.decode()}") + print( + f"Failed to parse package versions for {package_name}. Output: {stdout.decode()}" + ) return None # Return the latest version return latest_version - + @classmethod def is_package_available_in_snowflake_channel(cls, package_name): versions = cls.search_package_in_snowflake_channel(package_name) From 26b0d7df8a944db103011fb6b1efa92378ad1f0a Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 13:56:34 +1200 Subject: [PATCH 07/19] Support for tasks --- snowdev/__init__.py | 1 + snowdev/cli/commands.py | 36 ++++++++--- snowdev/deployment.py | 16 +++-- snowdev/fillers/task/fill.sql | 8 +++ snowdev/functions/bot.py | 35 ++++++++--- snowdev/functions/helper.py | 69 +++++++++++---------- snowdev/functions/task.py | 74 +++++++++++++++++++++++ snowdev/functions/utils/ingest.py | 46 +++++++++++++- snowdev/functions/utils/knowledge/task.md | 9 +++ snowdev/functions/utils/templates/task.py | 21 +++++++ 10 files changed, 262 insertions(+), 53 deletions(-) create mode 100644 snowdev/fillers/task/fill.sql create mode 100644 snowdev/functions/task.py create mode 100644 snowdev/functions/utils/knowledge/task.md create mode 100644 snowdev/functions/utils/templates/task.py diff --git a/snowdev/__init__.py b/snowdev/__init__.py index ebf1db6..f554080 100644 --- a/snowdev/__init__.py +++ b/snowdev/__init__.py @@ -4,3 +4,4 @@ from .functions.helper import SnowHelper from .functions.streamlit import StreamlitAppDeployer from .functions.bot import SnowBot +from .functions.task import TaskDeployer diff --git a/snowdev/cli/commands.py b/snowdev/cli/commands.py index 345397d..1da9266 100644 --- a/snowdev/cli/commands.py +++ b/snowdev/cli/commands.py @@ -22,9 +22,10 @@ def init(): @click.option("--udf", type=str, help="The name of the udf.") @click.option("--sproc", type=str, help="The name of the stored procedure.") @click.option("--streamlit", type=str, help="The name of the streamlit app.") -def new(udf, sproc, streamlit): +@click.option("--task", type=str, help="The name of the task.") +def new(udf, sproc, streamlit, task): """Create a new component.""" - args_dict = {"udf": udf, "sproc": sproc, "streamlit": streamlit} + args_dict = {"udf": udf, "sproc": sproc, "streamlit": streamlit, "task": task} SnowHelper.create_new_component(args_dict) @@ -65,7 +66,8 @@ def add(package): @click.option("--sproc", type=str, help="The name of the stored procedure.") @click.option("--streamlit", type=str, help="The name of the streamlit app.") @click.option("--embed", is_flag=True, help="Run the embeddings.") -def ai(udf, sproc, streamlit, embed): +@click.option("--task", type=str, help="The name of the task.") +def ai(udf, sproc, streamlit, embed, task): """AI commands.""" if embed: @@ -84,11 +86,13 @@ def ai(udf, sproc, streamlit, embed): elif streamlit: component_type = "streamlit" prompt = streamlit - + elif task: + component_type = "task" + prompt = task if not component_type: print( colored( - "⚠️ Please specify a type (--udf, --sproc, or --streamlit) along with the ai command.", + "⚠️ Please specify a type (--udf, --sproc, --streamlit or --task) along with the ai command.", "yellow", ) ) @@ -116,13 +120,31 @@ def ai(udf, sproc, streamlit, embed): @click.option("--sproc", type=str, help="The name of the stored procedure.") @click.option("--udf", type=str, help="The name of the udf.") @click.option("--streamlit", type=str, help="The name of the streamlit app.") -def deploy(sproc, udf, streamlit): +@click.option("--task", type=str, help="The name of the task.") +def deploy(sproc, udf, streamlit, task): """Deploy components.""" - arguments = {"sproc": sproc, "udf": udf, "streamlit": streamlit} + arguments = {"sproc": sproc, "udf": udf, "streamlit": streamlit, "task": task} args = DeploymentArguments(**arguments) manager = DeploymentManager(args) manager.main() +@cli.command() +@click.option("--name", type=str, required=True, help="The name of the task.") +@click.option( + "--action", + type=click.Choice(["resume", "suspend", "execute"], case_sensitive=False), + required=True, + help="The action to be performed on the task.", +) +@click.pass_context +def task(ctx, name, action): + """Commands for tasks. Actions: resume, suspend, execute.""" + ctx.ensure_object(dict) + ctx.obj["task_name"] = name + manager = DeploymentManager() + manager.deploy_task(name, option=action) + + if __name__ == "__main__": cli() diff --git a/snowdev/deployment.py b/snowdev/deployment.py index bf14be5..f19f993 100644 --- a/snowdev/deployment.py +++ b/snowdev/deployment.py @@ -12,6 +12,7 @@ SnowHelper, SnowPackageZip, StreamlitAppDeployer, + TaskDeployer, ) @@ -22,8 +23,9 @@ class DeploymentArguments(BaseModel): test: bool = False upload: Optional[str] package: Optional[str] + task: Optional[str] - @validator("udf", "sproc", "streamlit", pre=True, always=True) + @validator("udf", "sproc", "streamlit", "task", pre=True, always=True) def path_exists(cls, value, values, field, **kwargs): if value: path = "" @@ -33,6 +35,8 @@ def path_exists(cls, value, values, field, **kwargs): path = os.path.join(DeploymentManager.SPROC_PATH, value) elif "streamlit" in field.name: path = os.path.join(DeploymentManager.STREAMLIT_PATH, value) + elif "task" in field.name: + path = os.path.join(DeploymentManager.TASK_PATH, value) if not os.path.exists(path): error_message = colored( @@ -47,6 +51,7 @@ class DeploymentManager: UDF_PATH = "src/udf/" SPROC_PATH = "src/sproc/" STREAMLIT_PATH = "src/streamlit/" + TASK_PATH = "src/task/" def __init__(self, args=None): self.args = args @@ -265,8 +270,9 @@ def upload_static(self): file_path, remote_path, overwrite=True, auto_compress=False ) - def deploy_task(self, taskname): - pass + def deploy_task(self, taskname, option=None): + deployer = TaskDeployer(self.session, self.stage_name) + deployer.deploy_task(taskname, option=option) def deploy_pipe(self, pipe_name): pass @@ -274,7 +280,7 @@ def deploy_pipe(self, pipe_name): @staticmethod def create_directory_structure(): dirs_to_create = { - "src": ["sproc", "streamlit", "udf"], + "src": ["sproc", "streamlit", "udf", "task"], "static": ["packages"], } @@ -298,7 +304,7 @@ def create_directory_structure(): if not os.path.exists(".gitignore"): structure_already_exists = False with open(".gitignore", "w") as f: - f.write("*.pyc\n__pycache__/\n.env") + f.write("*.pyc\n__pycache__/\n.env\ncompiled/") if not os.path.exists("pyproject.toml"): structure_already_exists = False diff --git a/snowdev/fillers/task/fill.sql b/snowdev/fillers/task/fill.sql new file mode 100644 index 0000000..7ffdbb0 --- /dev/null +++ b/snowdev/fillers/task/fill.sql @@ -0,0 +1,8 @@ +CREATE OR REPLACE TASK sample_task + WAREHOUSE = COMPUTE_WH + SCHEDULE = 'USING CRON 0 1 * * * UTC' + COMMENT = 'This task runs daily at 1am UTC' +AS + call test_script(); -- call stored procedure + +ALTER TASK sample_task RESUME; \ No newline at end of file diff --git a/snowdev/functions/bot.py b/snowdev/functions/bot.py index f5e68cc..1db738e 100644 --- a/snowdev/functions/bot.py +++ b/snowdev/functions/bot.py @@ -19,13 +19,14 @@ TEMPLATE as STREAMLIT_TEMPLATE, ) from snowdev.functions.utils.templates.udf import TEMPLATE as UDF_TEMPLATE +from snowdev.functions.utils.templates.task import TEMPLATE as TASK_TEMPLATE from snowdev.functions.utils.ingest import DocumentProcessor, Secrets, Config from snowdev.functions.utils.snowpark_methods import SnowparkMethods import re MODEL = os.environ.get("LLM_MODEL", "gpt-4") -response_schemas = [ +python_schemas = [ ResponseSchema(name="code", description="The full python code to run"), ResponseSchema( name="packages", @@ -33,6 +34,10 @@ ), ] +task_schemas = [ + ResponseSchema(name="code", description="The sql code to run snowflake task"), +] + class SnowBot: @@ -40,6 +45,7 @@ class SnowBot: "udf": UDF_TEMPLATE, "sproc": SPROC_TEMPLATE, "streamlit": STREAMLIT_TEMPLATE, + "task": TASK_TEMPLATE, } @staticmethod @@ -63,7 +69,9 @@ def ai_embed(): @staticmethod def get_qa_prompt_for_type(template_type): - output_parser = StructuredOutputParser.from_response_schemas(response_schemas) + output_parser = StructuredOutputParser.from_response_schemas( + python_schemas if template_type != "task" else task_schemas + ) format_instructions = output_parser.get_format_instructions() if template_type not in SnowBot.TEMPLATES: raise ValueError(f"No template found for component type: {template_type}") @@ -210,6 +218,9 @@ def create_new_ai_component(component_name, prompt, template_type): return SnowBot.QA_PROMPT = SnowBot.get_qa_prompt_for_type(template_type) + + if template_type == "task": + prompt = f"{prompt}\nTask Name: {component_name}" # format_instructions = output_parser.get_format_instructions() # Check if the component already exists if SnowBot.component_exists(component_name, template_type): @@ -252,18 +263,28 @@ def create_new_ai_component(component_name, prompt, template_type): component_folder = os.path.join("src", template_type, component_name) os.makedirs(component_folder, exist_ok=True) - SnowBot.write_environment_file(component_folder, template_type) - SnowBot.append_packages_to_environment_file( - component_folder, template_type, ai_generated_packages - ) - filename = "app.py" + filename = "app.sql" if template_type == "task" else "app.py" if template_type == "streamlit": filename = "streamlit_app.py" with open(os.path.join(component_folder, filename), "w") as f: f.write(response_content) + if template_type == "task": + print( + colored( + f"\n✅ TASK {component_name} SQL code generated successfully using AI!\n", + "green", + ) + ) + return + + SnowBot.write_environment_file(component_folder, template_type) + SnowBot.append_packages_to_environment_file( + component_folder, template_type, ai_generated_packages + ) + print( colored( f"\n✅ {template_type.upper()} {component_name} generated successfully using AI!\n", diff --git a/snowdev/functions/helper.py b/snowdev/functions/helper.py index 68af3c2..c64255f 100644 --- a/snowdev/functions/helper.py +++ b/snowdev/functions/helper.py @@ -14,6 +14,7 @@ class SnowHelperConfig(BaseModel): udf: str = None sproc: str = None streamlit: str = None + task: str = None class SnowHelper: @@ -23,6 +24,7 @@ class SnowHelper: "udf": "src/udf", "sproc": "src/sproc", "streamlit": "src/streamlit", + "task": "src/task", } @staticmethod @@ -42,6 +44,9 @@ def get_template_path(relative_path): "py": "fillers/streamlit/fill.py", "yml": "fillers/streamlit/fill.yml", }, + "task": { + "sql": "fillers/task/fill.sql", + }, } @classmethod @@ -155,7 +160,7 @@ def create_new_component(cls, args_dict): if not item_type: print( colored( - "Error: Please provide either --udf, --sproc, or --streamlit when using the 'new' command.", + "Error: Please provide either --udf, --sproc, --streamlit, or --task when using the 'new' command.", "red", ) ) @@ -175,45 +180,23 @@ def create_new_component(cls, args_dict): os.makedirs(new_item_path, exist_ok=True) creation_successful = True + # Handle creation for Streamlit if item_type == "streamlit": for ext, template_name in cls.TEMPLATES[item_type].items(): output_name = "streamlit_app.py" if ext == "py" else "environment.yml" - try: - template_content = pkg_resources.resource_string( - "snowdev", template_name - ).decode("utf-8") - with open(os.path.join(new_item_path, output_name), "w") as f: - f.write(template_content) - except FileNotFoundError: - creation_successful = False - print( - colored( - f"No template found for {item_type} with extension {ext}. Creating an empty {output_name}...", - "yellow", - ) - ) - with open(os.path.join(new_item_path, output_name), "w") as f: - pass + cls._create_file_from_template( + new_item_path, output_name, template_name, item_type, ext + ) + # Handle creation for UDF, SPROC, and Task else: for ext, template_name in cls.TEMPLATES[item_type].items(): filename = "app.py" if ext == "py" else "app.toml" - try: - template_content = pkg_resources.resource_string( - "snowdev", template_name - ).decode("utf-8") - with open(os.path.join(new_item_path, filename), "w") as f: - f.write(template_content) - except FileNotFoundError: - creation_successful = False - print( - colored( - f"No template found for {item_type} with extension {ext}. Creating an empty {filename}...", - "yellow", - ) - ) - with open(os.path.join(new_item_path, filename), "w") as f: - pass + if item_type == "task" and ext == "sql": + filename = "app.sql" + cls._create_file_from_template( + new_item_path, filename, template_name, item_type, ext + ) if creation_successful: print( @@ -221,3 +204,23 @@ def create_new_component(cls, args_dict): f"{item_type} {item_name} has been successfully created!", "green" ) ) + + @staticmethod + def _create_file_from_template( + new_item_path, filename, template_name, item_type, ext + ): + try: + template_content = pkg_resources.resource_string( + "snowdev", template_name + ).decode("utf-8") + with open(os.path.join(new_item_path, filename), "w") as f: + f.write(template_content) + except FileNotFoundError: + print( + colored( + f"No template found for {item_type} with extension {ext}. Creating an empty {filename}...", + "yellow", + ) + ) + with open(os.path.join(new_item_path, filename), "w") as f: + pass diff --git a/snowdev/functions/task.py b/snowdev/functions/task.py new file mode 100644 index 0000000..2ecc433 --- /dev/null +++ b/snowdev/functions/task.py @@ -0,0 +1,74 @@ +from __future__ import annotations + +import os +import re + +from termcolor import colored + + +class TaskDeployer: + def __init__(self, session, stage_name: str): + self.session = session + self.stage_name = stage_name + self.warehouse = self.session.get_current_warehouse().replace('"', "") + self.database = self.session.get_current_database().replace('"', "") + + def create_stage_if_not_exists(self, stage_name: str): + self.session.sql( + f"CREATE STAGE IF NOT EXISTS {stage_name} DIRECTORY = (ENABLE = TRUE)" + ).collect() + + def deploy_task(self, task_name: str, option: None): + # Validate the task name + if not re.match("^[a-zA-Z0-9_]+$", task_name): + print( + colored( + f"⚠️ Invalid task name {task_name}! Task names should only contain alphanumeric characters and underscores.", + "yellow", + ) + ) + return + + # Define the path to the SQL file + sql_file_path = os.path.join("src", "task", task_name, "app.sql") + + # Check if the SQL file exists + if not os.path.exists(sql_file_path): + print(colored(f"⚠️ SQL file {sql_file_path} does not exist!", "yellow")) + return + + if option: + statement = ( + f"EXECUTE TASK {task_name}" + if option == "execute" + else f"ALTER TASK {task_name} {option}" + ) + self.session.sql(statement).collect() + print(colored(f"✅ Task {task_name} {option} successfully!", "green")) + return + + try: + # Read the content of the SQL file + with open(sql_file_path, "r") as sql_file: + sql_content = sql_file.read() + + statements = [ + stmt.strip() for stmt in sql_content.split(";") if stmt.strip() + ] + + if statements: + for statement in statements: + self.session.sql(statement).collect() + print( + colored(f"✅ Task {task_name} deployed successfully!", "green") + ) + else: + print(colored(f"⚠️ SQL file {sql_file_path} is empty!", "yellow")) + + except Exception as e: + print( + colored( + f"⚠️ An error occurred while deploying the task {task_name}: {str(e)}", + "red", + ) + ) diff --git a/snowdev/functions/utils/ingest.py b/snowdev/functions/utils/ingest.py index 6b042b2..c4184e4 100644 --- a/snowdev/functions/utils/ingest.py +++ b/snowdev/functions/utils/ingest.py @@ -4,9 +4,11 @@ import json import os from enum import Enum +from pathlib import Path from typing import Any, Dict, List, NamedTuple import pkg_resources +import sqlparse from langchain.document_loaders import DirectoryLoader from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter @@ -36,6 +38,7 @@ class PathType(Enum): SPROC = ("src/sproc", "stored procedure") UDF = ("src/udf", "user-defined function") STREAMLIT = ("src/streamlit", "Streamlit app") + TASK = ("src/task", "snowflake task") def __init__(self, path: str, desc: str): self.path = path @@ -53,11 +56,13 @@ def __init__( self.embeddings = OpenAIEmbeddings(openai_api_key=secrets.OPENAI_API_KEY) self.checksum_file = checksum_file self.checksum_dict = self._load_checksums() + self._convert_sql_to_md_if_changed() def _initialize_loaders(self, docs_dir: str): self.loader_py = DirectoryLoader(docs_dir, glob="**/*.py") self.loader_md = DirectoryLoader(docs_dir, glob="**/*.md") self.loader_src_py = DirectoryLoader("src/", glob="**/*.py") + self.loader_src_sql = DirectoryLoader("src/", glob="**/*.md") def _load_checksums(self) -> Dict[str, str]: if os.path.exists(self.checksum_file): @@ -109,15 +114,54 @@ def process(self) -> Dict[str, Any]: self._save_checksums() return vector_store + def _convert_sql_to_md_if_changed(self): + src_dir = Path("src/task") + target_dir = Path("compiled/task") + + target_dir.mkdir(parents=True, exist_ok=True) + + for sql_file in src_dir.glob("**/*.sql"): + with sql_file.open("r") as file: + content = file.read() + + checksum = self._create_checksum(content) + + if checksum != self.checksum_dict.get(str(sql_file)): + self.checksum_dict[str(sql_file)] = checksum + + # Convert SQL content to Markdown + formatted_sql = sqlparse.format(content, reindent=True) + md_content = f"```sql\n{formatted_sql}\n```" + + # Define the target Markdown file path + relative_path = sql_file.relative_to(src_dir) + target_md_file = target_dir / relative_path.with_suffix(".md") + + target_md_file.parent.mkdir(parents=True, exist_ok=True) + + with target_md_file.open("w") as file: + file.write(md_content) + + self._save_checksums() + def _load_and_filter_documents(self) -> List[str]: data = [] for record in ( - self.loader_py.load() + self.loader_md.load() + self.loader_src_py.load() + self.loader_py.load() + + self.loader_md.load() + + self.loader_src_py.load() + + self.loader_src_sql.load() ): content = self._extract_content_from_record(record) checksum = self._create_checksum(content) filename = self._extract_filename_from_record(record) + # Check if the content is SQL + if filename.endswith(".sql"): + # Convert SQL to Markdown + formatted_sql = sqlparse.format(content, reindent=True) + content = f"```sql\n{formatted_sql}\n```" + if checksum != self.checksum_dict.get(filename): self.checksum_dict[filename] = checksum prompt = self._generate_prompt_from_path(filename) diff --git a/snowdev/functions/utils/knowledge/task.md b/snowdev/functions/utils/knowledge/task.md new file mode 100644 index 0000000..ad4e2be --- /dev/null +++ b/snowdev/functions/utils/knowledge/task.md @@ -0,0 +1,9 @@ +This is the definition to create tasks in snowflake. + +CREATE OR REPLACE TASK sample_task -- this the task name and folder name + WAREHOUSE = COMPUTE_WH + SCHEDULE = 'USING CRON 0 1 * * * UTC' -- this is the schedule + COMMENT = 'This task runs daily at 1am UTC' -- add comment + call test_script(); -- call stored procedure or sql statement + +-- alter task sample_task resume; -- to resume the task if asked to suspend else do not run this command \ No newline at end of file diff --git a/snowdev/functions/utils/templates/task.py b/snowdev/functions/utils/templates/task.py new file mode 100644 index 0000000..ac07e29 --- /dev/null +++ b/snowdev/functions/utils/templates/task.py @@ -0,0 +1,21 @@ +TEMPLATE = """ +You're an AI assistant specializing in snowflake, a data warehouse. You're helping a user with a question about snowflake. and write snowflake sql code to answer the question. + +Use this format to write the sql code to answer the question. + +## +CREATE OR REPLACE TASK sample_task -- the name of the task + WAREHOUSE = COMPUTE_WH + SCHEDULE = 'USING CRON 0 1 * * * UTC' -- schedule to run based on cron expression + COMMENT = 'This task runs daily at 1am UTC' -- optional comment +AS + call test_script(); -- call stored procedure + +## + +\n {format_instructions} \n + +Question: ```{question}``` + +Context: ```{context}``` +""" From 6f19957bbccfcf6c1e18ea412cad3fcb44f8841b Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 13:56:49 +1200 Subject: [PATCH 08/19] Add compiled to ignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b4cadc0..8df87b5 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,7 @@ install-snowpark-ml-1.0.2.sh chroma_db/ # checksums for chromadb -checksums.json \ No newline at end of file +checksums.json + +# compiled task scripts +compiled/ \ No newline at end of file From 8001c822c037f4333f1bdbb64fda527aca6f78a6 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 16:27:12 +1200 Subject: [PATCH 09/19] Update docs --- README.md | 15 ++++++++++-- docs/cli.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++ docs/quickstart.md | 29 +++++++++++++++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 docs/cli.md diff --git a/README.md b/README.md index c8ba44d..fa55b75 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,16 @@ SnowDev is a command-line utility designed for deploying various components related to Snowflake such as UDFs, stored procedures, and Streamlit applications using **Snowpark**. This tool streamlines tasks like initializing directories, local testing, uploading, and auto create components code using AI. +## Features + +SnowDev currently supports the following components: + +- **UDF (User-Defined Function)** +- **Stored Procedure** +- **Streamlit** +- **Tasks** + + ## Setup ```bash @@ -55,6 +65,7 @@ snowdev [options] - `--udf `: Name or identifier for the UDF you want to deploy. - `--sproc `: Name or identifier for the Stored Procedure you want to deploy. - `--streamlit `: Name or identifier for the Streamlit application you want to deploy. (This is still in PrPr) +- `--task `: Name of the snowflake task you want to deploy. - `--upload `: Specifies what to upload. Currently supported options: `static`. - `--package `: Specifies the name of the package to zip and upload to the static folder. - `--embed`: Used with the `ai` command to run embeddings. @@ -77,10 +88,10 @@ snowdev [options] - [x] Support for UDFs and Stored Procedures - [x] Support for Streamlit - [x] AI interactions for embedding and suggestions +- [x] Support for snowflake Tasks +- [x] AI to add the packages to toml file - [ ] Use AI to modify existing code for optimization -- [ ] AI to add the packages to toml file - [ ] Adding more granularity for AI commands -- [ ] Support for snowflake Tasks diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 0000000..4fee81c --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,57 @@ +# SnowDev CLI Documentation + +SnowDev is a CLI tool designed to deploy Snowflake components such as UDFs, Stored Procedures, Streamlit apps, and tasks. Below is the detailed documentation of all the commands available in the SnowDev CLI. + +## 1. `init` +- **Description**: Initialize the project structure. +- **Usage**: `snowdev init` + +## 2. `new` +- **Description**: Create a new component. +- **Usage**: `snowdev new [OPTIONS]` +- **Options**: + - `--udf `: The name of the UDF. + - `--sproc `: The name of the stored procedure. + - `--streamlit `: The name of the Streamlit app. + - `--task `: The name of the task. + +## 3. `test` +- **Description**: Test the deployment. +- **Usage**: `snowdev test [OPTIONS]` +- **Options**: + - `--udf `: The name of the UDF. + - `--sproc `: The name of the stored procedure. + +## 4. `upload` +- **Description**: Upload static content to stage, only for zipped external packages. +- **Usage**: `snowdev upload` + +## 5. `add` +- **Description**: Add a package and optionally upload. +- **Usage**: `snowdev add --package ` + +## 6. `ai` +- **Description**: Interact with AI components. Run embeddings or create new AI components. +- **Usage**: `snowdev ai [OPTIONS]` +- **Options**: + - `--udf `: The name of the UDF. + - `--sproc `: The name of the stored procedure. + - `--streamlit `: The name of the Streamlit app. + - `--embed`: Run the embeddings. + - `--task `: The name of the task. + +## 7. `deploy` +- **Description**: Deploy components. +- **Usage**: `snowdev deploy [OPTIONS]` +- **Options**: + - `--udf `: The name of the UDF. + - `--sproc `: The name of the stored procedure. + - `--streamlit `: The name of the Streamlit app. + - `--task `: The name of the task. + +## 8. `task` +- **Description**: Commands for tasks. Actions: resume, suspend, execute. +- **Usage**: `snowdev task --name --action ` +- **Options**: + - `--name `: The name of the task. (Required) + - `--action `: The action to be performed on the task. Choices: resume, suspend, execute. (Required) diff --git a/docs/quickstart.md b/docs/quickstart.md index edeb1ee..f172ade 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -105,6 +105,35 @@ Now that you have SnowDev installed and initialized, it's time to see it in acti snowdev deploy --streamlit "order_chart_app" ``` +--- +### Deploying Tasks + +1. **Add a New snowflake Task** + + Create a new task application named `sample_task`: + + ```bash + snowdev new --task "sample_task" + ``` + + Modify the sql in the src/task/sample_task/app.sql + +2. **Deploy the task Application to Production** + + Ready to go live? Deploy the application to production: + + ```bash + snowdev deploy --task "sample_task" + ``` + +3. **Resume the Task** + + Resume the task so it starts the schedule: + + ```bash + snowdev task --name "sample_task" --action resume + ``` + --- ### Deploying using AI From 0523ae0934b583b682911069748fa4bceb953d51 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 16:30:10 +1200 Subject: [PATCH 10/19] Update examples --- examples/src/sproc/test_sproc/imports.txt | 1 + examples/src/streamlit/test_script/environment.yml | 6 +----- examples/src/streamlit/test_script/external.yml | 1 - 3 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 examples/src/streamlit/test_script/external.yml diff --git a/examples/src/sproc/test_sproc/imports.txt b/examples/src/sproc/test_sproc/imports.txt index e69de29..8d79a36 100644 --- a/examples/src/sproc/test_sproc/imports.txt +++ b/examples/src/sproc/test_sproc/imports.txt @@ -0,0 +1 @@ +import any external package here \ No newline at end of file diff --git a/examples/src/streamlit/test_script/environment.yml b/examples/src/streamlit/test_script/environment.yml index 5694343..99e18c8 100644 --- a/examples/src/streamlit/test_script/environment.yml +++ b/examples/src/streamlit/test_script/environment.yml @@ -1,9 +1,5 @@ name: snowflake-test channels: - snowflake -snowflake: - database: - schema: - role: dependencies: - - pyyaml \ No newline at end of file + - pyyaml diff --git a/examples/src/streamlit/test_script/external.yml b/examples/src/streamlit/test_script/external.yml deleted file mode 100644 index 033f7af..0000000 --- a/examples/src/streamlit/test_script/external.yml +++ /dev/null @@ -1 +0,0 @@ -model: 2 \ No newline at end of file From 8ea8a02a372f1b71f3b4e5e84340a70c67809fff Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 16:51:29 +1200 Subject: [PATCH 11/19] update filler --- snowdev/fillers/streamlit/fill.py | 1 - 1 file changed, 1 deletion(-) diff --git a/snowdev/fillers/streamlit/fill.py b/snowdev/fillers/streamlit/fill.py index b57c560..7131432 100644 --- a/snowdev/fillers/streamlit/fill.py +++ b/snowdev/fillers/streamlit/fill.py @@ -16,7 +16,6 @@ def get_snowflake_session() -> Session: session = get_snowflake_session() -laybuy_colour_palette = ["#751DFF", "#E1CFFF"] st.set_page_config( layout="wide", From b59f508922cffca2b6c73a4db88b799e0978584e Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 19:27:59 +1200 Subject: [PATCH 12/19] Fix dynamic names for streamlit and task --- snowdev/fillers/task/fill.sql | 4 +--- snowdev/functions/helper.py | 10 +++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/snowdev/fillers/task/fill.sql b/snowdev/fillers/task/fill.sql index 7ffdbb0..3e821c9 100644 --- a/snowdev/fillers/task/fill.sql +++ b/snowdev/fillers/task/fill.sql @@ -3,6 +3,4 @@ CREATE OR REPLACE TASK sample_task SCHEDULE = 'USING CRON 0 1 * * * UTC' COMMENT = 'This task runs daily at 1am UTC' AS - call test_script(); -- call stored procedure - -ALTER TASK sample_task RESUME; \ No newline at end of file + call test_script(); -- call stored procedure \ No newline at end of file diff --git a/snowdev/functions/helper.py b/snowdev/functions/helper.py index c64255f..6214400 100644 --- a/snowdev/functions/helper.py +++ b/snowdev/functions/helper.py @@ -185,7 +185,7 @@ def create_new_component(cls, args_dict): for ext, template_name in cls.TEMPLATES[item_type].items(): output_name = "streamlit_app.py" if ext == "py" else "environment.yml" cls._create_file_from_template( - new_item_path, output_name, template_name, item_type, ext + new_item_path, output_name, template_name, item_type, ext, item_name ) # Handle creation for UDF, SPROC, and Task @@ -195,7 +195,7 @@ def create_new_component(cls, args_dict): if item_type == "task" and ext == "sql": filename = "app.sql" cls._create_file_from_template( - new_item_path, filename, template_name, item_type, ext + new_item_path, filename, template_name, item_type, ext, item_name ) if creation_successful: @@ -207,12 +207,16 @@ def create_new_component(cls, args_dict): @staticmethod def _create_file_from_template( - new_item_path, filename, template_name, item_type, ext + new_item_path, filename, template_name, item_type, ext, item_name=None ): try: template_content = pkg_resources.resource_string( "snowdev", template_name ).decode("utf-8") + if item_type == "streamlit" and ext == "yml": + template_content = template_content.replace("snowflake-test", item_name) + elif item_type == "task" and ext == "sql": + template_content = template_content.replace("sample_task", item_name) with open(os.path.join(new_item_path, filename), "w") as f: f.write(template_content) except FileNotFoundError: From 1aed66c85f533dfb3db39d1a8563e8f3625626e6 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 19:31:55 +1200 Subject: [PATCH 13/19] update --- examples/src/streamlit/test_script/streamlit_app.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/src/streamlit/test_script/streamlit_app.py b/examples/src/streamlit/test_script/streamlit_app.py index f01d5e2..df59b71 100644 --- a/examples/src/streamlit/test_script/streamlit_app.py +++ b/examples/src/streamlit/test_script/streamlit_app.py @@ -15,7 +15,6 @@ def get_snowflake_session() -> Session: session = get_snowflake_session() -laybuy_colour_palette = ["#751DFF", "#E1CFFF"] st.set_page_config( layout="wide", From c324c28b495cac0bcabe8242e57d01596c4b1a56 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 19:49:21 +1200 Subject: [PATCH 14/19] Add support for actions --- .github/workflows/snowflake_deploy.yml | 63 ++++++++++++++++++++++++++ snowdev/deployment.py | 9 ++++ snowdev/fillers/actions.yml | 58 ++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 .github/workflows/snowflake_deploy.yml create mode 100644 snowdev/fillers/actions.yml diff --git a/.github/workflows/snowflake_deploy.yml b/.github/workflows/snowflake_deploy.yml new file mode 100644 index 0000000..7cd545e --- /dev/null +++ b/.github/workflows/snowflake_deploy.yml @@ -0,0 +1,63 @@ +name: Deploy to Snowflake + +# This workflow is triggered on pushes to the prod branch and when there are changes in the src directory. +on: + push: + branches: + - prod + paths: + - "src/**" + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.10 + + # Install Poetry + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + + # Install project dependencies using Poetry + - name: Install dependencies + run: | + poetry install + + - name: Deploy to Snowflake + run: | + cd src + for dir in */; do + component_type=${dir%/} + case $component_type in + task) + snowdev deploy --task $dir || continue + ;; + streamlit) + snowdev deploy --streamlit $dir || continue + ;; + udf) + snowdev deploy --udf $dir || continue + ;; + sproc) + snowdev deploy --sproc $dir || continue + ;; + esac + done + env: + ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} + USER_NAME: ${{ vars.SNOWFLAKE_USER }} + PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} + ROLE: ${{ vars.SNOWFLAKE_ROLE }} + DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} + SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} + WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} + + continue-on-error: true diff --git a/snowdev/deployment.py b/snowdev/deployment.py index f19f993..4ff5840 100644 --- a/snowdev/deployment.py +++ b/snowdev/deployment.py @@ -1,4 +1,5 @@ import os +import shutil import subprocess from typing import Optional @@ -282,6 +283,7 @@ def create_directory_structure(): dirs_to_create = { "src": ["sproc", "streamlit", "udf", "task"], "static": ["packages"], + ".github": ["workflows"], } # Initialize a flag to check if the structure already exists @@ -318,6 +320,13 @@ def create_directory_structure(): except FileNotFoundError: print(colored(f"Error: Template {template_path} not found!", "red")) + actions_file_src = SnowHelper.get_template_path("fillers/actions.yml") + actions_file_dst = os.path.join(".github", "workflows", "actions.yml") + + if not os.path.exists(actions_file_dst): + structure_already_exists = False + shutil.copy(actions_file_src, actions_file_dst) + if structure_already_exists: print(colored("Project structure is already initialized!", "yellow")) else: diff --git a/snowdev/fillers/actions.yml b/snowdev/fillers/actions.yml new file mode 100644 index 0000000..56887b1 --- /dev/null +++ b/snowdev/fillers/actions.yml @@ -0,0 +1,58 @@ +name: Deploy to Snowflake + +on: + push: + branches: + - prod + paths: + - "src/**" + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.10 + + # Install snowdev using pip + - name: Install snowdev + run: | + python -m pip install --upgrade pip + pip install snowdev + + - name: Deploy to Snowflake + run: | + cd src + for dir in */; do + component_type=${dir%/} + case $component_type in + task) + snowdev deploy --task $dir || continue + ;; + streamlit) + snowdev deploy --streamlit $dir || continue + ;; + udf) + snowdev deploy --udf $dir || continue + ;; + sproc) + snowdev deploy --sproc $dir || continue + ;; + esac + done + env: + ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} + USER_NAME: ${{ vars.SNOWFLAKE_USER }} + PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} + ROLE: ${{ vars.SNOWFLAKE_ROLE }} + DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} + SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} + WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} + + continue-on-error: true From 675507dd96fdd8b648f02ec418899e56f1b5156c Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 19:55:04 +1200 Subject: [PATCH 15/19] update pyproject filler --- snowdev/fillers/pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowdev/fillers/pyproject.toml b/snowdev/fillers/pyproject.toml index 3ca0ba6..754ffa6 100644 --- a/snowdev/fillers/pyproject.toml +++ b/snowdev/fillers/pyproject.toml @@ -1,12 +1,12 @@ [tool.poetry] name = "snowdev_user" -version = "0.1.0" +version = "0.2.0" description = "snow Developers User" authors = ["Your Name "] [tool.poetry.dependencies] python = ">=3.10.0,<3.11.0" -"snowflake-snowpark-python" = { version = "1.5.1", extras = ["pandas"] } +snowdev = "^0.2.0" [build-system] requires = ["poetry-core>=1.0.0"] From 81f1929eb089a5c9d5408dcc925068f9cddcb1c6 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sat, 23 Sep 2023 21:17:08 +1200 Subject: [PATCH 16/19] Fix streamlit deployment --- README.md | 1 + poetry.lock | 948 +++++++++++++++++++-------------- pyproject.toml | 2 +- snowdev/functions/streamlit.py | 17 +- 4 files changed, 546 insertions(+), 422 deletions(-) diff --git a/README.md b/README.md index fa55b75..69039d7 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ snowdev [options] - [x] AI interactions for embedding and suggestions - [x] Support for snowflake Tasks - [x] AI to add the packages to toml file +- [ ] Support for multiple python scripts in stored procedures - [ ] Use AI to modify existing code for optimization - [ ] Adding more granularity for AI commands diff --git a/poetry.lock b/poetry.lock index f8661cc..71c848d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -529,34 +529,34 @@ cron = ["capturer (>=2.4)"] [[package]] name = "cryptography" -version = "41.0.3" +version = "41.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, - {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, - {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, - {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, ] [package.dependencies] @@ -633,18 +633,19 @@ all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" [[package]] name = "filelock" -version = "3.12.2" +version = "3.12.4" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "filetype" @@ -907,6 +908,38 @@ files = [ [package.extras] test = ["Cython (>=0.29.24,<0.30.0)"] +[[package]] +name = "huggingface-hub" +version = "0.16.4" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"}, + {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"}, +] + +[package.dependencies] +filelock = "*" +fsspec = "*" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +inference = ["aiohttp", "pydantic"] +quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["torch"] +typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] + [[package]] name = "humanfriendly" version = "10.0" @@ -934,18 +967,18 @@ files = [ [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "joblib" @@ -999,13 +1032,13 @@ text-helpers = ["chardet (>=5.1.0,<6.0.0)"] [[package]] name = "langsmith" -version = "0.0.26" +version = "0.0.40" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langsmith-0.0.26-py3-none-any.whl", hash = "sha256:61c1d4582104d96edde04e1eea1dae347645b691c44489a5871341a2a1a2a1eb"}, - {file = "langsmith-0.0.26.tar.gz", hash = "sha256:80a4ef1b663a24a460d25b9986ab2010c5d06b6061c65be473abafc0647d191a"}, + {file = "langsmith-0.0.40-py3-none-any.whl", hash = "sha256:3a10c580caeef0fd0d779df1449ab765a702075fe2b28dbe8b6c8c9e75abf1d3"}, + {file = "langsmith-0.0.40.tar.gz", hash = "sha256:a377385fd07ebe11ed0b08392cc0b8cf6ec99c11487bcfb15323c7c9e5986991"}, ] [package.dependencies] @@ -1320,41 +1353,41 @@ twitter = ["twython"] [[package]] name = "numexpr" -version = "2.8.5" +version = "2.8.6" description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.7" files = [ - {file = "numexpr-2.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51f3ab160c3847ebcca93cd88f935a7802b54a01ab63fe93152994a64d7a6cf2"}, - {file = "numexpr-2.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:de29c77f674e4eb8f0846525a475cab64008c227c8bc4ba5153ab3f72441cc63"}, - {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf85ba1327eb87ec82ae7936f13c8850fb969a0ca34f3ba9fa3897c09d5c80d7"}, - {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c00be69f747f44a631830215cab482f0f77f75af2925695adff57c1cc0f9a68"}, - {file = "numexpr-2.8.5-cp310-cp310-win32.whl", hash = "sha256:c46350dcdb93e32f033eea5a21269514ffcaf501d9abd6036992d37e48a308b0"}, - {file = "numexpr-2.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:894b027438b8ec88dea32a19193716c79f4ff8ddb92302dcc9731b51ba3565a8"}, - {file = "numexpr-2.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6df184d40d4cf9f21c71f429962f39332f7398147762588c9f3a5c77065d0c06"}, - {file = "numexpr-2.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:178b85ad373c6903e55d75787d61b92380439b70d94b001cb055a501b0821335"}, - {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:578fe4008e4d5d6ff01bbeb2d7b7ba1ec658a5cda9c720cd26a9a8325f8ef438"}, - {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef621b4ee366a5c6a484f6678c9259f5b826569f8bfa0b89ba2306d5055468bb"}, - {file = "numexpr-2.8.5-cp311-cp311-win32.whl", hash = "sha256:dd57ab1a3d3aaa9274aff1cefbf93b8ddacc7973afef5b125905f6bf18fabab0"}, - {file = "numexpr-2.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:783324ba40eb804ecfc9ebae86120a1e339ab112d0ab8a1f0d48a26354d5bf9b"}, - {file = "numexpr-2.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:183d5430db76826e54465c69db93a3c6ecbf03cda5aa1bb96eaad0147e9b68dc"}, - {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ce106f92ccea5b07b1d6f2f3c4370f05edf27691dc720a63903484a2137e48"}, - {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b594dc9e2d6291a0bc5c065e6d9caf3eee743b5663897832e9b17753c002947a"}, - {file = "numexpr-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:62b4faf8e0627673b0210a837792bddd23050ecebc98069ab23eb0633ff1ef5f"}, - {file = "numexpr-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:db5c65417d69414f1ab31302ea01d3548303ef31209c38b4849d145be4e1d1ba"}, - {file = "numexpr-2.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb36ffcfa1606e41aa08d559b4277bcad0e16b83941d1a4fee8d2bd5a34f8e0e"}, - {file = "numexpr-2.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34af2a0e857d02a4bc5758bc037a777d50dacb13bcd57c7905268a3e44994ed6"}, - {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a8dad2bfaad5a5c34a2e8bbf62b9df1dfab266d345fda1feb20ff4e264b347a"}, - {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93f5a866cd13a808bc3d3a9c487d94cd02eec408b275ff0aa150f2e8e5191f8"}, - {file = "numexpr-2.8.5-cp38-cp38-win32.whl", hash = "sha256:558390fea6370003ac749ed9d0f38d708aa096f5dcb707ddb6e0ca5a0dd37da1"}, - {file = "numexpr-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:55983806815035eb63c5039520688c49536bb7f3cc3fc1d7d64c6a00cf3f353e"}, - {file = "numexpr-2.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1510da20e6f5f45333610b1ded44c566e2690c6c437c84f2a212ca09627c7e01"}, - {file = "numexpr-2.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e8b5bf7bcb4e8dcd66522d8fc96e1db7278f901cb4fd2e155efbe62a41dde08"}, - {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ed0e1c1ef5f34381448539f1fe9015906d21c9cfa2797c06194d4207dadb465"}, - {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aea6ab45c87c0a7041183c08a798f0ad4d7c5eccbce20cfe79ce6f1a45ef3702"}, - {file = "numexpr-2.8.5-cp39-cp39-win32.whl", hash = "sha256:cbfd833ee5fdb0efb862e152aee7e6ccea9c596d5c11d22604c2e6307bff7cad"}, - {file = "numexpr-2.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:283ce8609a7ccbadf91a68f3484558b3e36d27c93c98a41ec205efb0ab43c872"}, - {file = "numexpr-2.8.5.tar.gz", hash = "sha256:45ed41e55a0abcecf3d711481e12a5fb7a904fe99d42bc282a17cc5f8ea510be"}, + {file = "numexpr-2.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80acbfefb68bd92e708e09f0a02b29e04d388b9ae72f9fcd57988aca172a7833"}, + {file = "numexpr-2.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6e884687da8af5955dc9beb6a12d469675c90b8fb38b6c93668c989cfc2cd982"}, + {file = "numexpr-2.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ef7e8aaa84fce3aba2e65f243d14a9f8cc92aafd5d90d67283815febfe43eeb"}, + {file = "numexpr-2.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee04d72307c09599f786b9231acffb10df7d7a74b2ce3681d74a574880d13ce"}, + {file = "numexpr-2.8.6-cp310-cp310-win32.whl", hash = "sha256:211804ec25a9f6d188eadf4198dd1a92b2f61d7d20993c6c7706139bc4199c5b"}, + {file = "numexpr-2.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:18b1804923cfa3be7bbb45187d01c0540c8f6df4928c22a0f786e15568e9ebc5"}, + {file = "numexpr-2.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95b9da613761e4fc79748535b2a1f58cada22500e22713ae7d9571fa88d1c2e2"}, + {file = "numexpr-2.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47b45da5aa25600081a649f5e8b2aa640e35db3703f4631f34bb1f2f86d1b5b4"}, + {file = "numexpr-2.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84979bf14143351c2db8d9dd7fef8aca027c66ad9df9cb5e75c93bf5f7b5a338"}, + {file = "numexpr-2.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d36528a33aa9c23743b3ea686e57526a4f71e7128a1be66210e1511b09c4e4e9"}, + {file = "numexpr-2.8.6-cp311-cp311-win32.whl", hash = "sha256:681812e2e71ff1ba9145fac42d03f51ddf6ba911259aa83041323f68e7458002"}, + {file = "numexpr-2.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:27782177a0081bd0aab229be5d37674e7f0ab4264ef576697323dd047432a4cd"}, + {file = "numexpr-2.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ef6e8896457a60a539cb6ba27da78315a9bb31edb246829b25b5b0304bfcee91"}, + {file = "numexpr-2.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e640bc0eaf1b59f3dde52bc02bbfda98e62f9950202b0584deba28baf9f36bbb"}, + {file = "numexpr-2.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d126938c2c3784673c9c58d94e00b1570aa65517d9c33662234d442fc9fb5795"}, + {file = "numexpr-2.8.6-cp37-cp37m-win32.whl", hash = "sha256:e93d64cd20940b726477c3cb64926e683d31b778a1e18f9079a5088fd0d8e7c8"}, + {file = "numexpr-2.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:31cf610c952eec57081171f0b4427f9bed2395ec70ec432bbf45d260c5c0cdeb"}, + {file = "numexpr-2.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5f96c89aa0b1f13685ec32fa3d71028db0b5981bfd99a0bbc271035949136b3"}, + {file = "numexpr-2.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8f37f7a6af3bdd61f2efd1cafcc083a9525ab0aaf5dc641e7ec8fc0ae2d3aa1"}, + {file = "numexpr-2.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38b8b90967026bbc36c7aa6e8ca3b8906e1990914fd21f446e2a043f4ee3bc06"}, + {file = "numexpr-2.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1967c16f61c27df1cdc43ba3c0ba30346157048dd420b4259832276144d0f64e"}, + {file = "numexpr-2.8.6-cp38-cp38-win32.whl", hash = "sha256:15469dc722b5ceb92324ec8635411355ebc702303db901ae8cc87f47c5e3a124"}, + {file = "numexpr-2.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:95c09e814b0d6549de98b5ded7cdf7d954d934bb6b505432ff82e83a6d330bda"}, + {file = "numexpr-2.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aa0f661f5f4872fd7350cc9895f5d2594794b2a7e7f1961649a351724c64acc9"}, + {file = "numexpr-2.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8e3e6f1588d6c03877cb3b3dcc3096482da9d330013b886b29cb9586af5af3eb"}, + {file = "numexpr-2.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8564186aad5a2c88d597ebc79b8171b52fd33e9b085013e1ff2208f7e4b387e3"}, + {file = "numexpr-2.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6a88d71c166e86b98d34701285d23e3e89d548d9f5ae3f4b60919ac7151949f"}, + {file = "numexpr-2.8.6-cp39-cp39-win32.whl", hash = "sha256:c48221b6a85494a7be5a022899764e58259af585dff031cecab337277278cc93"}, + {file = "numexpr-2.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:6d7003497d82ef19458dce380b36a99343b96a3bd5773465c2d898bf8f5a38f9"}, + {file = "numexpr-2.8.6.tar.gz", hash = "sha256:6336f8dba3f456e41a4ffc3c97eb63d89c73589ff6e1707141224b930263260d"}, ] [package.dependencies] @@ -1362,36 +1395,43 @@ numpy = ">=1.13.3" [[package]] name = "numpy" -version = "1.25.2" +version = "1.26.0" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, - {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, - {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, - {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, - {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, - {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, - {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, - {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, - {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, - {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, - {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, - {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd"}, + {file = "numpy-1.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292"}, + {file = "numpy-1.26.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68"}, + {file = "numpy-1.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be"}, + {file = "numpy-1.26.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3"}, + {file = "numpy-1.26.0-cp310-cp310-win32.whl", hash = "sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896"}, + {file = "numpy-1.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91"}, + {file = "numpy-1.26.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a"}, + {file = "numpy-1.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd"}, + {file = "numpy-1.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208"}, + {file = "numpy-1.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c"}, + {file = "numpy-1.26.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148"}, + {file = "numpy-1.26.0-cp311-cp311-win32.whl", hash = "sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229"}, + {file = "numpy-1.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99"}, + {file = "numpy-1.26.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388"}, + {file = "numpy-1.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581"}, + {file = "numpy-1.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb"}, + {file = "numpy-1.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505"}, + {file = "numpy-1.26.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69"}, + {file = "numpy-1.26.0-cp312-cp312-win32.whl", hash = "sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95"}, + {file = "numpy-1.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112"}, + {file = "numpy-1.26.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2"}, + {file = "numpy-1.26.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8"}, + {file = "numpy-1.26.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f"}, + {file = "numpy-1.26.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c"}, + {file = "numpy-1.26.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49"}, + {file = "numpy-1.26.0-cp39-cp39-win32.whl", hash = "sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b"}, + {file = "numpy-1.26.0-cp39-cp39-win_amd64.whl", hash = "sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2"}, + {file = "numpy-1.26.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369"}, + {file = "numpy-1.26.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8"}, + {file = "numpy-1.26.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299"}, + {file = "numpy-1.26.0.tar.gz", hash = "sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf"}, ] [[package]] @@ -1406,35 +1446,35 @@ files = [ [[package]] name = "onnxruntime" -version = "1.15.1" +version = "1.16.0" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baad59e6a763237fa39545325d29c16f98b8a45d2dfc524c67631e2e3ba44d16"}, - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:568c2db848f619a0a93e843c028e9fb4879929d40b04bd60f9ba6eb8d2e93421"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69088d7784bb04dedfd9e883e2c96e4adf8ae0451acdd0abb78d68f59ecc6d9d"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cef43737b2cd886d5d718d100f56ec78c9c476c5db5f8f946e95024978fe754"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win32.whl", hash = "sha256:79d7e65abb44a47c633ede8e53fe7b9756c272efaf169758c482c983cca98d7e"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:8bc4c47682933a7a2c79808688aad5f12581305e182be552de50783b5438e6bd"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:652b2cb777f76446e3cc41072dd3d1585a6388aeff92b9de656724bc22e241e4"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89b86dbed15740abc385055a29c9673a212600248d702737ce856515bdeddc88"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5cdd9ee748149a57f4cdfa67187a0d68f75240645a3c688299dcd08742cc98"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f748cce6a70ed38c19658615c55f4eedb9192765a4e9c4bd2682adfe980698d"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win32.whl", hash = "sha256:e0312046e814c40066e7823da58075992d51364cbe739eeeb2345ec440c3ac59"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:f0980969689cb956c22bd1318b271e1be260060b37f3ddd82c7d63bd7f2d9a79"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:345986cfdbd6f4b20a89b6a6cd9abd3e2ced2926ae0b6e91fefa8149f95c0f09"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d7b3ad75e040f1e95757f69826a11051737b31584938a26d466a0234c6de98"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3603d07b829bcc1c14963a76103e257aade8861eb208173b300cc26e118ec2f8"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3df0625b9295daf1f7409ea55f72e1eeb38d54f5769add53372e79ddc3cf98d"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win32.whl", hash = "sha256:f68b47fdf1a0406c0292f81ac993e2a2ae3e8b166b436d590eb221f64e8e187a"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:52d762d297cc3f731f54fa65a3e329b813164970671547bef6414d0ed52765c9"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:99228f9f03dc1fc8af89a28c9f942e8bd3e97e894e263abe1a32e4ddb1f6363b"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:45db7f96febb0cf23e3af147f35c4f8de1a37dd252d1cef853c242c2780250cd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bafc112a36db25c821b90ab747644041cb4218f6575889775a2c12dd958b8c3"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:985693d18f2d46aa34fd44d7f65ff620660b2c8fa4b8ec365c2ca353f0fbdb27"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win32.whl", hash = "sha256:708eb31b0c04724bf0f01c1309a9e69bbc09b85beb750e5662c8aed29f1ff9fd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:73d6de4c42dfde1e9dbea04773e6dc23346c8cda9c7e08c6554fafc97ac60138"}, + {file = "onnxruntime-1.16.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:69c86ba3d90c166944c4a3c8a5b2a24a7bc45e68ae5997d83279af21ffd0f5f3"}, + {file = "onnxruntime-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:604a46aa2ad6a51f2fc4df1a984ea571a43aa02424aea93464c32ce02d23b3bb"}, + {file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40660516b382031279fb690fc3d068ad004173c2bd12bbdc0bd0fe01ef8b7c3"}, + {file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349fd9c7875c1a76609d45b079484f8059adfb1fb87a30506934fb667ceab249"}, + {file = "onnxruntime-1.16.0-cp310-cp310-win32.whl", hash = "sha256:22c9e2f1a1f15b41b01195cd2520c013c22228efc4795ae4118048ea4118aad2"}, + {file = "onnxruntime-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:b9667a131abfd226a728cc1c1ecf5cc5afa4fff37422f95a84bc22f7c175b57f"}, + {file = "onnxruntime-1.16.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:f7b292726a1f3fa4a483d7e902da083a5889a86a860dbc3a6479988cad342578"}, + {file = "onnxruntime-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61eaf288a2482c5561f620fb686c80c32709e92724bbb59a5e4a0d349429e205"}, + {file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe2239d5821d5501eecccfe5c408485591b5d73eb76a61491a8f78179c2e65a"}, + {file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a4924604fcdf1704b7f7e087b4c0b0e181c58367a687da55b1aec2705631943"}, + {file = "onnxruntime-1.16.0-cp311-cp311-win32.whl", hash = "sha256:55d8456f1ab28c32aec9c478b7638ed145102b03bb9b719b79e065ffc5de9c72"}, + {file = "onnxruntime-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:c2a53ffd456187028c841ac7ed0d83b4c2b7e48bd2b1cf2a42d253ecf1e97cb3"}, + {file = "onnxruntime-1.16.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:bf5769aa4095cfe2503307867fa95b5f73732909ee21b67fe24da443af445925"}, + {file = "onnxruntime-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0974deadf11ddab201d915a10517be00fa9d6816def56fa374e4c1a0008985a"}, + {file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99dccf1d2eba5ecd7b6c0e8e80d92d0030291f3506726c156e018a4d7a187c6f"}, + {file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0170ed05d3a8a7c24fe01fc262a6bc603837751f3bb273df7006a2da73f37fff"}, + {file = "onnxruntime-1.16.0-cp38-cp38-win32.whl", hash = "sha256:5ecd38e98ccdcbbaa7e529e96852f4c1c136559802354b76378d9a19532018ee"}, + {file = "onnxruntime-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c585c60e9541a9bd4fb319ba9a3ef6122a28dcf4f3dbcdf014df44570cad6f8"}, + {file = "onnxruntime-1.16.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:efe59c1e51ad647fb18860233f5971e309961d09ca10697170ef9b7d9fa728f4"}, + {file = "onnxruntime-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e3c9a9cccab8f6512a0c0207b2816dd8864f2f720f6e9df5cf01e30c4f80194f"}, + {file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf16a252308ec6e0737db7028b63fed0ac28fbad134f86216c0dfb051a31f38"}, + {file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f533aa90ee7189e88b6b612d6adae7d290971090598cfd47ce034ab0d106fc9c"}, + {file = "onnxruntime-1.16.0-cp39-cp39-win32.whl", hash = "sha256:306c7f5d8a0c24c65afb34f7deb0bc526defde2249e53538f1dce083945a2d6e"}, + {file = "onnxruntime-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:df8a00a7b057ba497e2822175cc68731d84b89a6d50a3a2a3ec51e98e9c91125"}, ] [package.dependencies] @@ -1447,13 +1487,13 @@ sympy = "*" [[package]] name = "openai" -version = "0.27.9" +version = "0.27.10" description = "Python client library for the OpenAI API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-0.27.9-py3-none-any.whl", hash = "sha256:6a3cf8e276d1a6262b50562fbc0cba7967cfebb78ed827d375986b48fdad6475"}, - {file = "openai-0.27.9.tar.gz", hash = "sha256:b687761c82f5ebb6f61efc791b2083d2d068277b94802d4d1369efe39851813d"}, + {file = "openai-0.27.10-py3-none-any.whl", hash = "sha256:beabd1757e3286fa166dde3b70ebb5ad8081af046876b47c14c41e203ed22a14"}, + {file = "openai-0.27.10.tar.gz", hash = "sha256:60e09edf7100080283688748c6803b7b3b52d5a55d21890f3815292a0552d83b"}, ] [package.dependencies] @@ -1622,67 +1662,77 @@ image = ["Pillow"] [[package]] name = "pillow" -version = "10.0.0" +version = "9.5.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, + {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, + {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, + {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, + {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, + {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, + {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, + {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, + {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, + {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, + {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, + {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, + {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, + {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, + {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, + {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, ] [package.extras] @@ -1729,63 +1779,63 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint" [[package]] name = "protobuf" -version = "4.24.1" +version = "4.24.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.24.1-cp310-abi3-win32.whl", hash = "sha256:d414199ca605eeb498adc4d2ba82aedc0379dca4a7c364ff9bc9a179aa28e71b"}, - {file = "protobuf-4.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:5906c5e79ff50fe38b2d49d37db5874e3c8010826f2362f79996d83128a8ed9b"}, - {file = "protobuf-4.24.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:970c701ee16788d74f3de20938520d7a0aebc7e4fff37096a48804c80d2908cf"}, - {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc361148e902949dcb953bbcb148c99fe8f8854291ad01107e4120361849fd0e"}, - {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:5d32363d14aca6e5c9e9d5918ad8fb65b091b6df66740ae9de50ac3916055e43"}, - {file = "protobuf-4.24.1-cp37-cp37m-win32.whl", hash = "sha256:df015c47d6855b8efa0b9be706c70bf7f050a4d5ac6d37fb043fbd95157a0e25"}, - {file = "protobuf-4.24.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d4af4fd9e9418e819be30f8df2a16e72fbad546a7576ac7f3653be92a6966d30"}, - {file = "protobuf-4.24.1-cp38-cp38-win32.whl", hash = "sha256:302e8752c760549ed4c7a508abc86b25d46553c81989343782809e1a062a2ef9"}, - {file = "protobuf-4.24.1-cp38-cp38-win_amd64.whl", hash = "sha256:06437f0d4bb0d5f29e3d392aba69600188d4be5ad1e0a3370e581a9bf75a3081"}, - {file = "protobuf-4.24.1-cp39-cp39-win32.whl", hash = "sha256:0b2b224e9541fe9f046dd7317d05f08769c332b7e4c54d93c7f0f372dedb0b1a"}, - {file = "protobuf-4.24.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd39b9094a4cc003a1f911b847ab379f89059f478c0b611ba1215053e295132e"}, - {file = "protobuf-4.24.1-py3-none-any.whl", hash = "sha256:55dd644adc27d2a624339332755fe077c7f26971045b469ebb9732a69ce1f2ca"}, - {file = "protobuf-4.24.1.tar.gz", hash = "sha256:44837a5ed9c9418ad5d502f89f28ba102e9cd172b6668bc813f21716f9273348"}, + {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, + {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, + {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, + {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, + {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, + {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, + {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, + {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, + {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, + {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, + {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, ] [[package]] name = "pulsar-client" -version = "3.2.0" +version = "3.3.0" description = "Apache Pulsar Python client library" optional = false python-versions = "*" files = [ - {file = "pulsar_client-3.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:da53bbe1903026ca1253d36a67bde0ae88513497091658aee8c5514c3e567483"}, - {file = "pulsar_client-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec595a71b7a25f1a72a1350efd6680a511b53253c3cac1911ba3d6c4d71fa64c"}, - {file = "pulsar_client-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3557c65463d74ec8d2864752389beb06761ab591dd134a164e0b1303c66719b"}, - {file = "pulsar_client-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d51dc76fec48217489bde95754ad58288c9389361de42f5a27d64e19840d27fb"}, - {file = "pulsar_client-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9ef2baf85311e0fe1b98342fdafbb93a1818a08ef999eaa524234fedf6f3b941"}, - {file = "pulsar_client-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:0928b02beda0c98e77178f4e30e962ddb8ee8c3320e4c7304a78b0796e976523"}, - {file = "pulsar_client-3.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:584f44b03474a69906be711a597a4d516263a55be31e49fc07be503dc8406821"}, - {file = "pulsar_client-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a637b9a3b30860c61e68a7b8ea650e0987d89e82f73b6a3df1ab662a6438fdda"}, - {file = "pulsar_client-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4a187fdc5febcf16f725179dcf2c476f31eeebd8353794d91754a3202dd5072"}, - {file = "pulsar_client-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5ff879f868cf1fd29db99f39fdb22b3ec3e749c648aca28526689756d922d1c5"}, - {file = "pulsar_client-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a5f85d0cc414f739a5b51d843f213b54b2cd768c3a34f7c27cca410712b1f81"}, - {file = "pulsar_client-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:4fe748283848d829a80c0323558faeebea4c240d69fa58314ac90344f6999d17"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-macosx_10_15_universal2.whl", hash = "sha256:06b91c26def86dbbc35be15257999fd8a2afbadf32983916ea3eef44f4d4cab4"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ec897bc8d232e6b118793378fc662a844334b829a28a1b4ad1c5fe8d019135"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa37c96c25c1b5aff3bad0fd0194b385ec190b2c67a2f439ac91577f81ae18d3"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d49cdd4d1b7fc2e80d100acf14e6fd3898f6e099e403fc56ed22a690245b2fec"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0058ca3191fd24528ccf94dba6f12e4093831454a2597166f96900d0717271bf"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cb69b0411008e0b56df51de0aab20aa1c1a12aef3019b9ceba89afbae1f07fe2"}, - {file = "pulsar_client-3.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:f7d33e99602352df7a30707eab4e5781654602212fb618928bffb5523f2bcf35"}, - {file = "pulsar_client-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad1ac15a175ca90555c681a4d0134568771c6346b97a172f3ef14006556a50ae"}, - {file = "pulsar_client-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:369e08ef1d5cb196dd9271039928800f90b4701a9c9df90bc068b44260d2fb11"}, - {file = "pulsar_client-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a52ba2b6736a2ebeed31b590e75d417dda149e333461655860efa84d898a3eb4"}, - {file = "pulsar_client-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c801334b3b569b23976481a2922bcea0c6dd990fc26544658dd9e9c8f78ca36"}, - {file = "pulsar_client-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:cd01fd419280e9013d1655bc53662248be2656b623b1506480e1a985aa7dadd2"}, - {file = "pulsar_client-3.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:0abe54d84db76435a6cd88ce27610352cabc7efae9fa3e7f874e032ec2ca0b3f"}, - {file = "pulsar_client-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a1b6a806eb4819d8cbab1c4ae44ebf2110a94204a46c365f5757e1455252f2"}, - {file = "pulsar_client-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ea2a6b75ae0e303d522e5b57c75a4ff03dc18b9bfc14151fb14dfaf5866f17"}, - {file = "pulsar_client-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be6d3a9b2e1db3b6d1a7db5e13f7b4ed420674cf072cdb520fb004c4cd54c0af"}, - {file = "pulsar_client-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6b733e6239ffb505f7084df0175baf9d0215f14d0a02e9bbd1fdf71a2d6ea17"}, - {file = "pulsar_client-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:edc2135d02b4793efb086edca0ffaa6e8ac9133961c2cdc17ae487e0a53da481"}, + {file = "pulsar_client-3.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:c31afd3e67a044ff93177df89e08febf214cc965e95ede097d9fe8755af00e01"}, + {file = "pulsar_client-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f66982284571674b215324cc26b5c2f7c56c7043113c47a7084cb70d67a8afb"}, + {file = "pulsar_client-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fe50a06f81c48a75a9b95c27a6446260039adca71d9face273740de96b2efca"}, + {file = "pulsar_client-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d4c46a4b96a6e9919cfe220156d69a2ede8053d9ea1add4ada108abcf2ba9775"}, + {file = "pulsar_client-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1e4b5d44b992c9b036286b483f3588c10b89c6047fb59d80c7474445997f4e10"}, + {file = "pulsar_client-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:497a59ac6b650835a3b2c502f53477e5c98e5226998ca3f17c0b0a3eb4d67d08"}, + {file = "pulsar_client-3.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:386e78ff52058d881780bae1f6e84ac9434ae0b01a8581755ca8cc0dc844a332"}, + {file = "pulsar_client-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e4ecb780df58bcfd3918590bd3ff31ed79bccfbef3a1a60370642eb1e14a9d2"}, + {file = "pulsar_client-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1e215c252f22a6f26ca5e9076826041a04d88dc213b92c86b524be2774a64"}, + {file = "pulsar_client-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b0fd5be73a4103986b9dbe3a66468cf8829371e34af87ff8f216e3980f4cbe"}, + {file = "pulsar_client-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33656450536d83eed1563ff09692c2c415fb199d88e9ed97d701ca446a119e1b"}, + {file = "pulsar_client-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:ce33de700b06583df8777e139d68cb4b4b3d0a2eac168d74278d8935f357fb10"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-macosx_10_15_universal2.whl", hash = "sha256:7b5dd25cf778d6c980d36c53081e843ea272afe7af4f0ad6394ae9513f94641b"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c4e6865fda62a2e460f823dce4d49ac2973a4459b8ff99eda5fdd6aaaebf46"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1810ddc623c8de2675d17405ce47057a9a2b92298e708ce4d9564847f5ad904"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8259c3b856eb6deaa1f93dce893ab18d99d36d102da5612c8e97a4fb41b70ab1"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e7a48b2e505cde758fd51a601b5da0671fa98c9baee38362aaaa3ab2b930c28"}, + {file = "pulsar_client-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ede264385d47257b2f2b08ecde9181ec5338bea5639cc543d1856f01736778d2"}, + {file = "pulsar_client-3.3.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:0f64c62746ccd5b65a0c505f5f40b9af1f147eb1fa2d8f9c90cd5c8b92dd8597"}, + {file = "pulsar_client-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b84a20c9012e3c4ef1b7085acd7467197118c090b378dec27d773fb79d91556"}, + {file = "pulsar_client-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e15fa696e275ccb66d0791fdc19c4dea0420d81349c8055e485b134125e14f"}, + {file = "pulsar_client-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:72cbb1bdcba2dd1265296b5ba65331622ee89c16db75edaad46dd7b90c6dd447"}, + {file = "pulsar_client-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d54dd12955bf587dd46d9184444af5e853d9da2a14bbfb739ed2c7c3b78ce280"}, + {file = "pulsar_client-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:43f98afdf0334b2b957a4d96f97a1fe8a7f7fd1e2631d40c3f00b4162f396485"}, + {file = "pulsar_client-3.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:efe7c1e6a96daccc522c3567b6847ffa54c13e0f510d9a427b4aeff9fbebe54b"}, + {file = "pulsar_client-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f28e94420090fceeb38e23fc744f3edf8710e48314ef5927d2b674a1d1e43ee0"}, + {file = "pulsar_client-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c8f3eaa98e2351805ecb6efb6d5fedf47a314a3ce6af0e05ea1449ea7244ed"}, + {file = "pulsar_client-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e69750f8ae57e55fddf97b459ce0d8b38b2bb85f464a71e871ee6a86d893be7"}, + {file = "pulsar_client-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7e147e5ba460c1818bc05254279a885b4e552bcafb8961d40e31f98d5ff46628"}, + {file = "pulsar_client-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:694530af1d6c75fb81456fb509778c1868adee31e997ddece6e21678200182ea"}, ] [package.dependencies] @@ -1846,43 +1896,43 @@ files = [ [[package]] name = "pycryptodomex" -version = "3.18.0" +version = "3.19.0" description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "pycryptodomex-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:160a39a708c36fa0b168ab79386dede588e62aec06eb505add870739329aecc6"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c2953afebf282a444c51bf4effe751706b4d0d63d7ca2cc51db21f902aa5b84e"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:ba95abd563b0d1b88401658665a260852a8e6c647026ee6a0a65589287681df8"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:192306cf881fe3467dda0e174a4f47bb3a8bb24b90c9cdfbdc248eec5fc0578c"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:f9ab5ef0718f6a8716695dea16d83b671b22c45e9c0c78fd807c32c0192e54b5"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:50308fcdbf8345e5ec224a5502b4215178bdb5e95456ead8ab1a69ffd94779cb"}, - {file = "pycryptodomex-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:4d9379c684efea80fdab02a3eb0169372bca7db13f9332cb67483b8dc8b67c37"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5594a125dae30d60e94f37797fc67ce3c744522de7992c7c360d02fdb34918f8"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8ff129a5a0eb5ff16e45ca4fa70a6051da7f3de303c33b259063c19be0c43d35"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:3d9314ac785a5b75d5aaf924c5f21d6ca7e8df442e5cf4f0fefad4f6e284d422"}, - {file = "pycryptodomex-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:f237278836dda412a325e9340ba2e6a84cb0f56b9244781e5b61f10b3905de88"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac614363a86cc53d8ba44b6c469831d1555947e69ab3276ae8d6edc219f570f7"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:302a8f37c224e7b5d72017d462a2be058e28f7be627bdd854066e16722d0fc0c"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:6421d23d6a648e83ba2670a352bcd978542dad86829209f59d17a3f087f4afef"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84e105787f5e5d36ec6a581ff37a1048d12e638688074b2a00bcf402f9aa1c2"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6875eb8666f68ddbd39097867325bd22771f595b4e2b0149739b5623c8bf899b"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:27072a494ce621cc7a9096bbf60ed66826bb94db24b49b7359509e7951033e74"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:1949e09ea49b09c36d11a951b16ff2a05a0ffe969dda1846e4686ee342fe8646"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6ed3606832987018615f68e8ed716a7065c09a0fe94afd7c9ca1b6777f0ac6eb"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-win32.whl", hash = "sha256:d56c9ec41258fd3734db9f5e4d2faeabe48644ba9ca23b18e1839b3bdf093222"}, - {file = "pycryptodomex-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:e00a4bacb83a2627e8210cb353a2e31f04befc1155db2976e5e239dd66482278"}, - {file = "pycryptodomex-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:2dc4eab20f4f04a2d00220fdc9258717b82d31913552e766d5f00282c031b70a"}, - {file = "pycryptodomex-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:75672205148bdea34669173366df005dbd52be05115e919551ee97171083423d"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bec6c80994d4e7a38312072f89458903b65ec99bed2d65aa4de96d997a53ea7a"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35a8ffdc8b05e4b353ba281217c8437f02c57d7233363824e9d794cf753c419"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f0a46bee539dae4b3dfe37216f678769349576b0080fdbe431d19a02da42ff"}, - {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:71687eed47df7e965f6e0bf3cadef98f368d5221f0fb89d2132effe1a3e6a194"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73d64b32d84cf48d9ec62106aa277dbe99ab5fbfd38c5100bc7bddd3beb569f7"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbdcce0a226d9205560a5936b05208c709b01d493ed8307792075dedfaaffa5f"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58fc0aceb9c961b9897facec9da24c6a94c5db04597ec832060f53d4d6a07196"}, - {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:215be2980a6b70704c10796dd7003eb4390e7be138ac6fb8344bf47e71a8d470"}, - {file = "pycryptodomex-3.18.0.tar.gz", hash = "sha256:3e3ecb5fe979e7c1bb0027e518340acf7ee60415d79295e5251d13c68dde576e"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-win32.whl", hash = "sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc"}, + {file = "pycryptodomex-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2"}, + {file = "pycryptodomex-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644"}, + {file = "pycryptodomex-3.19.0.tar.gz", hash = "sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6"}, ] [[package]] @@ -2058,28 +2108,29 @@ files = [ [[package]] name = "python-pptx" -version = "0.6.21" +version = "0.6.22" description = "Generate and manipulate Open XML PowerPoint (.pptx) files" optional = false python-versions = "*" files = [ - {file = "python-pptx-0.6.21.tar.gz", hash = "sha256:7798a2aaf89563565b3c7120c0acfe9aff775db0db3580544e3bf4840c2e378f"}, + {file = "python-pptx-0.6.22.tar.gz", hash = "sha256:38f8ee92dde31d24b4562560e61b0357e5d97ecf75c4352ae6616d5a32978654"}, + {file = "python_pptx-0.6.22-py3-none-any.whl", hash = "sha256:3d097c29e08de2da1fc3c6752169087065efa4153216e77fc1b27dff1bcdcb46"}, ] [package.dependencies] lxml = ">=3.1.0" -Pillow = ">=3.3.2" +Pillow = ">=3.3.2,<=9.5.0" XlsxWriter = ">=0.5.7" [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -2335,19 +2386,19 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo [[package]] name = "setuptools" -version = "68.1.2" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -2373,32 +2424,32 @@ files = [ [[package]] name = "snowflake-connector-python" -version = "3.1.0" +version = "3.2.0" description = "Snowflake Connector for Python" optional = false python-versions = ">=3.8" files = [ - {file = "snowflake-connector-python-3.1.0.tar.gz", hash = "sha256:fac51fc5cef6f9d5798aa460f4e6de3e53e1a0fc7b913d2bd98b5ae806bcc83b"}, - {file = "snowflake_connector_python-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:42ce55dff02998baaadfa1e41890f7f7d2c2ffcfb0ac6a47926c41d2a324ea08"}, - {file = "snowflake_connector_python-3.1.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:39c46efaa2997f4ce48c1a55c3e56c9d32c33d59dbab41faa770d5aa4bf422f8"}, - {file = "snowflake_connector_python-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee4c0e672f1baa9963bdba3ce09b819b9618222c1a598147a720ad12f6586d2"}, - {file = "snowflake_connector_python-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc060dbdfbc1b9435fcc4c46cc01405456e22456fba5e029acd0d3807f72c8d9"}, - {file = "snowflake_connector_python-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:e3e38b909160e62245c170903abfe9cc35ff578228e91b02ff23bf4bc78f88ec"}, - {file = "snowflake_connector_python-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b85721352bf1ca0f5239cb33d2baa9a3861ad2957b4899ce9c233650416f0ef2"}, - {file = "snowflake_connector_python-3.1.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:7df207bf715f8dba50d3cfbb7c3a62dd85f87d2668047e430c20fbb06c8c2dac"}, - {file = "snowflake_connector_python-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b954d11cdc9087dcfb952ec756e1e06a9a22abe7ed3cccabb8e198eb29020663"}, - {file = "snowflake_connector_python-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da0116e63307fcca0f87a9b4eb2639a8077d7b8a16a47f803c91bf8c23891210"}, - {file = "snowflake_connector_python-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:78b13dc769b7a843e4533bd45ee3bf24296008e1ce0870cdd9952004baa429ae"}, - {file = "snowflake_connector_python-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64ee02dd00722624a9722f63161a1ccc942f3184d48ba2a01e38f53cc2e693b6"}, - {file = "snowflake_connector_python-3.1.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a1e303e4b7cd67a4ea174172ae5f4662c5e04fd876e25e85ba7d79a0e846ab3"}, - {file = "snowflake_connector_python-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d39653930c1d2d66a6ebb13b978b054f3db4a46ad4643c3ad24a130edd4d5cee"}, - {file = "snowflake_connector_python-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901def6111063768062323439b746477d36ffd74a67713e06f99dc4fbcc1b1cb"}, - {file = "snowflake_connector_python-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:170f4014be601cbc3a34e6b980efbf647a35c5771fa11bed28fc4c77cd9d59af"}, - {file = "snowflake_connector_python-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d65559d1ce2bd84751abef0ddb7e5e50c917cdcaae70a0acba1760ae362e1491"}, - {file = "snowflake_connector_python-3.1.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:a7830494da83c8fe2adf5b8f214ece7dbaaa8a7c03c2995840d8ccd84e01e865"}, - {file = "snowflake_connector_python-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49adb69f26478b6e4f577de65aa3b3907244133c8b2bb160758edaedacd711a5"}, - {file = "snowflake_connector_python-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae7ebdbb59678f7ef3338864579677bb1f1773f415bca682072fa9382d55d77"}, - {file = "snowflake_connector_python-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:276338dacb2c9e0c8b8f59febbf3d2008a2cea5793f8f4bd862009a4a08df6e8"}, + {file = "snowflake-connector-python-3.2.0.tar.gz", hash = "sha256:676a0dca16de7c120900aa1a5fce6440833b0a60f76682b7ccf1667967282ca3"}, + {file = "snowflake_connector_python-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:425a79ced49ac3bd78e7b4c3d8aa3de9146b939ae29b405e2cd515b370b8054a"}, + {file = "snowflake_connector_python-3.2.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:8846b0800589d09090cb5f024c67e18d2273ad54f5e9e3171007ad97340b9139"}, + {file = "snowflake_connector_python-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f948696c145da93295528555225c48227f91d3d1b97ff867bdb833856aed4f95"}, + {file = "snowflake_connector_python-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ffaa6925dc970995249590a17c7b9c24745e8c0793ed762f602dfc1348b64d"}, + {file = "snowflake_connector_python-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a9b919a5ccbdcae44d2f56b6f8a23f36f643ce176a88a72c734bf7304aa05b92"}, + {file = "snowflake_connector_python-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d0f7881409f08aed03a83defda03c7f388d06c9fa099480d4153a704095061a"}, + {file = "snowflake_connector_python-3.2.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:589f2f80e5722f66ccda1808acd1cf3f0d365af404e23c237fb95446cabbb5b6"}, + {file = "snowflake_connector_python-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:384dc6dbccec09c2a99b706aa44eb982eefd80c89edbbbc836629c946b028ee7"}, + {file = "snowflake_connector_python-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d849290c473f7d2a36751af3bd5a6db3b382f05749281a952fe93abf3cb2bec9"}, + {file = "snowflake_connector_python-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:39d818ca2d8715859f20350036d13cc8f7a907c453cbb49dccb9740f63de7fab"}, + {file = "snowflake_connector_python-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b29ff40c7e992c9f3a8d66441276e2271082817ed653417a261d623b076ff3a"}, + {file = "snowflake_connector_python-3.2.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:3381471beeaf6d61a79e0ca3ea38c5f0505fc8438925ba8ae8fc1463850214c3"}, + {file = "snowflake_connector_python-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:289216b57eba5e6b12aa84a96bbf54d2bfdc78a1aa3eef02e6766f80a57d8759"}, + {file = "snowflake_connector_python-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66724290d48f3421d975efd6f7d44e34f8e2a7e1efd45bbd634857bd6aad9dfc"}, + {file = "snowflake_connector_python-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:7dd9e2114adf8d81503d9ecb3a1a99bb93fa8a6d9e41d6780c470ea1fcb2b7e3"}, + {file = "snowflake_connector_python-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:efef4296602cb735b5240f5ef1279895e9e573c5ce0014b99c261b3ec367dcc1"}, + {file = "snowflake_connector_python-3.2.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:ca276903901dd6e61e5680f2aaf41c13f240451b3ce4ed58e14b02e94bde2c16"}, + {file = "snowflake_connector_python-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87d7a986026bdd52274eafb50d118a1364d75ebe6cadc46bb6f22c032de35601"}, + {file = "snowflake_connector_python-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e83647900b96069ab511d335150d8b843c132c8e097450c3b00969a1f1efe5ea"}, + {file = "snowflake_connector_python-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0777f756b84a07456167c1fb25f2566904d07bef4af2efcd1a18a96539e25ead"}, ] [package.dependencies] @@ -2465,29 +2516,29 @@ torch = ["torchdata (>=0.4,<1)"] [[package]] name = "snowflake-snowpark-python" -version = "1.5.1" +version = "1.8.0" description = "Snowflake Snowpark for Python" optional = false python-versions = ">=3.8, <3.11" files = [ - {file = "snowflake-snowpark-python-1.5.1.tar.gz", hash = "sha256:31439ed61e4180100e2ae97786f2e98029dbf31a89ad1af09bcfd3386f642faa"}, - {file = "snowflake_snowpark_python-1.5.1-py3-none-any.whl", hash = "sha256:971dd0c52ff09f80d63132808746e70beac6f86bb9eb0604fe4da60c50c23421"}, + {file = "snowflake-snowpark-python-1.8.0.tar.gz", hash = "sha256:62d3d353fb48149a3cb256331078257cf51e122f8c8b5f38a686a364f845c467"}, + {file = "snowflake_snowpark_python-1.8.0-py3-none-any.whl", hash = "sha256:78fde4313fa8a713586d3af14d3ca4437f899627c7c36b9e5e81999e8acf9ce2"}, ] [package.dependencies] cloudpickle = ">=1.6.0,<=2.0.0" +pyyaml = "*" setuptools = ">=40.6.0" snowflake-connector-python = [ - {version = ">=2.7.12,<4.0.0"}, - {version = ">=2.7.12,<4.0.0", extras = ["pandas"], optional = true, markers = "extra == \"pandas\""}, + {version = ">=3.2.0,<4.0.0"}, + {version = ">=3.2.0,<4.0.0", extras = ["pandas"], optional = true, markers = "extra == \"pandas\""}, ] -typing-extensions = ">=4.1.0,<5.0.0" wheel = "*" [package.extras] -development = ["cachetools", "coverage", "pytest", "pytest-cov", "sphinx (==5.0.2)"] -pandas = ["snowflake-connector-python[pandas] (>=2.7.12,<4.0.0)"] -secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=2.7.12,<4.0.0)"] +development = ["cachetools", "coverage", "pytest", "pytest-cov", "pytest-timeout", "sphinx (==5.0.2)"] +pandas = ["snowflake-connector-python[pandas] (>=3.2.0,<4.0.0)"] +secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.2.0,<4.0.0)"] [[package]] name = "sortedcontainers" @@ -2502,44 +2553,52 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.20" +version = "2.0.21" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98"}, - {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e"}, - {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50"}, - {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61"}, - {file = "SQLAlchemy-2.0.20-cp310-cp310-win32.whl", hash = "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d"}, - {file = "SQLAlchemy-2.0.20-cp310-cp310-win_amd64.whl", hash = "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-win32.whl", hash = "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53"}, - {file = "SQLAlchemy-2.0.20-cp311-cp311-win_amd64.whl", hash = "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e"}, - {file = "SQLAlchemy-2.0.20-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3"}, - {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57"}, - {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a"}, - {file = "SQLAlchemy-2.0.20-cp37-cp37m-win32.whl", hash = "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459"}, - {file = "SQLAlchemy-2.0.20-cp37-cp37m-win_amd64.whl", hash = "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-win32.whl", hash = "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74"}, - {file = "SQLAlchemy-2.0.20-cp38-cp38-win_amd64.whl", hash = "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-win32.whl", hash = "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9"}, - {file = "SQLAlchemy-2.0.20-cp39-cp39-win_amd64.whl", hash = "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267"}, - {file = "SQLAlchemy-2.0.20-py3-none-any.whl", hash = "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf"}, - {file = "SQLAlchemy-2.0.20.tar.gz", hash = "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win32.whl", hash = "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4"}, + {file = "SQLAlchemy-2.0.21-cp310-cp310-win_amd64.whl", hash = "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-win32.whl", hash = "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b"}, + {file = "SQLAlchemy-2.0.21-cp311-cp311-win_amd64.whl", hash = "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win32.whl", hash = "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9"}, + {file = "SQLAlchemy-2.0.21-cp37-cp37m-win_amd64.whl", hash = "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win32.whl", hash = "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6"}, + {file = "SQLAlchemy-2.0.21-cp38-cp38-win_amd64.whl", hash = "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win32.whl", hash = "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9"}, + {file = "SQLAlchemy-2.0.21-cp39-cp39-win_amd64.whl", hash = "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce"}, + {file = "SQLAlchemy-2.0.21-py3-none-any.whl", hash = "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce"}, + {file = "SQLAlchemy-2.0.21.tar.gz", hash = "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258"}, ] [package.dependencies] @@ -2717,56 +2776,117 @@ blobfile = ["blobfile (>=2)"] [[package]] name = "tokenizers" -version = "0.13.3" -description = "Fast and Customizable Tokenizers" +version = "0.14.0" +description = "" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "tokenizers-0.13.3-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:f3835c5be51de8c0a092058a4d4380cb9244fb34681fd0a295fbf0a52a5fdf33"}, - {file = "tokenizers-0.13.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4ef4c3e821730f2692489e926b184321e887f34fb8a6b80b8096b966ba663d07"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5fd1a6a25353e9aa762e2aae5a1e63883cad9f4e997c447ec39d071020459bc"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee0b1b311d65beab83d7a41c56a1e46ab732a9eed4460648e8eb0bd69fc2d059"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ef4215284df1277dadbcc5e17d4882bda19f770d02348e73523f7e7d8b8d396"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4d53976079cff8a033f778fb9adca2d9d69d009c02fa2d71a878b5f3963ed30"}, - {file = "tokenizers-0.13.3-cp310-cp310-win32.whl", hash = "sha256:1f0e3b4c2ea2cd13238ce43548959c118069db7579e5d40ec270ad77da5833ce"}, - {file = "tokenizers-0.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:89649c00d0d7211e8186f7a75dfa1db6996f65edce4b84821817eadcc2d3c79e"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:56b726e0d2bbc9243872b0144515ba684af5b8d8cd112fb83ee1365e26ec74c8"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc5c022ce692e1f499d745af293ab9ee6f5d92538ed2faf73f9708c89ee59ce6"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55c981ac44ba87c93e847c333e58c12abcbb377a0c2f2ef96e1a266e4184ff2"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f247eae99800ef821a91f47c5280e9e9afaeed9980fc444208d5aa6ba69ff148"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b3e3215d048e94f40f1c95802e45dcc37c5b05eb46280fc2ccc8cd351bff839"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ba2b0bf01777c9b9bc94b53764d6684554ce98551fec496f71bc5be3a03e98b"}, - {file = "tokenizers-0.13.3-cp311-cp311-win32.whl", hash = "sha256:cc78d77f597d1c458bf0ea7c2a64b6aa06941c7a99cb135b5969b0278824d808"}, - {file = "tokenizers-0.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:ecf182bf59bd541a8876deccf0360f5ae60496fd50b58510048020751cf1724c"}, - {file = "tokenizers-0.13.3-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:0527dc5436a1f6bf2c0327da3145687d3bcfbeab91fed8458920093de3901b44"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07cbb2c307627dc99b44b22ef05ff4473aa7c7cc1fec8f0a8b37d8a64b1a16d2"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4560dbdeaae5b7ee0d4e493027e3de6d53c991b5002d7ff95083c99e11dd5ac0"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64064bd0322405c9374305ab9b4c07152a1474370327499911937fd4a76d004b"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8c6e2ab0f2e3d939ca66aa1d596602105fe33b505cd2854a4c1717f704c51de"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win32.whl", hash = "sha256:6cc29d410768f960db8677221e497226e545eaaea01aa3613fa0fdf2cc96cff4"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fc2a7fdf864554a0dacf09d32e17c0caa9afe72baf9dd7ddedc61973bae352d8"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:8791dedba834c1fc55e5f1521be325ea3dafb381964be20684b92fdac95d79b7"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:d607a6a13718aeb20507bdf2b96162ead5145bbbfa26788d6b833f98b31b26e1"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3791338f809cd1bf8e4fee6b540b36822434d0c6c6bc47162448deee3f77d425"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2f35f30e39e6aab8716f07790f646bdc6e4a853816cc49a95ef2a9016bf9ce6"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310204dfed5aa797128b65d63538a9837cbdd15da2a29a77d67eefa489edda26"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f9b92ea052305166559f38498b3b0cae159caea712646648aaa272f7160963"}, - {file = "tokenizers-0.13.3-cp38-cp38-win32.whl", hash = "sha256:9a3fa134896c3c1f0da6e762d15141fbff30d094067c8f1157b9fdca593b5806"}, - {file = "tokenizers-0.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:8e7b0cdeace87fa9e760e6a605e0ae8fc14b7d72e9fc19c578116f7287bb873d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:00cee1e0859d55507e693a48fa4aef07060c4bb6bd93d80120e18fea9371c66d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a23ff602d0797cea1d0506ce69b27523b07e70f6dda982ab8cf82402de839088"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ce07445050b537d2696022dafb115307abdffd2a5c106f029490f84501ef97"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:280ffe95f50eaaf655b3a1dc7ff1d9cf4777029dbbc3e63a74e65a056594abc3"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97acfcec592f7e9de8cadcdcda50a7134423ac8455c0166b28c9ff04d227b371"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd7730c98a3010cd4f523465867ff95cd9d6430db46676ce79358f65ae39797b"}, - {file = "tokenizers-0.13.3-cp39-cp39-win32.whl", hash = "sha256:48625a108029cb1ddf42e17a81b5a3230ba6888a70c9dc14e81bc319e812652d"}, - {file = "tokenizers-0.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:bc0a6f1ba036e482db6453571c9e3e60ecd5489980ffd95d11dc9f960483d783"}, - {file = "tokenizers-0.13.3.tar.gz", hash = "sha256:2e546dbb68b623008a5442353137fbb0123d311a6d7ba52f2667c8862a75af2e"}, + {file = "tokenizers-0.14.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1a90e1030d9c61de64045206c62721a36f892dcfc5bbbc119dfcd417c1ca60ca"}, + {file = "tokenizers-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7cacc5a33767bb2a03b6090eac556c301a1d961ac2949be13977bc3f20cc4e3c"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81994795e1b4f868a6e73107af8cdf088d31357bae6f7abf26c42874eab16f43"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ec53f832bfa91abafecbf92b4259b466fb31438ab31e8291ade0fcf07de8fc2"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:854aa813a55d6031a6399b1bca09e4e7a79a80ec05faeea77fc6809d59deb3d5"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c34d2f02e25e0fa96e574cadb43a6f14bdefc77f84950991da6e3732489e164"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f17d5ad725c827d3dc7db2bbe58093a33db2de49bbb639556a6d88d82f0ca19"}, + {file = "tokenizers-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:337a7b7d6b32c6f904faee4304987cb018d1488c88b91aa635760999f5631013"}, + {file = "tokenizers-0.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:98a7ceb767e1079ef2c99f52a4e7b816f2e682b2b6fef02c8eff5000536e54e1"}, + {file = "tokenizers-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25ad4a0f883a311a5b021ed979e21559cb4184242c7446cd36e07d046d1ed4be"}, + {file = "tokenizers-0.14.0-cp310-none-win32.whl", hash = "sha256:360706b0c2c6ba10e5e26b7eeb7aef106dbfc0a81ad5ad599a892449b4973b10"}, + {file = "tokenizers-0.14.0-cp310-none-win_amd64.whl", hash = "sha256:1c2ce437982717a5e221efa3c546e636f12f325cc3d9d407c91d2905c56593d0"}, + {file = "tokenizers-0.14.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:612d0ba4f40f4d41163af9613dac59c902d017dc4166ea4537a476af807d41c3"}, + {file = "tokenizers-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3013ad0cff561d9be9ce2cc92b76aa746b4e974f20e5b4158c03860a4c8ffe0f"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c89a0d6d2ec393a6261df71063b1e22bdd7c6ef3d77b8826541b596132bcf524"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5514417f37fc2ca8159b27853cd992a9a4982e6c51f04bd3ac3f65f68a8fa781"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e761fd1af8409c607b11f084dc7cc50f80f08bd426d4f01d1c353b097d2640f"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c16fbcd5ef10df9e51cc84238cdb05ee37e4228aaff39c01aa12b0a0409e29b8"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3439d9f858dd9033b69769be5a56eb4fb79fde13fad14fab01edbf2b98033ad9"}, + {file = "tokenizers-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c19f8cdc3e84090464a6e28757f60461388cc8cd41c02c109e180a6b7c571f6"}, + {file = "tokenizers-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:df763ce657a297eb73008d5907243a7558a45ae0930b38ebcb575a24f8296520"}, + {file = "tokenizers-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:095b0b6683a9b76002aa94659f75c09e4359cb291b318d6e77a60965d7a7f138"}, + {file = "tokenizers-0.14.0-cp311-none-win32.whl", hash = "sha256:712ec0e68a399ded8e115e7e25e7017802fa25ee6c36b4eaad88481e50d0c638"}, + {file = "tokenizers-0.14.0-cp311-none-win_amd64.whl", hash = "sha256:917aa6d6615b33d9aa811dcdfb3109e28ff242fbe2cb89ea0b7d3613e444a672"}, + {file = "tokenizers-0.14.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8464ee7d43ecd9dd1723f51652f49b979052ea3bcd25329e3df44e950c8444d1"}, + {file = "tokenizers-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:84c2b96469b34825557c6fe0bc3154c98d15be58c416a9036ca90afdc9979229"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:24b3ccec65ee6f876cd67251c1dcfa1c318c9beec5a438b134f7e33b667a8b36"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde333fc56dd5fbbdf2de3067d6c0c129867d33eac81d0ba9b65752ad6ef4208"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddcc2f251bd8a2b2f9a7763ad4468a34cfc4ee3b0fba3cfb34d12c964950cac"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10a34eb1416dcec3c6f9afea459acd18fcc93234687de605a768a987eda589ab"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:56bc7252530a6a20c6eed19b029914bb9cc781efbe943ca9530856051de99d0f"}, + {file = "tokenizers-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07f5c2324326a00c85111081d5eae4da9d64d56abb5883389b3c98bee0b50a7c"}, + {file = "tokenizers-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5efd92e44e43f36332b5f3653743dca5a0b72cdabb012f20023e220f01f675cb"}, + {file = "tokenizers-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9223bcb77a826dbc9fd0efa6bce679a96b1a01005142778bb42ce967581c5951"}, + {file = "tokenizers-0.14.0-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:e2c1b4707344d3fbfce35d76802c2429ca54e30a5ecb05b3502c1e546039a3bb"}, + {file = "tokenizers-0.14.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:5892ba10fe0a477bde80b9f06bce05cb9d83c15a4676dcae5cbe6510f4524bfc"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e1818f33ac901d5d63830cb6a69a707819f4d958ae5ecb955d8a5ad823a2e44"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06a6fe406df1e616f9e649522683411c6c345ddaaaad7e50bbb60a2cb27e04d"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b6e2d4bc223dc6a99efbe9266242f1ac03eb0bef0104e6cef9f9512dd5c816b"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08ea1f612796e438c9a7e2ad86ab3c1c05c8fe0fad32fcab152c69a3a1a90a86"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ab1a58c05a3bd8ece95eb5d1bc909b3fb11acbd3ff514e3cbd1669e3ed28f5b"}, + {file = "tokenizers-0.14.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:495dc7d3b78815de79dafe7abce048a76154dadb0ffc7f09b7247738557e5cef"}, + {file = "tokenizers-0.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aaa0401a245d891b3b2ba9cf027dc65ca07627e11fe3ce597644add7d07064f8"}, + {file = "tokenizers-0.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae4fa13a786fd0d6549da241c6a1077f9b6320a7120d922ccc201ad1d4feea8f"}, + {file = "tokenizers-0.14.0-cp37-none-win32.whl", hash = "sha256:ae0d5b5ab6032c24a2e74cc15f65b6510070926671129e922aa3826c834558d7"}, + {file = "tokenizers-0.14.0-cp37-none-win_amd64.whl", hash = "sha256:2839369a9eb948905612f5d8e70453267d9c7bf17573e5ab49c2f28368fd635d"}, + {file = "tokenizers-0.14.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:f483af09a07fcb8b8b4cd07ac1be9f58bb739704ef9156e955531299ab17ec75"}, + {file = "tokenizers-0.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9c2ec661d0d63e618cb145ad15ddb6a81e16d9deb7a203f385d78141da028984"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:97e87eb7cbeff63c3b1aa770fdcf18ea4f1c852bfb75d0c913e71b8924a99d61"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98c4bd09b47f77f41785488971543de63db82608f0dc0bc6646c876b5ca44d1f"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0cbeb5406be31f7605d032bb261f2e728da8ac1f4f196c003bc640279ceb0f52"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe799fa48fd7dd549a68abb7bee32dd3721f50210ad2e3e55058080158c72c25"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:66daf7c6375a95970e86cb3febc48becfeec4e38b2e0195218d348d3bb86593b"}, + {file = "tokenizers-0.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b177422af79a77c46bb8f56d73827e688fdc092878cff54e24f5c07a908db"}, + {file = "tokenizers-0.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9aef7a5622648b70f979e96cbc2f795eba5b28987dd62f4dbf8f1eac6d64a1a"}, + {file = "tokenizers-0.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:397a24feff284d39b40fdd61c1c828bb6648dfe97b6766c84fbaf7256e272d09"}, + {file = "tokenizers-0.14.0-cp38-none-win32.whl", hash = "sha256:93cc2ec19b6ff6149b2e5127ceda3117cc187dd38556a1ed93baba13dffda069"}, + {file = "tokenizers-0.14.0-cp38-none-win_amd64.whl", hash = "sha256:bf7f540ab8a6fc53fb762963edb7539b11f00af8f70b206f0a6d1a25109ad307"}, + {file = "tokenizers-0.14.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a58d0b34586f4c5229de5aa124cf76b9455f2e01dc5bd6ed018f6e3bb12572d3"}, + {file = "tokenizers-0.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:90ceca6a06bb4b0048d0a51d0d47ef250d3cb37cc36b6b43334be8c02ac18b0f"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5f6c9554bda64799b1d65052d834553bff9a6ef4a6c2114668e2ed8f1871a2a3"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ee14b41024bc05ea172fc2c87f66b60d7c5c636c3a52a09a25ec18e752e6dc7"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:879201b1c76b24dc70ce02fc42c3eeb7ff20c353ce0ee638be6449f7c80e73ba"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca79ea6ddde5bb32f7ad1c51de1032829c531e76bbcae58fb3ed105a31faf021"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd5934048e60aedddf6c5b076d44ccb388702e1650e2eb7b325a1682d883fbf9"}, + {file = "tokenizers-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1566cabd4bf8f09d6c1fa7a3380a181801a495e7218289dbbd0929de471711"}, + {file = "tokenizers-0.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a8fc72a7adc6fa12db38100c403d659bc01fbf6e57f2cc9219e75c4eb0ea313c"}, + {file = "tokenizers-0.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7fd08ed6c14aa285482d9e5f48c04de52bdbcecaca0d30465d7a36bbea6b14df"}, + {file = "tokenizers-0.14.0-cp39-none-win32.whl", hash = "sha256:3279c0c1d5fdea7d3499c582fed392fb0463d1046544ca010f53aeee5d2ce12c"}, + {file = "tokenizers-0.14.0-cp39-none-win_amd64.whl", hash = "sha256:203ca081d25eb6e4bc72ea04d552e457079c5c6a3713715ece246f6ca02ca8d0"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:b45704d5175499387e33a1dd5c8d49ab4d7ef3c36a9ba8a410bb3e68d10f80a0"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6d17d5eb38ccc2f615a7a3692dfa285abe22a1e6d73bbfd753599e34ceee511c"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4a7e6e7989ba77a20c33f7a8a45e0f5b3e7530b2deddad2c3b2a58b323156134"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81876cefea043963abf6c92e0cf73ce6ee10bdc43245b6565ce82c0305c2e613"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d8cd05f73d1ce875a23bfdb3a572417c0f46927c6070ca43a7f6f044c3d6605"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:419a38b89be0081d872eac09449c03cd6589c2ee47461184592ee4b1ad93af1d"}, + {file = "tokenizers-0.14.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4caf274a9ba944eb83bc695beef95abe24ce112907fb06217875894d8a4f62b8"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:6ecb3a7741d7ebf65db93d246b102efca112860707e07233f1b88703cb01dbc5"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cb7fe9a383cb2932848e459d0277a681d58ad31aa6ccda204468a8d130a9105c"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4731e0577780d85788ab4f00d54e16e76fe305739396e6fb4c54b89e6fa12de"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9900291ccd19417128e328a26672390365dab1d230cd00ee7a5e2a0319e2716"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:493e6932fbca6875fd2e51958f1108ce4c5ae41aa6f2b8017c5f07beaff0a1ac"}, + {file = "tokenizers-0.14.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1792e6b46b89aba0d501c0497f38c96e5b54735379fd8a07a28f45736ba51bb1"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0af26d37c7080688ef606679f3a3d44b63b881de9fa00cc45adc240ba443fd85"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:99379ec4d7023c07baed85c68983bfad35fd210dfbc256eaafeb842df7f888e3"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:84118aa60dcbb2686730342a0cb37e54e02fde001f936557223d46b6cd8112cd"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d616e1859ffcc8fcda60f556c34338b96fb72ca642f6dafc3b1d2aa1812fb4dd"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7826b79bbbffc2150bf8d621297cc600d8a1ea53992547c4fd39630de10466b4"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eb3931d734f1e66b77c2a8e22ebe0c196f127c7a0f48bf9601720a6f85917926"}, + {file = "tokenizers-0.14.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:6a475b5cafc7a740bf33d00334b1f2b434b6124198384d8b511931a891be39ff"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3d3c9e286ae00b0308903d2ef7b31efc84358109aa41abaa27bd715401c3fef4"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:27244e96810434cf705f317e9b74a1163cd2be20bdbd3ed6b96dae1914a6778c"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ca9b0536fd5f03f62427230e85d9d57f9eed644ab74c319ae4877c9144356aed"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f64cdff8c0454295b739d77e25cff7264fa9822296395e60cbfecc7f66d88fb"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00cdfb40544656b7a3b176049d63227d5e53cf2574912514ebb4b9da976aaa1"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b611d96b96957cb2f39560c77cc35d2fcb28c13d5b7d741412e0edfdb6f670a8"}, + {file = "tokenizers-0.14.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:27ad1c02fdd74dcf3502fafb87393412e65f698f2e3aba4ad568a1f3b43d5c9f"}, + {file = "tokenizers-0.14.0.tar.gz", hash = "sha256:a06efa1f19dcc0e9bd0f4ffbf963cb0217af92a9694f68fe7eee5e1c6ddc4bde"}, ] +[package.dependencies] +huggingface_hub = ">=0.16.4,<0.17" + [package.extras] -dev = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] -docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] +dev = ["tokenizers[testing]"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] [[package]] @@ -2824,13 +2944,13 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -2983,33 +3103,33 @@ test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "my [[package]] name = "watchfiles" -version = "0.19.0" +version = "0.20.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.7" files = [ - {file = "watchfiles-0.19.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:91633e64712df3051ca454ca7d1b976baf842d7a3640b87622b323c55f3345e7"}, - {file = "watchfiles-0.19.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b6577b8c6c8701ba8642ea9335a129836347894b666dd1ec2226830e263909d3"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:18b28f6ad871b82df9542ff958d0c86bb0d8310bb09eb8e87d97318a3b5273af"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac19dc9cbc34052394dbe81e149411a62e71999c0a19e1e09ce537867f95ae0"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:09ea3397aecbc81c19ed7f025e051a7387feefdb789cf768ff994c1228182fda"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0376deac92377817e4fb8f347bf559b7d44ff556d9bc6f6208dd3f79f104aaf"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c75eff897786ee262c9f17a48886f4e98e6cfd335e011c591c305e5d083c056"}, - {file = "watchfiles-0.19.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb5d45c4143c1dd60f98a16187fd123eda7248f84ef22244818c18d531a249d1"}, - {file = "watchfiles-0.19.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:79c533ff593db861ae23436541f481ec896ee3da4e5db8962429b441bbaae16e"}, - {file = "watchfiles-0.19.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3d7d267d27aceeeaa3de0dd161a0d64f0a282264d592e335fff7958cc0cbae7c"}, - {file = "watchfiles-0.19.0-cp37-abi3-win32.whl", hash = "sha256:176a9a7641ec2c97b24455135d58012a5be5c6217fc4d5fef0b2b9f75dbf5154"}, - {file = "watchfiles-0.19.0-cp37-abi3-win_amd64.whl", hash = "sha256:945be0baa3e2440151eb3718fd8846751e8b51d8de7b884c90b17d271d34cae8"}, - {file = "watchfiles-0.19.0-cp37-abi3-win_arm64.whl", hash = "sha256:0089c6dc24d436b373c3c57657bf4f9a453b13767150d17284fc6162b2791911"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cae3dde0b4b2078f31527acff6f486e23abed307ba4d3932466ba7cdd5ecec79"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f3920b1285a7d3ce898e303d84791b7bf40d57b7695ad549dc04e6a44c9f120"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9afd0d69429172c796164fd7fe8e821ade9be983f51c659a38da3faaaaac44dc"}, - {file = "watchfiles-0.19.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68dce92b29575dda0f8d30c11742a8e2b9b8ec768ae414b54f7453f27bdf9545"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5569fc7f967429d4bc87e355cdfdcee6aabe4b620801e2cf5805ea245c06097c"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5471582658ea56fca122c0f0d0116a36807c63fefd6fdc92c71ca9a4491b6b48"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b538014a87f94d92f98f34d3e6d2635478e6be6423a9ea53e4dd96210065e193"}, - {file = "watchfiles-0.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20b44221764955b1e703f012c74015306fb7e79a00c15370785f309b1ed9aa8d"}, - {file = "watchfiles-0.19.0.tar.gz", hash = "sha256:d9b073073e048081e502b6c6b0b88714c026a1a4c890569238d04aca5f9ca74b"}, + {file = "watchfiles-0.20.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9"}, + {file = "watchfiles-0.20.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95"}, + {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf"}, + {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db"}, + {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164"}, + {file = "watchfiles-0.20.0-cp37-abi3-win32.whl", hash = "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5"}, + {file = "watchfiles-0.20.0-cp37-abi3-win_amd64.whl", hash = "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3"}, + {file = "watchfiles-0.20.0-cp37-abi3-win_arm64.whl", hash = "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c"}, + {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e"}, + {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644"}, + {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193"}, + {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef"}, + {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a"}, + {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49"}, + {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0"}, + {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce"}, + {file = "watchfiles-0.20.0.tar.gz", hash = "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019"}, ] [package.dependencies] @@ -3153,13 +3273,13 @@ test = ["pytest", "pytest-cov"] [[package]] name = "xlsxwriter" -version = "3.1.2" +version = "3.1.4" description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" files = [ - {file = "XlsxWriter-3.1.2-py3-none-any.whl", hash = "sha256:331508ff39d610ecdaf979e458840bc1eab6e6a02cfd5d08f044f0f73636236f"}, - {file = "XlsxWriter-3.1.2.tar.gz", hash = "sha256:78751099a770273f1c98b8d6643351f68f98ae8e6acf9d09d37dc6798f8cd3de"}, + {file = "XlsxWriter-3.1.4-py3-none-any.whl", hash = "sha256:29c7bf5ade4de1f0bb487882eb45d4845eebc3ff72a68b2090df94d83e10b92e"}, + {file = "XlsxWriter-3.1.4.tar.gz", hash = "sha256:f4b1b1ba046b50aefc0b634d465bce5bf8497530bc8625e216cf30a84ed97a46"}, ] [[package]] @@ -3252,4 +3372,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10.0,<3.11.0" -content-hash = "cc1fab048c2e9bb4bdcfc5ababf1dec8c253d9d97e9fbadb2a6652934353d200" +content-hash = "8715e094b9c4dc98dccc3dcff576bb099baff793a18a676fa6784e895b83f94e" diff --git a/pyproject.toml b/pyproject.toml index 5dd826c..011ac25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ python = ">=3.10.0,<3.11.0" pydantic = "1.10.9" termcolor = "2.3.0" -"snowflake-snowpark-python" = { version = "1.5.1", extras = ["pandas"] } +"snowflake-snowpark-python" = { version = "1.8.0", extras = ["pandas"] } snowflake-ml-python = "1.0.5" pyyaml = "^6.0.1" toml = "^0.10.2" diff --git a/snowdev/functions/streamlit.py b/snowdev/functions/streamlit.py index 7a185ef..ff87278 100644 --- a/snowdev/functions/streamlit.py +++ b/snowdev/functions/streamlit.py @@ -11,6 +11,8 @@ def __init__(self, session, stage_name): self.session = session self.stage_name = stage_name self.warehouse = self.session.get_current_warehouse().replace('"', "") + self.database = self.session.get_current_database().replace('"', "") + self.schema = self.session.get_current_schema().replace('"', "") def create_stage_if_not_exists(self, stage_name): self.session.sql( @@ -74,18 +76,19 @@ def upload_to_stage(self, file_path, stage_name, app_name): colored(put_result[0].status.upper(), "green"), ) - def create_streamlit_app(self, func_name, stage_name, app_name): - self.database = self.session.get_current_database().replace('"', "") - streamlit_name = func_name.replace("_", " ").capitalize() + def create_streamlit_app(self, func_name, stage_name): + # Create Streamlit App with properly formatted names self.session.sql( f""" - CREATE OR REPLACE STREAMLIT "{streamlit_name}" - ROOT_LOCATION = '@{stage_name}/streamlit/{func_name}' + CREATE OR REPLACE STREAMLIT "{func_name}" + ROOT_LOCATION = '@{self.database}.{self.schema}.{stage_name}/streamlit/{func_name}' MAIN_FILE = 'streamlit_app.py' QUERY_WAREHOUSE = '{self.warehouse}' - """ + TITLE = '{func_name}' + """ ).collect() + def handler_streamlit(self, filepath): directory = os.path.dirname(filepath) @@ -118,7 +121,7 @@ def handler_streamlit(self, filepath): self.upload_to_stage(file_path, self.stage_name, func_name) try: - self.create_streamlit_app(func_name, self.stage_name, func_name) + self.create_streamlit_app(func_name, self.stage_name) print( "\n", colored( From 1d1b12ae3e33e75bdf81cd234831c0a4121aefe9 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sun, 24 Sep 2023 15:12:56 +1300 Subject: [PATCH 17/19] Update fix actions and package --- .github/workflows/snowflake_deploy.yml | 93 ++++++++++++++-------- examples/src/sproc/test_sproc/app.toml | 2 +- poetry.lock | 18 ++--- pyproject.toml | 2 +- snowdev/fillers/actions.yml | 100 ++++++++++++++++-------- snowdev/fillers/sproc/fill.toml | 2 +- snowdev/fillers/udf/fill.toml | 2 +- src/sproc/test_new_/app.py | 13 +++ src/sproc/test_new_/app.toml | 8 ++ src/streamlit/snowchat/environment.yml | 5 ++ src/streamlit/snowchat/streamlit_app.py | 27 +++++++ src/task/predict_task/app.sql | 7 ++ src/udf/wow/app.py | 19 +++++ src/udf/wow/app.toml | 8 ++ 14 files changed, 230 insertions(+), 76 deletions(-) create mode 100644 src/sproc/test_new_/app.py create mode 100644 src/sproc/test_new_/app.toml create mode 100644 src/streamlit/snowchat/environment.yml create mode 100644 src/streamlit/snowchat/streamlit_app.py create mode 100644 src/task/predict_task/app.sql create mode 100644 src/udf/wow/app.py create mode 100644 src/udf/wow/app.toml diff --git a/.github/workflows/snowflake_deploy.yml b/.github/workflows/snowflake_deploy.yml index 7cd545e..d014054 100644 --- a/.github/workflows/snowflake_deploy.yml +++ b/.github/workflows/snowflake_deploy.yml @@ -1,6 +1,5 @@ name: Deploy to Snowflake -# This workflow is triggered on pushes to the prod branch and when there are changes in the src directory. on: push: branches: @@ -11,6 +10,16 @@ on: jobs: deploy: runs-on: ubuntu-latest + environment: ${{ github.ref_name }} + + env: + ACCOUNT: ${{ vars.SNOWFLAKE_ACCOUNT }} + USER_NAME: ${{ vars.SNOWFLAKE_USER }} + PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} + ROLE: ${{ vars.SNOWFLAKE_ROLE }} + DATABASE: ${{ vars.SNOWFLAKE_DATABASE }} + SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} + WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} steps: - name: Checkout code @@ -19,45 +28,67 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.10 + python-version: "3.10" + + - name: Cache dependencies + uses: actions/cache@v3 + with: + path: | + ~/.cache/pypoetry + key: ${{ runner.os }}-poetry-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-poetry- - # Install Poetry - name: Install Poetry run: | curl -sSL https://install.python-poetry.org | python3 - - # Install project dependencies using Poetry - name: Install dependencies run: | poetry install + - name: Build + run: | + poetry build + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v37 + - name: Deploy to Snowflake run: | - cd src - for dir in */; do - component_type=${dir%/} - case $component_type in - task) - snowdev deploy --task $dir || continue - ;; - streamlit) - snowdev deploy --streamlit $dir || continue - ;; - udf) - snowdev deploy --udf $dir || continue - ;; - sproc) - snowdev deploy --sproc $dir || continue - ;; - esac + IFS=$'\n' + for file in ${{ steps.changed-files.outputs.all_modified_files }}; do + # Skip if path is not under src + if [[ $file != src/* ]]; then + continue + fi + # Extract the path relative to src + rel_path="${file#src/}" + component_type=$(echo $rel_path | cut -d'/' -f1) + component_name=$(echo $rel_path | cut -d'/' -f2) + component_path="src/$component_type/$component_name" + + # Check if the component directory exists + if [ ! -d "$component_path" ]; then + echo "Directory $component_path does not exist. Skipping..." + continue + fi + + echo "Component Type: $component_type" + echo "Component Name: $component_name" + case $component_type in + task) + poetry run snowdev deploy --task $component_name || echo "Failed to deploy task $component_name" + ;; + streamlit) + poetry run snowdev deploy --streamlit $component_name || echo "Failed to deploy streamlit $component_name" + ;; + udf) + poetry run snowdev deploy --udf $component_name || echo "Failed to deploy udf $component_name" + ;; + sproc) + poetry run snowdev deploy --sproc $component_name || echo "Failed to deploy sproc $component_name" + ;; + esac done - env: - ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} - USER_NAME: ${{ vars.SNOWFLAKE_USER }} - PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} - ROLE: ${{ vars.SNOWFLAKE_ROLE }} - DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} - SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} - WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} - - continue-on-error: true diff --git a/examples/src/sproc/test_sproc/app.toml b/examples/src/sproc/test_sproc/app.toml index 153cb97..90f32f8 100644 --- a/examples/src/sproc/test_sproc/app.toml +++ b/examples/src/sproc/test_sproc/app.toml @@ -5,4 +5,4 @@ role = "" [tool.poetry.dependencies] python = "3.10.0" -snowflake-snowpark-python = "1.5.1" +snowflake-snowpark-python = "1.6.1" \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 71c848d..37db24e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2516,13 +2516,13 @@ torch = ["torchdata (>=0.4,<1)"] [[package]] name = "snowflake-snowpark-python" -version = "1.8.0" +version = "1.6.1" description = "Snowflake Snowpark for Python" optional = false python-versions = ">=3.8, <3.11" files = [ - {file = "snowflake-snowpark-python-1.8.0.tar.gz", hash = "sha256:62d3d353fb48149a3cb256331078257cf51e122f8c8b5f38a686a364f845c467"}, - {file = "snowflake_snowpark_python-1.8.0-py3-none-any.whl", hash = "sha256:78fde4313fa8a713586d3af14d3ca4437f899627c7c36b9e5e81999e8acf9ce2"}, + {file = "snowflake-snowpark-python-1.6.1.tar.gz", hash = "sha256:a34b133ad9530ca02ab5ee449761250cb24e195bd8ff13894c1650c53d10ca87"}, + {file = "snowflake_snowpark_python-1.6.1-py3-none-any.whl", hash = "sha256:1e1ba7ae56469b7381a49bceda28a727c4835cd45163840f7afc93febe9525b8"}, ] [package.dependencies] @@ -2530,15 +2530,15 @@ cloudpickle = ">=1.6.0,<=2.0.0" pyyaml = "*" setuptools = ">=40.6.0" snowflake-connector-python = [ - {version = ">=3.2.0,<4.0.0"}, - {version = ">=3.2.0,<4.0.0", extras = ["pandas"], optional = true, markers = "extra == \"pandas\""}, + {version = ">=3.0.4,<4.0.0"}, + {version = ">=3.0.4,<4.0.0", extras = ["pandas"], optional = true, markers = "extra == \"pandas\""}, ] wheel = "*" [package.extras] -development = ["cachetools", "coverage", "pytest", "pytest-cov", "pytest-timeout", "sphinx (==5.0.2)"] -pandas = ["snowflake-connector-python[pandas] (>=3.2.0,<4.0.0)"] -secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.2.0,<4.0.0)"] +development = ["cachetools", "coverage", "pytest", "pytest-cov", "sphinx (==5.0.2)"] +pandas = ["snowflake-connector-python[pandas] (>=3.0.4,<4.0.0)"] +secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.0.4,<4.0.0)"] [[package]] name = "sortedcontainers" @@ -3372,4 +3372,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10.0,<3.11.0" -content-hash = "8715e094b9c4dc98dccc3dcff576bb099baff793a18a676fa6784e895b83f94e" +content-hash = "612eb85dd5e05fb3faa05e85b21ee30f560790b7cb2c945e0a32fd48395920e1" diff --git a/pyproject.toml b/pyproject.toml index 011ac25..2d4eff1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ python = ">=3.10.0,<3.11.0" pydantic = "1.10.9" termcolor = "2.3.0" -"snowflake-snowpark-python" = { version = "1.8.0", extras = ["pandas"] } +"snowflake-snowpark-python" = { version = "1.6.1", extras = ["pandas"] } snowflake-ml-python = "1.0.5" pyyaml = "^6.0.1" toml = "^0.10.2" diff --git a/snowdev/fillers/actions.yml b/snowdev/fillers/actions.yml index 56887b1..d014054 100644 --- a/snowdev/fillers/actions.yml +++ b/snowdev/fillers/actions.yml @@ -10,6 +10,16 @@ on: jobs: deploy: runs-on: ubuntu-latest + environment: ${{ github.ref_name }} + + env: + ACCOUNT: ${{ vars.SNOWFLAKE_ACCOUNT }} + USER_NAME: ${{ vars.SNOWFLAKE_USER }} + PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} + ROLE: ${{ vars.SNOWFLAKE_ROLE }} + DATABASE: ${{ vars.SNOWFLAKE_DATABASE }} + SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} + WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} steps: - name: Checkout code @@ -18,41 +28,67 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.10 + python-version: "3.10" + + - name: Cache dependencies + uses: actions/cache@v3 + with: + path: | + ~/.cache/pypoetry + key: ${{ runner.os }}-poetry-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-poetry- + + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + + - name: Install dependencies + run: | + poetry install - # Install snowdev using pip - - name: Install snowdev + - name: Build run: | - python -m pip install --upgrade pip - pip install snowdev + poetry build + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v37 - name: Deploy to Snowflake run: | - cd src - for dir in */; do - component_type=${dir%/} - case $component_type in - task) - snowdev deploy --task $dir || continue - ;; - streamlit) - snowdev deploy --streamlit $dir || continue - ;; - udf) - snowdev deploy --udf $dir || continue - ;; - sproc) - snowdev deploy --sproc $dir || continue - ;; - esac + IFS=$'\n' + for file in ${{ steps.changed-files.outputs.all_modified_files }}; do + # Skip if path is not under src + if [[ $file != src/* ]]; then + continue + fi + # Extract the path relative to src + rel_path="${file#src/}" + component_type=$(echo $rel_path | cut -d'/' -f1) + component_name=$(echo $rel_path | cut -d'/' -f2) + component_path="src/$component_type/$component_name" + + # Check if the component directory exists + if [ ! -d "$component_path" ]; then + echo "Directory $component_path does not exist. Skipping..." + continue + fi + + echo "Component Type: $component_type" + echo "Component Name: $component_name" + case $component_type in + task) + poetry run snowdev deploy --task $component_name || echo "Failed to deploy task $component_name" + ;; + streamlit) + poetry run snowdev deploy --streamlit $component_name || echo "Failed to deploy streamlit $component_name" + ;; + udf) + poetry run snowdev deploy --udf $component_name || echo "Failed to deploy udf $component_name" + ;; + sproc) + poetry run snowdev deploy --sproc $component_name || echo "Failed to deploy sproc $component_name" + ;; + esac done - env: - ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} - USER_NAME: ${{ vars.SNOWFLAKE_USER }} - PASSWORD: ${{ secrets.SNOWFLAKE_PWD }} - ROLE: ${{ vars.SNOWFLAKE_ROLE }} - DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} - SCHEMA: ${{ vars.SNOWFLAKE_SCHEMA }} - WAREHOUSE: ${{ vars.SNOWFLAKE_WAREHOUSE }} - - continue-on-error: true diff --git a/snowdev/fillers/sproc/fill.toml b/snowdev/fillers/sproc/fill.toml index 74052e7..90f32f8 100644 --- a/snowdev/fillers/sproc/fill.toml +++ b/snowdev/fillers/sproc/fill.toml @@ -5,4 +5,4 @@ role = "" [tool.poetry.dependencies] python = "3.10.0" -snowflake-snowpark-python = "1.5.1" \ No newline at end of file +snowflake-snowpark-python = "1.6.1" \ No newline at end of file diff --git a/snowdev/fillers/udf/fill.toml b/snowdev/fillers/udf/fill.toml index 50130c3..4cef639 100644 --- a/snowdev/fillers/udf/fill.toml +++ b/snowdev/fillers/udf/fill.toml @@ -5,5 +5,5 @@ role = "" [tool.poetry.dependencies] python = "3.10.0" -snowflake-snowpark-python = "1.5.1" +snowflake-snowpark-python = "1.6.1" pandas = "2.0.3" \ No newline at end of file diff --git a/src/sproc/test_new_/app.py b/src/sproc/test_new_/app.py new file mode 100644 index 0000000..9432bfd --- /dev/null +++ b/src/sproc/test_new_/app.py @@ -0,0 +1,13 @@ +from snowflake.snowpark import Session + +def handler(session: Session) -> str: + customer_data = session.sql("SELECT * FROM customer_table LIMIT 1") + return customer_data.to_pandas() + +# Local testing +# snowdev test --sproc sproc_name +if __name__ == "__main__": + from snowdev import SnowflakeConnection + session = SnowflakeConnection().get_session() + + print(handler(session)) \ No newline at end of file diff --git a/src/sproc/test_new_/app.toml b/src/sproc/test_new_/app.toml new file mode 100644 index 0000000..90f32f8 --- /dev/null +++ b/src/sproc/test_new_/app.toml @@ -0,0 +1,8 @@ +[tool.connection] +database = "" +schema = "" +role = "" + +[tool.poetry.dependencies] +python = "3.10.0" +snowflake-snowpark-python = "1.6.1" \ No newline at end of file diff --git a/src/streamlit/snowchat/environment.yml b/src/streamlit/snowchat/environment.yml new file mode 100644 index 0000000..889dfbf --- /dev/null +++ b/src/streamlit/snowchat/environment.yml @@ -0,0 +1,5 @@ +name: snowchat +channels: + - snowflake +dependencies: + - plotly \ No newline at end of file diff --git a/src/streamlit/snowchat/streamlit_app.py b/src/streamlit/snowchat/streamlit_app.py new file mode 100644 index 0000000..1b3178e --- /dev/null +++ b/src/streamlit/snowchat/streamlit_app.py @@ -0,0 +1,27 @@ +from snowflake.snowpark import Session + +import streamlit as st + + +def get_snowflake_session() -> Session: + try: + from snowdev import SnowflakeConnection + + snow_session = SnowflakeConnection().get_session() + except ModuleNotFoundError: + from snowflake.snowpark.context import get_active_session + + snow_session = get_active_session() + return snow_session + + +session = get_snowflake_session() + +st.set_page_config( + layout="wide", + page_title="Snowflake streamlit app", + page_icon="❄️", +) + +st.title("Hi there!") +st.caption("This is a streamlit app running in Snowflake!") diff --git a/src/task/predict_task/app.sql b/src/task/predict_task/app.sql new file mode 100644 index 0000000..a42a5b7 --- /dev/null +++ b/src/task/predict_task/app.sql @@ -0,0 +1,7 @@ +CREATE OR REPLACE TASK predict_task + WAREHOUSE = COMPUTE_WH + SCHEDULE = 'USING CRON 0 1 * * * UTC' + COMMENT = 'This task runs daily at 1am UTC' +AS + call test_script(); -- call stored procedure + \ No newline at end of file diff --git a/src/udf/wow/app.py b/src/udf/wow/app.py new file mode 100644 index 0000000..f8492d4 --- /dev/null +++ b/src/udf/wow/app.py @@ -0,0 +1,19 @@ +import os + +import pandas as pd +from snowflake.snowpark import Session + + +def handler(df: str) -> str: + """ + Handler function for the UDF. + """ + print("Hello World!") + + return df + + +# Local testing +# snowdev test --udf udf_name +if __name__ == "__main__": + print(handler("test")) diff --git a/src/udf/wow/app.toml b/src/udf/wow/app.toml new file mode 100644 index 0000000..90f32f8 --- /dev/null +++ b/src/udf/wow/app.toml @@ -0,0 +1,8 @@ +[tool.connection] +database = "" +schema = "" +role = "" + +[tool.poetry.dependencies] +python = "3.10.0" +snowflake-snowpark-python = "1.6.1" \ No newline at end of file From 79fe84984a07c8c6e9c6660d6f59541437e5d430 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sun, 24 Sep 2023 15:13:48 +1300 Subject: [PATCH 18/19] Apply .gitignore --- src/sproc/test_new_/app.py | 13 ------------ src/sproc/test_new_/app.toml | 8 -------- src/streamlit/snowchat/environment.yml | 5 ----- src/streamlit/snowchat/streamlit_app.py | 27 ------------------------- src/task/predict_task/app.sql | 7 ------- src/udf/wow/app.py | 19 ----------------- src/udf/wow/app.toml | 8 -------- 7 files changed, 87 deletions(-) delete mode 100644 src/sproc/test_new_/app.py delete mode 100644 src/sproc/test_new_/app.toml delete mode 100644 src/streamlit/snowchat/environment.yml delete mode 100644 src/streamlit/snowchat/streamlit_app.py delete mode 100644 src/task/predict_task/app.sql delete mode 100644 src/udf/wow/app.py delete mode 100644 src/udf/wow/app.toml diff --git a/src/sproc/test_new_/app.py b/src/sproc/test_new_/app.py deleted file mode 100644 index 9432bfd..0000000 --- a/src/sproc/test_new_/app.py +++ /dev/null @@ -1,13 +0,0 @@ -from snowflake.snowpark import Session - -def handler(session: Session) -> str: - customer_data = session.sql("SELECT * FROM customer_table LIMIT 1") - return customer_data.to_pandas() - -# Local testing -# snowdev test --sproc sproc_name -if __name__ == "__main__": - from snowdev import SnowflakeConnection - session = SnowflakeConnection().get_session() - - print(handler(session)) \ No newline at end of file diff --git a/src/sproc/test_new_/app.toml b/src/sproc/test_new_/app.toml deleted file mode 100644 index 90f32f8..0000000 --- a/src/sproc/test_new_/app.toml +++ /dev/null @@ -1,8 +0,0 @@ -[tool.connection] -database = "" -schema = "" -role = "" - -[tool.poetry.dependencies] -python = "3.10.0" -snowflake-snowpark-python = "1.6.1" \ No newline at end of file diff --git a/src/streamlit/snowchat/environment.yml b/src/streamlit/snowchat/environment.yml deleted file mode 100644 index 889dfbf..0000000 --- a/src/streamlit/snowchat/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: snowchat -channels: - - snowflake -dependencies: - - plotly \ No newline at end of file diff --git a/src/streamlit/snowchat/streamlit_app.py b/src/streamlit/snowchat/streamlit_app.py deleted file mode 100644 index 1b3178e..0000000 --- a/src/streamlit/snowchat/streamlit_app.py +++ /dev/null @@ -1,27 +0,0 @@ -from snowflake.snowpark import Session - -import streamlit as st - - -def get_snowflake_session() -> Session: - try: - from snowdev import SnowflakeConnection - - snow_session = SnowflakeConnection().get_session() - except ModuleNotFoundError: - from snowflake.snowpark.context import get_active_session - - snow_session = get_active_session() - return snow_session - - -session = get_snowflake_session() - -st.set_page_config( - layout="wide", - page_title="Snowflake streamlit app", - page_icon="❄️", -) - -st.title("Hi there!") -st.caption("This is a streamlit app running in Snowflake!") diff --git a/src/task/predict_task/app.sql b/src/task/predict_task/app.sql deleted file mode 100644 index a42a5b7..0000000 --- a/src/task/predict_task/app.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE OR REPLACE TASK predict_task - WAREHOUSE = COMPUTE_WH - SCHEDULE = 'USING CRON 0 1 * * * UTC' - COMMENT = 'This task runs daily at 1am UTC' -AS - call test_script(); -- call stored procedure - \ No newline at end of file diff --git a/src/udf/wow/app.py b/src/udf/wow/app.py deleted file mode 100644 index f8492d4..0000000 --- a/src/udf/wow/app.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -import pandas as pd -from snowflake.snowpark import Session - - -def handler(df: str) -> str: - """ - Handler function for the UDF. - """ - print("Hello World!") - - return df - - -# Local testing -# snowdev test --udf udf_name -if __name__ == "__main__": - print(handler("test")) diff --git a/src/udf/wow/app.toml b/src/udf/wow/app.toml deleted file mode 100644 index 90f32f8..0000000 --- a/src/udf/wow/app.toml +++ /dev/null @@ -1,8 +0,0 @@ -[tool.connection] -database = "" -schema = "" -role = "" - -[tool.poetry.dependencies] -python = "3.10.0" -snowflake-snowpark-python = "1.6.1" \ No newline at end of file From 07e1828aff492c0ce971a98451eade174c2ffda7 Mon Sep 17 00:00:00 2001 From: kaarthik108 Date: Sun, 24 Sep 2023 15:15:05 +1300 Subject: [PATCH 19/19] update filler --- snowdev/fillers/udf/fill.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/snowdev/fillers/udf/fill.toml b/snowdev/fillers/udf/fill.toml index 4cef639..90f32f8 100644 --- a/snowdev/fillers/udf/fill.toml +++ b/snowdev/fillers/udf/fill.toml @@ -5,5 +5,4 @@ role = "" [tool.poetry.dependencies] python = "3.10.0" -snowflake-snowpark-python = "1.6.1" -pandas = "2.0.3" \ No newline at end of file +snowflake-snowpark-python = "1.6.1" \ No newline at end of file