
light
20.10.2016
09:00:51
люди

Bulat
20.10.2016
09:00:52
не было печали

light
20.10.2016
09:01:04
есть кто по части Twisted?

Zart
20.10.2016
09:01:19
а конкретные вопросы по твистеду будут?

Google

Igor
20.10.2016
09:01:49

Petro
20.10.2016
09:13:34
Ты уже тратишь свои силы и спрашиваешь, но таким хитрым образом, что не получаешь ответ по теме.

Bulat
20.10.2016
09:14:27
решился вопрос
странно почему перестал работать

??D
20.10.2016
09:19:58
чет поржал с линупса

light
20.10.2016
09:32:13
с чего начать?)

V
20.10.2016
09:45:28
подскажите, только разбираюсь с алхимией. делаю session.query(Timestamp.last).filter(Timestamp.api_call=='events').one_or_none() - возвращает кортеж типа (123,), а мне нужен просто int 123. можно как-то?

Zart
20.10.2016
09:46:25
.scalar() вроде
all/first/one возвращают row
а ты дёргаешь одну строку с одним столбцом, для этого скаляр и предназначен

Марк
20.10.2016
09:59:13
Посоны, а поясните, как работает filter(). Я им не пользуюсь, но понадобилось вьехать- и чет не догоняю

Zart
20.10.2016
09:59:22
в СА?

Google

Zart
20.10.2016
09:59:31
добавляет клаузу WHERE

Марк
20.10.2016
09:59:45
Не. Не в Алхимиии.
Пайтоновский, стандартный

Igor
20.10.2016
10:00:11
функциональщина?

Zart
20.10.2016
10:00:17
filter(func, iterable) == [elem for elem in iterable if func(elem)]
плюс частный случай, что если func is None, то func=bool
т.е. filter(None, iterable) == [elem for elem in iterable if elem]

Марк
20.10.2016
10:01:32
Ага. Понял. Спс

V
20.10.2016
10:03:21

John
20.10.2016
10:17:55
Приснилось что листал бумажную книгу по питону (или по django), и на одной из страниц приводился листинг с указанием авторства Zart, захотелось сфоткать страницу и выложить в чат...но видимо проснулся?

Макс
20.10.2016
10:18:16
А у меня вопрос по Flask. Есть у меня иногда нужда отдавать результат браузеру не HTMLкой, а PDFкой. Я решил написать под это дело декоратор для вьюх. Все вьюхи с этим декоратором сначала рендерятся как обычно, а затем прогоняются через стороннюю утилиту, которая рендерит PDF, и он посылается с миметайпом application/pdf и именем, основанном на request.url. Всё работает, всё круто, но. Ещё у меня иногда есть нужда один из этих PDFов программно взять и отправить по емейлу. Как покрасивее сделать, чтобы можно было эти же функции юзать, но request у них был с подменённым урлом или вроде того?

53r63rn4r
20.10.2016
10:21:26
Хм..

Макс
20.10.2016
10:21:31
Зачем мне имя файла – а потому что фласковский send_file(), кажется, считает, что у file обязательно должен быть file.name

Zart
20.10.2016
10:21:32
если есть функция, конвертирующая чтото в пдф, то вопрос стоять вообще не должен

53r63rn4r
20.10.2016
10:21:48
Ну запускай просто другую функцию в функции которая по смтп делает рассылку

Макс
20.10.2016
10:21:49
так, стоп, я запуталось
ну дублировать код не хочется :)

53r63rn4r
20.10.2016
10:22:42
Да-к, а где дублирование?
В параметр протсо передавай этот файл

/dev
20.10.2016
10:22:53
http://flask.pocoo.org/snippets/32/

Google

53r63rn4r
20.10.2016
10:22:59
А в функции параметром принимай
Я имею ввиду функцию отправки на почту

Макс
20.10.2016
10:23:29
я хотел всё это сделать красиво, без временных файлов. пайп от утилиты сразу слать в браузер.
но из-за этих name что-то не то

/dev
20.10.2016
10:24:03

Макс
20.10.2016
10:24:03
ладно, сейчас ещё попробу и отпишусь
StringIO
Аналог для бинарных данных есть?

/dev
20.10.2016
10:24:51
Там хоть черта лысого храни

Макс
20.10.2016
10:25:20
мне бы простенький прокси, берущий один поток, дающий ему имя и шлющий дальше

Zart
20.10.2016
10:26:29

53r63rn4r
20.10.2016
10:27:04
Тоже не понял =\

Vinc
20.10.2016
11:14:54
надо написать функцию, которая сделала бы какое-нить матем вычисление с передаваемыми значениями. от мин, до макс с шагом. эти три значения проще держать в списке?

Zart
20.10.2016
11:18:18
эти три значения можно передавать слайсом или ренджем

Vinc
20.10.2016
11:18:51
в рендж я их потом засовывать буду

Zart
20.10.2016
11:19:17
я бы слайсом реализовал

Vinc
20.10.2016
11:19:37
def nam( ????? ):
слайс не знаю пока, гуглю

Zart
20.10.2016
11:19:50
а. это только в методах 8(

Vinc
20.10.2016
11:19:58
а, знаю

Zart
20.10.2016
11:20:09
делай тогда сразу ренджем
>>> def f(*r):
... for i in range(*r):
... print(i)
...
>>> f(5)
0
1
2
3
4
>>> f(2, 5)
2
3
4
>>> f(2, 5, 2)
2
4

Google

Vinc
20.10.2016
11:22:25

Zart
20.10.2016
11:22:43
я только что пример привёл

Vinc
20.10.2016
11:23:58
что за звёздочка?

/dev
20.10.2016
11:24:46

Zart
20.10.2016
11:25:05
переменные аргументы
если в списке параметров - значит список аргументов оформить в виде тупла и запихать в эту переменную
если в списке аргументов - наоборот, разворачивает список в позиционные аргументы
т.е.
a = (1, 2, 3)
f(*a) это то же самое что и f(1, 2, 3)

Admin
ERROR: S client not available

Vinc
20.10.2016
11:26:59
спасибо
а если в этой функции по умолчанию должны какие-то значения быть(на тот случай, если вызывается функция без указания аргументов), то такой вариант уже не подойдёт

Zart
20.10.2016
11:32:59
можно поставить проверку
if not r:
# нет аргументов
r = range(10) # дефолт
else:
# r = range(*r) # создать рендж с переданными аргументами
как пример

/dev
20.10.2016
11:35:16
Не

Vinc
20.10.2016
11:35:41
def hello(n='Вася'):
print('Hi,', n)
по такому типу не проще?

/dev
20.10.2016
11:35:41
def f(arg=val)

Zart
20.10.2016
11:35:42
range кварги не хавает, если чо

/dev
20.10.2016
11:36:02
Ну или:
if not r: r =[10]


Макс
20.10.2016
12:04:21
А у меня вопрос по Flask. Есть у меня иногда нужда отдавать результат браузеру не HTMLкой, а PDFкой. Я решил написать под это дело декоратор для вьюх. Все вьюхи с этим декоратором сначала рендерятся как обычно, а затем прогоняются через стороннюю утилиту, которая рендерит PDF, и он посылается с миметайпом application/pdf и именем, основанном на request.url. Всё работает, всё круто, но. Ещё у меня иногда есть нужда один из этих PDFов программно взять и отправить по емейлу. Как покрасивее сделать, чтобы можно было эти же функции юзать, но request у них был с подменённым урлом или вроде того?
Без временного файла так и не смог, ну да и хрен с ним.
Если кому интересно:
def render_as_pdf(view):
"""
Декоратор для вьюх, которые нужно отобразить в формате PDF, а не простом HTML.
Автоматически добавляет параметр return_pdf_file, в котором можно передать True,
если нужно получить файл в виде file-like object, а не в виде фласковского Response.
"""
def wrapper(*args, return_pdf_file: bool = False, **kwargs):
html = view(*args, **kwargs)
with TemporaryDirectory() as tempdir:
pdf_path = tempdir + "/pdf.pdf"
html2pdf = Popen([app.config.bin.htmlpdf, "/dev/stdin", pdf_path], stdin=PIPE)
html2pdf.stdin.write(html.encode())
html2pdf.stdin.close()
html2pdf.wait()
pdf = open(pdf_path, "rb")
if return_pdf_file:
return pdf
else:
return send_file(pdf, mimetype="application/pdf")
return wrapper

Google

Pavel
20.10.2016
12:24:42
Насколько точным получается пдф? У меня есть шаблон, в котором миллион цифр в нескольких таблицах, и это надо вписать ровно в а4. Я смогу через html2pdf сделать это надёжно?


/dev
20.10.2016
12:49:25
Без временного файла так и не смог, ну да и хрен с ним.
Если кому интересно:
def render_as_pdf(view):
"""
Декоратор для вьюх, которые нужно отобразить в формате PDF, а не простом HTML.
Автоматически добавляет параметр return_pdf_file, в котором можно передать True,
если нужно получить файл в виде file-like object, а не в виде фласковского Response.
"""
def wrapper(*args, return_pdf_file: bool = False, **kwargs):
html = view(*args, **kwargs)
with TemporaryDirectory() as tempdir:
pdf_path = tempdir + "/pdf.pdf"
html2pdf = Popen([app.config.bin.htmlpdf, "/dev/stdin", pdf_path], stdin=PIPE)
html2pdf.stdin.write(html.encode())
html2pdf.stdin.close()
html2pdf.wait()
pdf = open(pdf_path, "rb")
if return_pdf_file:
return pdf
else:
return send_file(pdf, mimetype="application/pdf")
return wrapper
Ну так файл можешь в RAM поместить


Макс
20.10.2016
12:50:53
Насколько точным получается пдф? У меня есть шаблон, в котором миллион цифр в нескольких таблицах, и это надо вписать ровно в а4. Я смогу через html2pdf сделать это надёжно?
Не знаю, мне не так критично. Я так понимаю, и от шрифтов может зависеть, и от всего... Как и в браузере, в общем-то.
Но так как на сервере ты точно знаешь, какие шрифты у тебя есть, а каких нет, и что какого размера будет, то, выходит, немного надёжнее, чем в браузере.

Zart
20.10.2016
12:52:05
пдф зависит от шрифтов. каждый день новости...
(при генерации с нуля конечно, но не в общем случае ж)

/dev
20.10.2016
12:59:00

Stanislav
20.10.2016
13:07:37
У меня проблемка.
Есть комп и питон 2.7.
Есть куча вложений и иногда там есть русский текст
Так вот, принтаю этот лист и оно не конвертирует всю хуйню типа \xd0.

Zart
20.10.2016
13:07:53
вложений куда?

Stanislav
20.10.2016
13:07:55
С этим питон 3 я уже неженка
Типо такого

Zart
20.10.2016
13:08:39
репры..

F
20.10.2016
13:09:21

Stanislav
20.10.2016
13:09:35
__repr__

Zart
20.10.2016
13:09:36
он печатает не строки, а объекты
поэтому выводится repr() от них, а во втором питоне юникод им эскейпится

F
20.10.2016
13:10:41
а, понял
как __str__ в джанго

Stanislav
20.10.2016
13:11:20
Эта группа больше не существует