Source code for book.utils

"""유틸 함수."""

import base64
import json
import typing

import lz4.frame
import requests
from django.core import exceptions, serializers
from django.core.paginator import Paginator
from django.http import HttpResponse

from .models import Lotto


[docs]def new_lotto(draw_number): """로또 정보.""" is_new = False try: obj = Lotto.objects.get(draw_number=draw_number) result = obj.numbers except exceptions.ObjectDoesNotExist: try: params = { "method": "getLottoNumber", "drwNo": draw_number, } result = requests.get("https://www.nlotto.co.kr/common.do", params=params) result = json.loads(result.text) if not result["returnValue"] == "fail": obj = Lotto(draw_number=draw_number, numbers=result) obj.save() is_new = True except Exception as e: result = str(e) return result, is_new
[docs]def get_page_info(object_list, page, count): """페이지 정보.""" paginator = Paginator(object_list, count) p = paginator.page(page) start_10 = (page - 1) // 10 * 10 + 1 end_10 = min(start_10 + 9, paginator.num_pages) page_list = [i for i in range(start_10, end_10 + 1)] page_info = { "page": page, "prev": page - 1 if p.has_previous() else 0, "next": page + 1 if p.has_next() else 0, "page_list": page_list, } return p, page_info
[docs]def get_compressed_result(image_list, count, page): """데이터 압축해서 제공.""" paginator = Paginator(image_list, count) p = paginator.page(page) image_list = serializers.serialize("json", p) result = {"has_next": p.has_next(), "image_list": json.loads(image_list)} compressed = lz4.frame.compress(json.dumps(result).encode("utf-8")) return HttpResponse(base64.b85encode(compressed))
[docs]def to_table(contents: typing.List, row_count: int) -> typing.List[typing.List]: """ 테이블 형태로 grouping. :param contents: list 형태의 데이터. :param row_count: 한줄에 포함될 element 개수 :return: grouping 된 테이블 """ row = [] table = [] for count, img in enumerate(contents): row.append(img) count += 1 if count % row_count == 0: table.append(row) row = [] if row: table.append(row) return table