import uuid import orjson from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse, HttpResponseBadRequest from django.shortcuts import render from django.views import View from rest_framework.parsers import FormParser, JSONParser from rest_framework.views import APIView from serde import ValidationError from alpaca.trading.client import TradingClient from core.forms import HookForm from core.lib.serde import drakdoo_s from core.models import Callback, Hook, Account from core.util import logs log = logs.get_logger(__name__) def get_positions(user, account_id=None): items = [] accounts = Account.objects.filter(user=user) for account in accounts: if account.exchange == "alpaca": cast = {"api-key": account.api_key, "secret-key": account.api_secret, "paper": account.sandbox} trading_client = TradingClient(**cast) positions = trading_client.get_all_positions() print("POSITIONS", positions) # try: # parsed = ccxt_s.CCXTRoot.from_dict(order) # except ValidationError as e: # log.error(f"Error creating trade: {e}") # return False # self.status = parsed.status # self.response = order class Positions(LoginRequiredMixin, View): allowed_types = ["modal", "widget", "window", "page"] window_content = "window-content/positions.html" async def get(self, request, type, account_id=None): if type not in self.allowed_types: return HttpResponseBadRequest template_name = f"wm/{type}.html" unique = str(uuid.uuid4())[:8] items = get_positions(request.user, account_id) if type == "page": type = "modal" context = { "title": f"Hooks ({type})", "unique": unique, "window_content": self.window_content, "items": items, "type": type, } return render(request, template_name, context)