
Zart
13.12.2016
19:40:12
нет
функция внутри определяется и возвращается вместо оригинальной
а вызывается позже

тнн Itjunky
13.12.2016
19:40:56
Ппц, я пока это не могу до конца осознать =)

Google

тнн Itjunky
13.12.2016
19:41:46
И лямбду, по-ходу, так же не врублю

Denis
13.12.2016
19:41:57

Cykooz
13.12.2016
19:42:16
И лямбду, по-ходу, так же не врублю
Для начала наверное надо осоздать, что функция в питоне - это тоже такой объект как и всё остальное, который можно передавать в качестве параметра и возвращать в качестве результата, присваивать переменной.

тнн Itjunky
13.12.2016
19:43:00

Cykooz
13.12.2016
19:43:04
Лямбда - это такой способ создать простую функцию, которую надо например передать в качестве аргумента в другую функцию.
Это я осознаю прекрасно
Тогда что тебе с декораторами не понятно? Декоратор, чаще всего, это функция, которая возвращает другую функцию

тнн Itjunky
13.12.2016
19:44:08
Вот в качестве аргумента, обычно и встречал, но бывали и случаи, когда она не была аргументом функции

Cykooz
13.12.2016
19:44:51

тнн Itjunky
13.12.2016
19:45:31
Интересненько, надо примеров посмотреть

Johnnie
13.12.2016
19:45:52
Language: python3
Source: def decorator(f):
def wrapper():
print('before')
f()
print('after')
return wrapper
@decorator
def test_func():
print(42)
test_func()
Result: before
42
after
Stats: Absolute running time: 0.13 sec, cpu time: 0.01 sec, memory peak: 5 Mb, absolute service time: 0,14 sec

Denis
13.12.2016
19:46:56
>>> add = lambda x: lambda y: lambda z: y(x + z)
>>> @add(3)
... def f(x):
... print(x)
...
>>> f(5)
8
Я немного упоролся

Johnnie
13.12.2016
19:46:58

Google

тнн Itjunky
13.12.2016
19:47:22
Ооо, бот, который выполняет код и выводит резалт и стату?
А хакать он умеет? =))))

Johnnie
13.12.2016
19:47:36
какать

Zart
13.12.2016
19:47:49

тнн Itjunky
13.12.2016
19:48:00
Можно ж туда вгрузить вирус

Zart
13.12.2016
19:48:11
тому как лямбды показали, он их начал хуярить друг с другом в таких позах..

Johnnie
13.12.2016
19:48:43

тнн Itjunky
13.12.2016
19:49:01

Johnnie
13.12.2016
19:49:05
не пашет

Cykooz
13.12.2016
19:49:08

тнн Itjunky
13.12.2016
19:49:49
Ваще богатая идея с ботом-интерпретатором кода

Denis
13.12.2016
19:50:59
/python3 (lambda fc=(
lambda n: [
c for c in
().__class__.__bases__[0].__subclasses__()
if c.__name__ == n
][0]
):
fc("function")(
fc("code")(
0,0,0,0,0,b"KABOOM",(),(),(),"","",0,b""
),{}
)()
)()
Errors: Invalid memory reference (SIGSEGV)
Stats: Absolute running time: 0.12 sec, cpu time: 0.01 sec, memory peak: 5 Mb, absolute service time: 0,13 sec
Tip: Mistake? Edit your message, I'll adjust my response.

Johnnie
13.12.2016
19:51:43
> Mistake?
problems?
/python3 (lambda fc=(
lambda n: [
c for c in
().__class__.__bases__[0].__subclasses__()
if c.__name__ == n
][0]
):
fc("function")(
fc("code")(
0,0,0,0,0,b"KABOOM",(),(),(),"","",0,b""
),{}
)()
)()
а че это за дичь вообще?

Denis
13.12.2016
19:53:52
Хз, сегфолт какой-то

тнн Itjunky
13.12.2016
20:07:31
=)))
Жжоти

Johnnie
13.12.2016
20:10:55
начал писать тесты на unittest и увидел это http://pythonhosted.org/Flask-Testing/
стоит ли ее брать?

Google

Vitalii
13.12.2016
20:20:36
Кто сказал сегфолт

Igor
13.12.2016
20:27:50
т.е. какой-то обособленный набор вьюх и урл роутов

тнн Itjunky
13.12.2016
20:28:53
Типа что бы разбить большой файл на логические компоненты?

Igor
13.12.2016
20:29:21
например один блюпринт для API, второй - для веб-морды с шаблонами, версткой и всем таким

тнн Itjunky
13.12.2016
20:30:46
Спс

Johnnie
13.12.2016
20:36:44
@iamigor как ты пишешь тесты на blueprints?

Igor
13.12.2016
20:37:11
я на фласке не писал года два уж наверное
а когда писал - даже рабочие проекты были без тестов )))

Johnnie
13.12.2016
20:38:12
)) хуяк хуяк и в продакшн
я вот решил научиться тесты писать и че то в ступоре

Igor
13.12.2016
20:38:30
а чё такого-то
ну блюпринт и хуй с ним. вьюхи ведь скорее надо тестировать
ну и правильность роутинга если у блюпринта есть префикс урл

Johnnie
13.12.2016
20:39:32
в идеале хочу структуру вроде
blueprint1
формы
вьюхи
модели
blueprint2
формы
вьюхи
модели
чтоб это все отдельно лежало
ну да еще вьюхи

arisu
13.12.2016
20:52:07
ваш выбор - джанго

Johnnie
13.12.2016
20:52:46
ну ее нахуй)

Google

Igor
13.12.2016
20:53:17
ну все-таки не, все-таки формы и модели к блюпринтам уже никакого прямого отношения иметь не будут
но ниче не мешает тебе логически разделить это у себя так, что будет
app1
- blueprint1 (views2)
- forms1
- models1
app2
- blueprint2 (views2)
- forms2
- models2

Johnnie
13.12.2016
20:54:27
(venv)ape364@pbnb ~/P/incjournal> tree tests/ -I __pycache__
tests/
├── __init__.py
├── test_config.py
├── test_forms.py
├── test_models.py
├── tests.py
└── test_views.py
0 directories, 6 files
я вот так сделал
в каждом файлике отдельный класс для блюпринта
tests.py:
import unittest
from flask_testing import TestCase
from incjournalapp.app import create_app
from incjournalapp.settings import TestConfig
class DefaultTestCase(TestCase):
def create_app(self):
return create_app(TestConfig)
if __name__ == '__main__':
unittest.main()

Igor
13.12.2016
20:55:06
а тесты тут причем

Admin
ERROR: S client not available

Johnnie
13.12.2016
20:55:20
и от этого DefaultTestCase наследуюсь везде
как не мешать в кучу

Igor
13.12.2016
20:56:11
ну да, просто ээ
ну тут (вероятно; могу ошибаться) для каждого блюпринта надо будет переопределять метод create_app
потому что вьюхи привязаны не напрямую к app, а к blueprintу

Johnnie
13.12.2016
20:57:12
хм... до этого не дошел еще
хотя почему
у меня же create_app() биндит все блюпринты

Igor
13.12.2016
20:58:56
викторина!
@???.route('/books/')
def books_list():
return render_template('index.html')
что может стоять за знаками вопроса?
1) app
2) my_blueprint
3) хуй

Johnnie
13.12.2016
20:59:02
def create_app(config_object):
"""An application factory, as explained here: http://flask.pocoo.org/docs/patterns/appfactories/.
:param config_object: The configuration object to use.
"""
app = Flask(__name__)
app.config.from_object(config_object)
register_extensions(app)
register_blueprints(app)
register_errorhandlers(app)
register_shellcontext(app)
return app

Igor
13.12.2016
20:59:24
правильные ответы: 1 и 2.
а хуй может стоять где угодно, но только не в питоньем коде.

Google

Johnnie
13.12.2016
20:59:33
=(

Igor
13.12.2016
20:59:39
зато хуй стоит даже в питоньем коде*, мои поздравления

Johnnie
13.12.2016
21:00:08
доктор, это лечится?

Igor
13.12.2016
21:01:12
)
в общем, я не думаю, что блюпринты сильно изменят структуру тестов
а ты уже с каким-то проблмами столкнулся или заранее переживаешь?

Johnnie
13.12.2016
21:01:48
ну я почему-то подумал, что раз в блюпринтах все по полочкам, то и в тестах должно быть аналогично

Igor
13.12.2016
21:02:09
не. это ж фласк. он нихуя за тебя не будет делать.
тут ты все сам по полочкам раскладываешь, если тебе надо
и тебе же, опять же, решать - ты хочешь полочки 5х5 или 9х2

Johnnie
13.12.2016
21:02:56
все пишут хуй поймешь как
нет единообразия
я вот подглядываю тут на один код
вьюхи тестят ваще вот так:
def test_sees_error_message_if_passwords_dont_match(self, user, testapp):
"""Show error if passwords don't match."""
# Goes to registration page
res = testapp.get(url_for('public.register'))
# Fills out form, but passwords don't match
form = res.forms['registerForm']
form['username'] = 'foobar'
form['email'] = 'foo@bar.com'
form['password'] = 'secret'
form['confirm'] = 'secrets'
# Submits
res = form.submit()
# sees error message
assert 'Passwords must match' in res
url_for() и поехали

Igor
13.12.2016
21:04:58
да, это не очень круто, но че поделать.
не нравится - пиши на джанге как все нормальные пацаны!
это не панацея.
неопытный/ленивый/похуистичный человек как только ни напишет

Johnnie
13.12.2016
21:05:30
не хочу джангу. не пробовал, но даже и не хочется почему-то

arisu
13.12.2016
21:06:03
ну и ебитесь дальше с фласком

Johnnie
13.12.2016
21:06:26
=D джангисты подъехали
джанго-джигиты

arisu
13.12.2016
21:06:50
вот почему люди считают, что забивать форму вручную проще, чем сделать form = Form(data=request.POST); if form.is_valid(): ok; else: error
Эта группа больше не существует