ecom-store/scripts/saleor-api.py

94 lines
2.7 KiB
Python
Executable File

#!/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, channel: \"m5-digital\") { totalCount edges { node { id name slug } } } }"
% 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()