Compare commits
39
Commits
docker
..
5440da0bdf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5440da0bdf | ||
|
|
40d9999a80 | ||
|
|
5887771a38 | ||
|
|
55e04f0a7c | ||
|
|
1df6c42b41 | ||
|
|
1ba6f903d9 | ||
|
|
8faf56f9ad | ||
|
|
d1059905c6 | ||
|
|
6e488ca352 | ||
|
|
dd356b0d13 | ||
|
|
1a77623e4d | ||
|
|
8d7564185f | ||
|
|
e1da46d61b | ||
|
|
86d6e5a61d | ||
|
|
5d580d68f6 | ||
|
|
2308d183e9 | ||
|
|
67891e5222 | ||
|
|
04cfd42b4b | ||
|
|
d612003f32 | ||
|
|
8ded841d44 | ||
|
|
76fa9a8db1 | ||
|
|
005bf87df5 | ||
|
|
aa8883c822 | ||
|
|
53994f99dc | ||
|
|
0f8b9b444b | ||
|
|
90ca36f426 | ||
|
|
5691cebc11 | ||
|
|
f1c9655748 | ||
|
|
4fe20615d3 | ||
|
|
d32c17a5da | ||
|
|
729746b0bd | ||
|
|
152bfb316b | ||
|
|
369ccdbfc0 | ||
|
|
a419dd498f | ||
|
|
b4b0ccdac6 | ||
|
|
32664c3a10 | ||
|
|
41ce94c85c | ||
|
|
397eddf299 | ||
|
|
8affb90308 |
No files matched your search
@@ -34,4 +34,3 @@ studspider.db-journal
|
|||||||
assets/external/
|
assets/external/
|
||||||
__pycache__/
|
__pycache__/
|
||||||
win/
|
win/
|
||||||
.github/
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
FROM python:3.13-alpine
|
|
||||||
|
|
||||||
# Install uv
|
|
||||||
RUN pip install uv
|
|
||||||
|
|
||||||
# Set working directory
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy project files
|
|
||||||
COPY pyproject.toml ./
|
|
||||||
COPY README.md ./
|
|
||||||
|
|
||||||
# Install dependencies using uv without venv
|
|
||||||
RUN uv pip compile pyproject.toml -o requirements.txt && \
|
|
||||||
uv pip install --system -r requirements.txt
|
|
||||||
|
|
||||||
# Copy the rest of the application
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Default command
|
|
||||||
CMD ["python", "tests/test.py"]
|
|
||||||
+1
-1
@@ -48,7 +48,7 @@ def get_set(set_number: int) -> dict:
|
|||||||
}
|
}
|
||||||
# add PW 10% b4 tax
|
# add PW 10% b4 tax
|
||||||
our_set.update(
|
our_set.update(
|
||||||
{"set_adjustredprice": our_set["set_retailprice"] + ((10 / 100) * our_set["set_retailprice"])}
|
{"set_adjustredprice": our_set + ((10 / 100) * our_set["set_retailprice"])}
|
||||||
)
|
)
|
||||||
our_set["pw_name"] = (
|
our_set["pw_name"] = (
|
||||||
f"{our_set['set_num']} - {our_set["set_theme"].upper()} {our_set['set_name']}"
|
f"{our_set['set_num']} - {our_set["set_theme"].upper()} {our_set['set_name']}"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from . import get_sq_env
|
import get_sq_env
|
||||||
|
|
||||||
SQUARE_TOKEN = get_sq_env.SQUARE_TOKEN
|
SQUARE_TOKEN = get_sq_env.SQUARE_TOKEN
|
||||||
LEGO_CAT_ID = get_sq_env.LEGO_CAT_ID
|
LEGO_CAT_ID = get_sq_env.LEGO_CAT_ID
|
||||||
|
|||||||
+2
-97
@@ -1,4 +1,3 @@
|
|||||||
import argparse
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
@@ -8,7 +7,6 @@ import uuid
|
|||||||
|
|
||||||
import dotenv
|
import dotenv
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
@@ -84,47 +82,6 @@ def valid_uuid(val):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
async def hook_handler(request: web.Request) -> web.Response:
|
|
||||||
"""Handle incoming JSON webhook POSTs on /hook endpoint"""
|
|
||||||
try:
|
|
||||||
# Verify request method
|
|
||||||
if request.method != "POST":
|
|
||||||
logger.error(
|
|
||||||
f"{time}\tInvalid request method to /hook from %s", request.remote
|
|
||||||
)
|
|
||||||
return web.Response(status=405, text="Method not allowed. Use POST.")
|
|
||||||
|
|
||||||
# Get JSON data from request
|
|
||||||
try:
|
|
||||||
data = await request.json()
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
logger.error("Invalid JSON to /hook from %s", request.remote)
|
|
||||||
return web.Response(status=400, text="Invalid JSON in request body")
|
|
||||||
|
|
||||||
# Log the received webhook
|
|
||||||
print(f"[@DEBUG] Webhook received at {time} from {request.remote}")
|
|
||||||
logger.info(
|
|
||||||
f"{time}\tWebhook received from {request.remote}: {json.dumps(data)}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Process the webhook data here
|
|
||||||
# TODO: Add your webhook processing logic
|
|
||||||
|
|
||||||
response_data = {
|
|
||||||
"status": "success",
|
|
||||||
"message": "Webhook received",
|
|
||||||
"timestamp": time,
|
|
||||||
"data_received": data,
|
|
||||||
}
|
|
||||||
|
|
||||||
return web.json_response(response_data)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Webhook handler error: {str(e)}")
|
|
||||||
print(f"Webhook handler error: {str(e)}")
|
|
||||||
return web.Response(status=500, text="Internal server error")
|
|
||||||
|
|
||||||
|
|
||||||
async def request_handler(request: web.Request) -> web.Response:
|
async def request_handler(request: web.Request) -> web.Response:
|
||||||
"""Handle incoming POST requests with command processing"""
|
"""Handle incoming POST requests with command processing"""
|
||||||
try:
|
try:
|
||||||
@@ -185,61 +142,9 @@ async def request_handler(request: web.Request) -> web.Response:
|
|||||||
print("Starting web server...")
|
print("Starting web server...")
|
||||||
os.system("cls" if os.name == "nt" else "clear")
|
os.system("cls" if os.name == "nt" else "clear")
|
||||||
app = web.Application()
|
app = web.Application()
|
||||||
app.router.add_post("/api", request_handler)
|
app.router.add_post("/", request_handler)
|
||||||
app.router.add_post("/hook", hook_handler)
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="studspider")
|
|
||||||
parser.add_argument(
|
|
||||||
"--host",
|
|
||||||
type=str,
|
|
||||||
default="localhost",
|
|
||||||
help="IP address to listen on. default: localhost",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--port", type=int, default=7432, help="Port to listen on. default: 7432"
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--hook-port",
|
|
||||||
type=int,
|
|
||||||
default=8080,
|
|
||||||
help="Optional separate port for webhook endpoint. default: 8080",
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print(banner.generate("studspider v0.1"))
|
print(banner.generate("studspider v0.1"))
|
||||||
print("Built for PLAY-WELL TEKNOLOGIES by contact@traps.moe\n\n")
|
print("Built for PLAY-WELL TEKNOLOGIES by contact@traps.moe\n\n")
|
||||||
|
web.run_app(app, host="localhost", port=7432)
|
||||||
# If hook-port is specified, run a separate server for webhooks
|
|
||||||
if args.hook_port:
|
|
||||||
print(f"Starting main server on {args.host}:{args.port}")
|
|
||||||
print(f"Starting webhook server on {args.host}:{args.hook_port}")
|
|
||||||
|
|
||||||
# Create separate app for webhook
|
|
||||||
hook_app = web.Application()
|
|
||||||
hook_app.router.add_post("/hook", hook_handler)
|
|
||||||
|
|
||||||
# Run both servers concurrently
|
|
||||||
async def run_servers():
|
|
||||||
runner1 = web.AppRunner(app)
|
|
||||||
await runner1.setup()
|
|
||||||
site1 = web.TCPSite(runner1, args.host, args.port)
|
|
||||||
|
|
||||||
runner2 = web.AppRunner(hook_app)
|
|
||||||
await runner2.setup()
|
|
||||||
site2 = web.TCPSite(runner2, args.host, args.hook_port)
|
|
||||||
|
|
||||||
await site1.start()
|
|
||||||
await site2.start()
|
|
||||||
|
|
||||||
print(f"Main server running on http://{args.host}:{args.port}")
|
|
||||||
print(f"Webhook server running on http://{args.host}:{args.hook_port}/hook")
|
|
||||||
|
|
||||||
# Keep running
|
|
||||||
await asyncio.Event().wait()
|
|
||||||
|
|
||||||
asyncio.run(run_servers())
|
|
||||||
else:
|
|
||||||
print(f"Server running on {args.host}:{args.port}")
|
|
||||||
print(f"Webhook endpoint: http://{args.host}:{args.port}/hook")
|
|
||||||
web.run_app(app, host=args.host, port=args.port)
|
|
||||||
+1
-26
@@ -1,31 +1,6 @@
|
|||||||
import sys
|
|
||||||
from pathlib import Path
|
|
||||||
from pprint import pprint
|
|
||||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
||||||
|
|
||||||
import socket
|
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
|
|
||||||
import src.libsquare as sq
|
import src.libsquare as sq
|
||||||
import src.bricksetapi as lego
|
import src.bricksetapi as lego
|
||||||
|
|
||||||
print("=" * 80)
|
|
||||||
result = sock.connect_ex(('127.0.0.1', 7432))
|
|
||||||
if result == 0:
|
|
||||||
print("PORT 7432 IS IN USE")
|
|
||||||
else:
|
|
||||||
print("PORT 7432 IS AVAILABLE")
|
|
||||||
sock.close()
|
|
||||||
|
|
||||||
print("=" * 80)
|
|
||||||
print("SQUARE OBJECT FOR SET 71417:")
|
|
||||||
print("=" * 80)
|
|
||||||
oursq = sq.get_itm("71417")
|
oursq = sq.get_itm("71417")
|
||||||
pprint(oursq, width=120, depth=None)
|
|
||||||
|
|
||||||
print("\n" + "=" * 80)
|
|
||||||
print("LEGO SET INFORMATION FOR SET 71417:")
|
|
||||||
print("=" * 80)
|
|
||||||
ourlego = lego.get_set(71417)
|
ourlego = lego.get_set(71417)
|
||||||
print("=" * 80)
|
print(f"{oursq}\n\n{ourlego}\n\n")
|
||||||
pprint(ourlego, width=120, depth=None)
|
|
||||||
Reference in new issue
Block a user