def run(self): while True: url = "%s?%s" % ("https://api.coinmarketcap.com/v1/ticker/", urlencode({'limit': 0})) req = request.Request(url) with request.urlopen(req) as response: if self._stopevent.is_set(): return def colorize_float(value: str): if value is None: return value elif float(value) < 0: return "<font color=\"DarkRed\">%s</font>" % value elif float(value) > 0: return "<font color=\"DarkGreen\">%s</font>" % value else: return value # Get coin data data = json.loads(response.read().decode('utf-8')) newCoins = [] for coindata in data: cap = coindata['market_cap_usd'] cap = lformat("%d", float(cap), True) if cap else "?" vol = coindata['24h_volume_usd'] vol = lformat("%d", float(vol), True) if vol else "?" price = coindata['price_usd'] price_precision = "%.2f" if float(price) > 1 else "%.6f" price = lformat(price_precision, float(price), True) if price else "?" if "," in price: price = price.rstrip("0").rstrip(",") newCoins.append( Coin(identifier=coindata['id'], name=coindata['name'], symbol=coindata['symbol'], rank=coindata['rank'], price=price, cap=cap, vol=vol, change_hour=colorize_float( coindata['percent_change_1h']), change_day=colorize_float( coindata['percent_change_24h']), change_week=colorize_float( coindata['percent_change_7d']))) global coins coins = newCoins self._stopevent.wait(900) # Sleep 15 min, wakeup on stop event if self._stopevent.is_set(): return
def get(self, request, *args, **kwargs): query = request.GET.get('query', '') if len(query) < 2: return JsonResponse({'results': []}) qs = self.request.event.orders.filter(Q(code__icontains=query) | Q(code__icontains=Order.normalize_code(query))) return JsonResponse({ 'results': [ { 'code': o.code, 'status': o.get_status_display(), 'total': lformat("%.2f", o.total) + ' ' + self.request.event.currency } for o in qs ] })
def get(self, request, *args, **kwargs): query = request.GET.get('query', '') if len(query) < 2: return JsonResponse({'results': []}) qs = self.request.event.orders.filter( Q(code__icontains=query) | Q(code__icontains=Order.normalize_code(query))) return JsonResponse({ 'results': [{ 'code': o.code, 'status': o.get_status_display(), 'total': lformat("%.2f", o.total) + ' ' + self.request.event.currency } for o in qs] })
def _invoice_generate_german(invoice, f): _invoice_register_fonts() styles = _invoice_get_stylesheet() pagesize = pagesizes.A4 def on_page(canvas, doc): canvas.saveState() canvas.setFont('OpenSans', 8) canvas.drawRightString(pagesize[0] - 20 * mm, 10 * mm, _("Page %d") % (doc.page,)) for i, line in enumerate(invoice.footer_text.split('\n')[::-1]): canvas.drawCentredString(pagesize[0] / 2, 25 + (3.5 * i) * mm, line.strip()) canvas.restoreState() def on_first_page(canvas, doc): canvas.setCreator('pretix.eu') canvas.setTitle(pgettext('invoice', 'Invoice {num}').format(num=invoice.number)) canvas.saveState() canvas.setFont('OpenSans', 8) canvas.drawRightString(pagesize[0] - 20 * mm, 10 * mm, _("Page %d") % (doc.page,)) for i, line in enumerate(invoice.footer_text.split('\n')[::-1]): canvas.drawCentredString(pagesize[0] / 2, 25 + (3.5 * i) * mm, line.strip()) textobject = canvas.beginText(25 * mm, (297 - 15) * mm) textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Invoice from').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLines(invoice.invoice_from.strip()) canvas.drawText(textobject) textobject = canvas.beginText(25 * mm, (297 - 50) * mm) textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Invoice to').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLines(invoice.invoice_to.strip()) canvas.drawText(textobject) textobject = canvas.beginText(125 * mm, (297 - 50) * mm) textobject.setFont('OpenSansBd', 8) if invoice.is_cancellation: textobject.textLine(pgettext('invoice', 'Cancellation number').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(invoice.number) textobject.moveCursor(0, 5) textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Original invoice').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(invoice.refers.number) else: textobject.textLine(pgettext('invoice', 'Invoice number').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(invoice.number) textobject.moveCursor(0, 5) if invoice.is_cancellation: textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Cancellation date').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(date_format(invoice.date, "DATE_FORMAT")) textobject.moveCursor(0, 5) textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Original invoice date').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(date_format(invoice.refers.date, "DATE_FORMAT")) textobject.moveCursor(0, 5) else: textobject.setFont('OpenSansBd', 8) textobject.textLine(pgettext('invoice', 'Invoice date').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(date_format(invoice.date, "DATE_FORMAT")) textobject.moveCursor(0, 5) canvas.drawText(textobject) textobject = canvas.beginText(165 * mm, (297 - 50) * mm) textobject.setFont('OpenSansBd', 8) textobject.textLine(_('Order code').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(invoice.order.full_code) textobject.moveCursor(0, 5) textobject.setFont('OpenSansBd', 8) textobject.textLine(_('Order date').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(date_format(invoice.order.datetime, "DATE_FORMAT")) canvas.drawText(textobject) textobject = canvas.beginText(125 * mm, (297 - 15) * mm) textobject.setFont('OpenSansBd', 8) textobject.textLine(_('Event').upper()) textobject.moveCursor(0, 5) textobject.setFont('OpenSans', 10) textobject.textLine(str(invoice.event.name)) if invoice.event.settings.show_date_to: textobject.textLines( _('{from_date}\nuntil {to_date}').format(from_date=invoice.event.get_date_from_display(), to_date=invoice.event.get_date_to_display())) else: textobject.textLine(invoice.event.get_date_from_display()) canvas.drawText(textobject) canvas.restoreState() doc = BaseDocTemplate(f.name, pagesize=pagesizes.A4, leftMargin=25 * mm, rightMargin=20 * mm, topMargin=20 * mm, bottomMargin=15 * mm) footer_length = 3.5 * len(invoice.footer_text.split('\n')) * mm frames_p1 = [ Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - 75 * mm, leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=footer_length, id='normal') ] frames = [ Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=footer_length, id='normal') ] doc.addPageTemplates([ PageTemplate(id='FirstPage', frames=frames_p1, onPage=on_first_page, pagesize=pagesize), PageTemplate(id='OtherPages', frames=frames, onPage=on_page, pagesize=pagesize) ]) story = [ NextPageTemplate('FirstPage'), Paragraph(pgettext('invoice', 'Invoice') if not invoice.is_cancellation else pgettext('invoice', 'Cancellation'), styles['Heading1']), Spacer(1, 5 * mm), NextPageTemplate('OtherPages'), ] if invoice.introductory_text: story.append(Paragraph(invoice.introductory_text, styles['Normal'])) story.append(Spacer(1, 10 * mm)) taxvalue_map = defaultdict(Decimal) grossvalue_map = defaultdict(Decimal) tstyledata = [ ('ALIGN', (1, 0), (-1, -1), 'RIGHT'), ('FONTNAME', (0, 0), (-1, 0), 'OpenSansBd'), ('FONTNAME', (0, -1), (-1, -1), 'OpenSansBd'), ('LEFTPADDING', (0, 0), (0, -1), 0), ('RIGHTPADDING', (-1, 0), (-1, -1), 0), ] tdata = [( pgettext('invoice', 'Description'), pgettext('invoice', 'Tax rate'), pgettext('invoice', 'Net'), pgettext('invoice', 'Gross'), )] total = Decimal('0.00') for line in invoice.lines.all(): tdata.append(( line.description, lformat("%.2f", line.tax_rate) + " %", lformat("%.2f", line.net_value) + " " + invoice.event.currency, lformat("%.2f", line.gross_value) + " " + invoice.event.currency, )) taxvalue_map[line.tax_rate] += line.tax_value grossvalue_map[line.tax_rate] += line.gross_value total += line.gross_value tdata.append([pgettext('invoice', 'Invoice total'), '', '', lformat("%.2f", total) + " " + invoice.event.currency]) colwidths = [a * doc.width for a in (.55, .15, .15, .15)] table = Table(tdata, colWidths=colwidths, repeatRows=1) table.setStyle(TableStyle(tstyledata)) story.append(table) story.append(Spacer(1, 15 * mm)) if invoice.payment_provider_text: story.append(Paragraph(invoice.payment_provider_text, styles['Normal'])) if invoice.additional_text: story.append(Paragraph(invoice.additional_text, styles['Normal'])) story.append(Spacer(1, 15 * mm)) tstyledata = [ ('SPAN', (1, 0), (-1, 0)), ('ALIGN', (2, 1), (-1, -1), 'RIGHT'), ('LEFTPADDING', (0, 0), (0, -1), 0), ('RIGHTPADDING', (-1, 0), (-1, -1), 0), ('FONTSIZE', (0, 0), (-1, -1), 8), ] tdata = [('', pgettext('invoice', 'Included taxes'), '', '', ''), ('', pgettext('invoice', 'Tax rate'), pgettext('invoice', 'Net value'), pgettext('invoice', 'Gross value'), pgettext('invoice', 'Tax'))] for rate, gross in grossvalue_map.items(): if line.tax_rate == 0: continue tax = taxvalue_map[rate] tdata.append(( '', lformat("%.2f", rate) + " %", lformat("%.2f", (gross - tax)) + " " + invoice.event.currency, lformat("%.2f", gross) + " " + invoice.event.currency, lformat("%.2f", tax) + " " + invoice.event.currency, )) if len(tdata) > 2: colwidths = [a * doc.width for a in (.45, .10, .15, .15, .15)] table = Table(tdata, colWidths=colwidths, repeatRows=2) table.setStyle(TableStyle(tstyledata)) story.append(table) doc.build(story) return doc
def run(self): while True: url = "%s?%s" % ("https://api.coinmarketcap.com/v1/ticker/", urlencode({'limit': 0})) req = request.Request(url) with request.urlopen(req) as response: if self._stopevent.is_set(): return def colorize_float(value: str): if value is None: return value elif float(value) < 0: return "<font color=\"DarkRed\">%s</font>" % value elif float(value) > 0: return "<font color=\"DarkGreen\">%s</font>" % value else: return value # Get coin data data = json.load(response) newCoins = [] for coindata in data: cap = coindata['market_cap_usd'] cap = lformat("%d", float(cap), True) if cap else "?" vol = coindata['24h_volume_usd'] vol = lformat("%d", float(vol), True) if vol else "?" newCoins.append( Coin(identifier=coindata['id'], name=coindata['name'], symbol=coindata['symbol'], rank=coindata['rank'], price=coindata['price_usd'], cap=cap, vol=vol, change_hour=colorize_float( coindata['percent_change_1h']), change_day=colorize_float( coindata['percent_change_24h']), change_week=colorize_float( coindata['percent_change_7d']))) global coins coins = newCoins # Create cache path if not exists if not os.path.isdir(cachePath): os.mkdir(cachePath) # Download all the coin pictures for coin in coins: filename = "%s.png" % coin.identifier url = "https://files.coinmarketcap.com/static/img/coins/128x128/%s" % filename filePath = os.path.join(cachePath, filename) executor = ThreadPoolExecutor(max_workers=40) if not os.path.isfile(filePath): executor.submit(urlretrieve, url, filePath) executor.shutdown() self._stopevent.wait(900) # Sleep 15 min, wakeup on stop event if self._stopevent.is_set(): return