yandex_logger поменял на FinanceLogger

remotes/origin/revert-6d879fe8
wad 8 years ago
parent 713e878a25
commit ad10e269d8
  1. 5
      config_app/management/commands/for_test.py
  2. 12
      finance/loggers.py
  3. 7
      finance/management/commands/yandex_repeat_payment.py
  4. 16
      finance/tasks.py
  5. 105
      finance/views.py

@ -1,17 +1,16 @@
from django.core.management.base import BaseCommand
from finance.loggers import FinanceLogger
class Command(BaseCommand):
help = 'Команда для тестов'
def handle(self, *args, **options):
from finance.loggers import FinanceLogger
logger = FinanceLogger()
try:
10 / 0
except Exception as exc:
logger.exception('logger_yandex test log record', extra={'asdf': 3246523},
logger.exception('FinanceLogger test log record', extra={'asdf': 3246523},
invoice_id=42, exc={'a': 1, 'b': 3, 'привет': 'медвед'}
)

@ -11,8 +11,16 @@ class FinanceLogger:
'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s'
"""
def __init__(self, prefix=None):
self.prefix = prefix
def log(self, level, msg, *args, **kwargs):
_logger.log(level=level, msg=msg, *args, **self._make_kwargs(kwargs))
_logger.log(level=level, msg=self._get_msg(msg), *args, **self._make_kwargs(kwargs))
def _get_msg(self, msg):
if self.prefix:
msg = '{}: {}'.format(self.prefix, msg)
return msg
def _make_kwargs(self, kwargs):
new_kwargs = {}
@ -45,4 +53,4 @@ class FinanceLogger:
def exception(self, msg, *args, **kwargs):
kwargs['stack_info'] = True
_logger.exception(msg, *args, **self._make_kwargs(kwargs))
_logger.exception(self._get_msg(msg), *args, **self._make_kwargs(kwargs))

@ -1,15 +1,14 @@
import logging
from django.core.management.base import BaseCommand
from finance.loggers import FinanceLogger
from finance.tasks import periodic_billing
logger_yandex = logging.getLogger('yandex_money')
finance_logger = FinanceLogger() # prefix='YandexMoney'
class Command(BaseCommand):
def handle(self, *args, **options):
logger_yandex.info("start console repeat payment command")
finance_logger.info("start console repeat payment command")
print('Started')
periodic_billing()

@ -7,15 +7,15 @@ from django.db import transaction
from django.utils import timezone
from yandex_money.models import Payment
from finance.loggers import FinanceLogger
from finance.models import InvoiceRebilling
from lms import celery_app
logger_yandex = logging.getLogger('yandex_money')
finance_logger = FinanceLogger()
@celery_app.task
def periodic_billing():
logger_yandex.info("start periodic billing task")
finance_logger.info("start periodic billing task")
invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F')
for invoice in invoices.filter(expected_date__lt=timezone.now()):
# выбираем все необработанные из прошлого
@ -23,9 +23,7 @@ def periodic_billing():
try:
_yandex_repeat_card_payment(invoice)
except Exception as exc:
logger_yandex.critical('periodic billing Exception', exc_info=True, extra={
'invoice id': invoice.id, 'exc': exc
})
finance_logger.exception('YandexMoney repeatCardPayment Exception', invoice_id=invoice.id)
invoice.comment = 'Ошибка при попытке повторного платежа, свяжитесь с клиентской службой'
invoice.save()
@ -42,6 +40,7 @@ def _yandex_repeat_card_payment(invoice):
)
invoice.yandex_pay = yandex_pay
finance_logger.info('YandexMoney repeatCardPayment start', invoice_id=invoice.id)
resp = requests.post(
url=settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment',
data={
@ -57,6 +56,5 @@ def _yandex_repeat_card_payment(invoice):
verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')
)
# TODO тут проверять нет ли ошибки яндекса (даже при 200 ответе)
logger_yandex.info('periodic billing finish', exc_info=True, extra={
'response': resp.text, 'code': resp.status_code,
})
finance_logger.info('YandexMoney repeatCardPayment ended',
invoice_id=invoice.id, response=resp.text, code=resp.status_code, )

@ -1,32 +1,32 @@
import csv
import logging
import uuid
import requests
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.mail import EmailMessage
from django.core.mail import EmailMultiAlternatives
from django.db import IntegrityError
from django.db.models import Q
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import redirect, render_to_response
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.html import strip_tags
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from yandex_money.models import Payment
from django.conf import settings
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from courses.models import Course
from courses.api import CourseParamsApi
from courses.models import Course
from finance.loggers import FinanceLogger
from finance.models import Bill, Invoice, InvoiceRebilling
from finance.serializers import BillSerializer, InvoiceSerializer
from lms.global_decorators import transaction_decorator
from lms.tools import get_real_name
from django.utils import timezone
import uuid
logger_yandex = logging.getLogger('yandex_money')
finance_logger = FinanceLogger() # prefix='YandexMoney'
def test_pay(request):
@ -337,9 +337,7 @@ class YandexPay(APIView):
msg.send()
except Exception as exc:
logger_yandex.error('YandexPay: Email not sended', exc_info=True, extra={
'exc': exc
})
finance_logger.exception('YandexPay: Email not sended')
return redirect(r.url)
@ -395,41 +393,35 @@ class YandexCheckView(APIView):
val = i.split('=')[1]
data[key] = val
logger_yandex.info('Проверка платежа запрос', exc_info=True, extra={
'request': data,
})
finance_logger.info('Проверка платежа запрос', request=data)
order_number = data['orderNumber']
try:
pay = Payment.objects.get(order_number=data['orderNumber'])
pay = Payment.objects.get(order_number=order_number)
except Payment.DoesNotExist:
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={
'request': "Payment with id=%s not found" % data['orderNumber'],
})
finance_logger.error('Ошибка проверки платежа', exc_info=True,
request="Payment with id=%s not found" % order_number)
return Response(status=204)
if not pay.status == Payment.STATUS.PROCESSED:
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={
'request': "Payment with id=%s have status %s" % (data['orderNumber'], pay.status),
})
finance_logger.error('Ошибка проверки платежа',
order_number=order_number,
request="Payment with id=%s have status %s" % (order_number, pay.status))
return Response(status=204)
if not pay.shop_id == int(data['shopId']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={
'request': "ShopId=%s not match" % (data['shopId'],),
})
finance_logger.error('Ошибка проверки платежа',
request="ShopId=%s not match" % (data['shopId'],))
return Response(status=204)
if not pay.scid == int(data['scid']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={
'request': "scid=%s not match" % (data['scid'],)
})
finance_logger.error('Ошибка проверки платежа',
request="scid=%s not match" % (data['scid'],))
return Response(status=204)
if not pay.order_amount == float(data['orderSumAmount']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={
'request': "Expected amount is %s received amount is %s"
% (pay.order_amount, data['orderSumAmount']),
})
finance_logger.error('Ошибка проверки платежа',
request="Expected amount is %s received amount is %s" % (pay.order_amount, data['orderSumAmount']))
return Response(status=204)
now = timezone.now()
@ -439,9 +431,7 @@ class YandexCheckView(APIView):
xml_res = """<checkOrderResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id))
logger_yandex.info('Проверка платежа ответ', exc_info=True, extra={
'response': xml_res,
})
finance_logger.info('Проверка платежа ответ', response=xml_res)
return HttpResponse(xml_res, content_type='application/xml')
@ -457,17 +447,16 @@ class YandexAvisoView(APIView):
val = i.split('=')[1]
data[key] = val
order_number = data['orderNumber']
try:
pay = Payment.objects.get(order_number=data['orderNumber'])
pay = Payment.objects.get(order_number=order_number)
except Payment.DoesNotExist:
logger_yandex.error('Ошибка подтверждения платежа', exc_info=True, extra={
'request': "Payment with invoice_id=%s not found" % data['orderNumber'],
})
finance_logger.error('Ошибка подтверждения платежа', exc_info=True,
request="Payment with invoice_id=%s not found" % order_number)
return Response(status=204)
logger_yandex.info('Подтверждение платежа запрос', exc_info=True, extra={
'request': 'Get success pay with invoice_id(yandex) %s' % str(data['invoiceId']),
})
finance_logger.info('Подтверждение платежа запрос',
request='Get success pay with invoice_id(yandex) %s' % str(data['invoiceId']))
pay.shop_amount = data['shopSumAmount']
# invoice = pay.invoice
@ -481,9 +470,7 @@ class YandexAvisoView(APIView):
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id))
logger_yandex.info('Подтверждение платежа ответ', exc_info=True, extra={
'response': xml_res,
})
finance_logger.info('Подтверждение платежа ответ', response=xml_res)
context = {
'user_email': pay.invoice.bill.user.email,
@ -518,7 +505,7 @@ class YandexFailView(APIView):
val = i.split('=')[1]
data[key] = val
logger_yandex.error(data)
finance_logger.error('YandexFailView', data=data)
return redirect(to=settings.DOMAIN)
@ -536,12 +523,10 @@ class DemoYandexCheckView(APIView):
val = i.split('=')[1]
data[key] = val
logger_yandex.info('Проверка демо платежа запрос', exc_info=True, extra={
'request': data,
})
finance_logger.info('Проверка демо платежа запрос', request=data)
except IndexError:
logger_yandex.error("Непредвиденная ошибка проверки тестогого платежа")
finance_logger.exception("Непредвиденная ошибка проверки тестогого платежа")
return Response(status=204)
now = timezone.now()
@ -552,14 +537,10 @@ class DemoYandexCheckView(APIView):
else:
xml_res = """<checkOrderResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s"
message="Неверный номер ордера"/>""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.warning(
"Ошибка проверки тестогого платежа" , exc_info=True, extra={
"response": xml_res
}
)
finance_logger.warning("Ошибка проверки тестового платежа", response=xml_res)
return HttpResponse(xml_res, content_type='application/xml')
except KeyError:
logger_yandex.error('Ошибка в данных checkYandex')
finance_logger.exception('Ошибка в данных checkYandex')
return Response(status=204)
@ -567,7 +548,7 @@ class DemoYandexAvisoView(APIView):
@staticmethod
def post(request):
logger_yandex.info('Начало тестирования avisoYandex')
finance_logger.info('Начало тестирования avisoYandex')
data = dict()
for i in request.body.decode('utf-8').split('&'):
key = i.split('=')[0]
@ -578,17 +559,11 @@ class DemoYandexAvisoView(APIView):
if float(data['orderSumAmount']) < 1001:
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.info('Подтверждение демо платежа ответ', exc_info=True, extra={
'response': xml_res,
})
finance_logger.info('Подтверждение демо платежа ответ', response=xml_res)
else:
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s"
message="Нам не позволяет совесть принять от вас более 1000 рублей"/
>""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.warning(
"Ошибка подтверждения тестогого платежа", exc_info=True, extra={
"response": xml_res
}
)
finance_logger.warning("Ошибка подтверждения тестогого платежа", response=xml_res)
return HttpResponse(xml_res, content_type='application/xml')
Loading…
Cancel
Save