Begin implementing positions

This commit is contained in:
2022-10-17 07:20:30 +01:00
parent 5279217324
commit 1bdd49ee6a
17 changed files with 452 additions and 28 deletions

View File

@@ -1,17 +1,14 @@
import uuid
import orjson
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse, HttpResponseBadRequest
from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.views import View
from rest_framework.parsers import FormParser, JSONParser
from rest_framework.parsers import FormParser
from rest_framework.views import APIView
from serde import ValidationError
from core.forms import AccountForm
from core.lib.serde import drakdoo
from core.models import Account, Callback
from core.models import Account
from core.util import logs
log = logs.get_logger(__name__)
@@ -100,7 +97,7 @@ class AccountAction(LoginRequiredMixin, APIView):
form = AccountForm(
request.data, instance=Account.objects.get(id=account_id)
)
except account.DoesNotExist:
except Account.DoesNotExist:
message = "Account does not exist"
message_class = "danger"
context = {

View File

@@ -10,7 +10,7 @@ from rest_framework.views import APIView
from serde import ValidationError
from core.forms import HookForm
from core.lib.serde import drakdoo
from core.lib.serde import drakdoo_s
from core.models import Callback, Hook
from core.util import logs
@@ -36,7 +36,7 @@ class HookAPI(APIView):
# Try validating the JSON
try:
hook_resp = drakdoo.BaseDrakdoo.from_dict(request.data)
hook_resp = drakdoo_s.BaseDrakdoo.from_dict(request.data)
except ValidationError as e:
log.error(f"HookAPI POST: {e}")
return HttpResponseBadRequest(e)

62
core/views/positions.py Normal file
View File

@@ -0,0 +1,62 @@
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 core.forms import HookForm
from core.lib.serde import drakdoo_s
from core.models import Callback, Hook, Account
from core.util import logs
import ccxt
from ccxt.base.errors import NotSupported
log = logs.get_logger(__name__)
def get_positions(user, account_id=None):
items = []
accounts = Account.objects.filter(user=user)
for account in accounts:
if hasattr(ccxt, account.exchange):
instance = getattr(ccxt, account.exchange)({"apiKey": account.api_key, "secret": account.api_secret})
if account.sandbox:
instance.set_sandbox_mode(True)
try:
positions = instance.fetch_positions()
except NotSupported:
positions = [{"account": account.exchange, "error": "Not supported"}]
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)

View File

@@ -1,17 +1,14 @@
import uuid
import orjson
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse, HttpResponseBadRequest
from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.views import View
from rest_framework.parsers import FormParser, JSONParser
from rest_framework.parsers import FormParser
from rest_framework.views import APIView
from serde import ValidationError
from core.forms import TradeForm
from core.lib.serde import drakdoo
from core.models import Account, Callback, Trade
from core.models import Account, Trade
from core.util import logs
log = logs.get_logger(__name__)
@@ -127,7 +124,9 @@ class TradeAction(LoginRequiredMixin, APIView):
form = TradeForm(request.data)
if form.is_valid():
trade = form.save(commit=False)
print("PRESAVE TRADE", trade)
trade.save()
print("SAVED TRADE", trade)
if trade_id:
message = f"Trade {trade_id} edited successfully"
else: