#!/usr/bin/env python3 """ Saleor API Helper — uso programatico do motor M5 Carrega SALEOR_APP_TOKEN de scripts/.env e executa queries/mutations GraphQL """ import os import sys import json import argparse import urllib.request import urllib.error from pathlib import Path # Carregar .env ENV_FILE = Path(__file__).parent / ".env" if ENV_FILE.exists(): for line in ENV_FILE.read_text().splitlines(): line = line.strip() if not line or line.startswith("#"): continue if "=" in line: k, v = line.split("=", 1) v = v.strip().strip('"').strip("'") os.environ.setdefault(k, v) SALEOR_URL = os.environ.get("SALEOR_API_URL", "https://loja.m5digital.net.br/graphql/") SALEOR_TOKEN = os.environ.get("SALEOR_APP_TOKEN", "") def query(gql: str, variables: dict = None) -> dict: payload = json.dumps({"query": gql, "variables": variables or {}}).encode() req = urllib.request.Request( SALEOR_URL, data=payload, headers={ "Content-Type": "application/json", "Authorization": f"Bearer {SALEOR_TOKEN}", }, ) with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode()) def cmd_query(args): result = query(args.query) print(json.dumps(result, indent=2, ensure_ascii=False)) def cmd_me(args): r = query("{ me { email isStaff } }") print(json.dumps(r.get("data", r), indent=2)) def cmd_products(args): r = query( "{ products(first: %d) { totalCount edges { node { id name slug productType { name } } } } }" % args.first ) print(json.dumps(r.get("data", r), indent=2, ensure_ascii=False)) def cmd_count(args): r = query("{ products(first: 1) { totalCount } orders(first: 1) { totalCount } channels { id name slug isActive } }") print(json.dumps(r.get("data", r), indent=2, ensure_ascii=False)) def main(): parser = argparse.ArgumentParser(description="Saleor API Helper") sub = parser.add_subparsers(dest="cmd", required=True) p = sub.add_parser("query", help="executa query GraphQL arbitraria") p.add_argument("query", help='query GraphQL entre aspas') p.set_defaults(func=cmd_query) p = sub.add_parser("me", help="usuario autenticado") p.set_defaults(func=cmd_me) p = sub.add_parser("products", help="lista produtos") p.add_argument("--first", type=int, default=10) p.set_defaults(func=cmd_products) p = sub.add_parser("count", help="contadores") p.set_defaults(func=cmd_count) args = parser.parse_args() if not SALEOR_TOKEN: print("ERRO: SALEOR_APP_TOKEN nao definido em scripts/.env", file=sys.stderr) sys.exit(1) args.func(args) if __name__ == "__main__": main()