diff --git a/sagezza.py b/sagezza.py index 277e864..bd77d2c 100644 --- a/sagezza.py +++ b/sagezza.py @@ -16,7 +16,6 @@ from pathlib import Path import requests import pdfplumber -from minio import Minio BASE_URL = "https://sistema.sgztrade.com.br" @@ -75,12 +74,8 @@ SQLSERVER_CONN = os.getenv( ), ) -MINIO_ENDPOINT = os.getenv("MINIO_ENDPOINT", "10.77.77.29:31200") -MINIO_ACCESS_KEY = os.getenv("MINIO_ACCESS_KEY", "admin") -MINIO_SECRET_KEY = os.getenv("MINIO_SECRET_KEY", "admin123") -MINIO_BUCKET = os.getenv("MINIO_BUCKET", "boletosvitrine") -MINIO_PREFIX = os.getenv("MINIO_PREFIX", "Boletos") -MINIO_SECURE = os.getenv("MINIO_SECURE", "false").strip().lower() in ("1", "true", "yes") +AZURE_UPLOAD_URL = "https://api.grupoginseng.com.br/portal/boletosvitrine/boleto/arquivos" +AZURE_PREFIX = os.getenv("AZURE_PREFIX", "Boletos") MAX_PARALLEL_REQUESTS = 5 MAX_PARALLEL_PDFS_PER_USER = 1 DOWNLOAD_RETRY_ATTEMPTS = 4 @@ -371,31 +366,14 @@ def _guess_cte_nfe_keys_from_xml_names(xml_names: List[str]) -> Dict[str, Option return {"chave_cte": cte_key, "chave_nfe": nfe_key} -def criar_minio_client(): - client = Minio( - MINIO_ENDPOINT, - access_key=MINIO_ACCESS_KEY, - secret_key=MINIO_SECRET_KEY, - secure=MINIO_SECURE, +def upload_azure(prefix: str, filename: str, data: bytes, content_type: str) -> str: + response = requests.post( + AZURE_UPLOAD_URL, + files={"file": (filename, io.BytesIO(data), content_type)}, + data={"prefix": prefix}, ) - if not client.bucket_exists(MINIO_BUCKET): - client.make_bucket(MINIO_BUCKET) - return client, MINIO_BUCKET, MINIO_PREFIX - - -def upload_bytes_minio(client: Minio, bucket: str, prefix: str, object_name: str, data: bytes, content_type: str) -> str: - object_name = object_name.lstrip("/") - if prefix: - object_name = f"{prefix.rstrip('/')}/{object_name}" - - client.put_object( - bucket, - object_name, - io.BytesIO(data), - length=len(data), - content_type=content_type, - ) - return object_name + response.raise_for_status() + return f"{prefix.rstrip('/')}/{filename}" def _safe_file_part(name: str) -> str: @@ -529,11 +507,10 @@ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) -def process_boletos_to_minio_sql(boletos: List[Dict[str, Optional[str]]]) -> int: +def process_boletos_to_azure_sql(boletos: List[Dict[str, Optional[str]]]) -> int: if not boletos: return 0 - client, bucket, prefix = criar_minio_client() prepared_rows: List[Dict[str, Optional[str]]] = [] uploads = 0 for b in boletos: @@ -549,26 +526,19 @@ def process_boletos_to_minio_sql(boletos: List[Dict[str, Optional[str]]]) -> int base_name = arquivo.name if arquivo else Path(arquivo_str or "boleto.pdf").name nf = _extract_nf_from_name(base_name) if nf and b.get("chave_cte"): - obj = f"boleto/cte_{b.get('chave_cte')}_nf_{nf}_{_safe_file_part(base_name)}" + filename = f"cte_{b.get('chave_cte')}_nf_{nf}_{_safe_file_part(base_name)}" elif nf and b.get("chave_nfe"): - obj = f"boleto/nfe_{b.get('chave_nfe')}_nf_{nf}_{_safe_file_part(base_name)}" + filename = f"nfe_{b.get('chave_nfe')}_nf_{nf}_{_safe_file_part(base_name)}" elif b.get("chave_nfe"): - obj = f"boleto/nfe_{b.get('chave_nfe')}_{_safe_file_part(base_name)}" + filename = f"nfe_{b.get('chave_nfe')}_{_safe_file_part(base_name)}" elif nf: - obj = f"boleto/nf_{nf}_{_safe_file_part(base_name)}" + filename = f"nf_{nf}_{_safe_file_part(base_name)}" else: - obj = f"boleto/{_safe_file_part(base_name)}" - object_key = upload_bytes_minio( - client, - bucket, - prefix, - obj, - pdf_bytes, - "application/pdf", - ) + filename = _safe_file_part(base_name) + object_key = upload_azure(AZURE_PREFIX, filename, pdf_bytes, "application/pdf") uploads += 1 - b["minio_bucket"] = bucket + b["minio_bucket"] = "boletosvitrine" b["minio_object_key"] = object_key row = dict(b) row.pop("_pdf_bytes", None) @@ -1111,7 +1081,7 @@ if __name__ == "__main__": except Exception as exc: print(f"{email_ativo}: falha ao processar PDF remoto '{rp}': {exc}") - gravados = process_boletos_to_minio_sql(boletos) if boletos else 0 + gravados = process_boletos_to_azure_sql(boletos) if boletos else 0 return (email_ativo, len(boletos), gravados, None) except Exception as exc: return (email_ativo, 0, 0, str(exc))