
Nobue
27.09.2016
19:37:06
для каждого элемента

Темный
27.09.2016
19:37:22
пока я не решил укоротить

Nobue
27.09.2016
19:37:46
ну без кода не получится понять что там не так

Google

Igor
27.09.2016
19:37:55
удлиняй обратно и смотри где накосячил )

Темный
27.09.2016
19:44:44

Igor
27.09.2016
19:45:16
хм

Темный
27.09.2016
19:45:25
min_seat возвращает один срез типа того что я выше писал

Igor
27.09.2016
19:45:31
ааа
так ты сравниваешь i in SeatsCount
т.к. SeatsCount - число, ты получаешь такую ошибку

Темный
27.09.2016
19:46:10
ээ

Igor
27.09.2016
19:46:18
in юзается для случая, если надо узнать, "а есть ли такой элемент в таком-то масссиве?"
например if 1 in (1, 2, 3)

Темный
27.09.2016
19:46:36
а, щас на == попробую

Igor
27.09.2016
19:46:49
а ты сравниваешь число с числом, поэтому да, поэтому ==
ну хотя может, конечно, у тебя min_seat['Cells']['SeatsCount'] и должен возвращать список, но вряд ли )

Google

Темный
27.09.2016
19:47:47
все равно возвращает только первое из среза минимального значения

Igor
27.09.2016
19:48:04
ну да, потому что ты сравниваешь индекс
индекс уникальный только один

Темный
27.09.2016
19:48:31
сложна

Igor
27.09.2016
19:48:33
если хочешь сравнить все, то сравнивай тогда уж инфу о свободных местах по текущему объекту с соответствующей инфой о свободных местах по минимальному значению
то бишь
т.к. ты делаешь i, obj in enumerate(...), у тебя будет

Темный
27.09.2016
19:49:02

Igor
27.09.2016
19:49:04
if obj['Cells']['SeatsCount'] == min_seat['Cells']['SeatsCount']
тогда тебе list comprehension выплюнет все значения из списка enumerate(data), соответствующие этому условию
возможно, я снова не понял твою структуру данных и/или то, чего ты пытаешься добиться))

Темный
27.09.2016
19:51:08
ааа... я долбился в и, а не обж?)

Igor
27.09.2016
19:51:12
да
а i - это всего лишь ссаная цифирка

Темный
27.09.2016
19:53:34
спасибо!)
в итоге с 13 строк сократил до 2х, притом что энумерейт тоже использовался в старой)

Igor
27.09.2016
19:54:49
норм!
смотри простор для улучшения:
data = [
{
'Cells': {
'Name': 'Писька мамонта',
'District': 'Выхино',
'People': 100500
}
},
{
'Cells': {
'Name': 'Попа негра',
'District': 'Марьино',
'People': 1488
}
},
{
'Cells': {
'Name': 'Кадык страуса',
'District': 'Алтуфьево',
'People': 666
}
}
]
print '\n'.join(
[str(i) + ' - ' + obj['Cells']['Name'] for i, obj in enumerate(data)]
)
# 0 - Писька мамонта
# 1 - Попа негра
# 2 - Кадык страуса
max_people = max(data, key=lambda obj: obj['Cells']['People'])['Cells']['People']
# max_people == 100500
max_obj_name = max(data, key=lambda obj: obj['Cells']['People'])['Cells']['Name']
# min_obj_name == 'Писька мамонта'
min_obj_name = min(data, key=lambda obj: obj['Cells']['People'])['Cells']['Name']
# min_obj_name == 'Кадык страуса'
извините за простыню

Google

Dmitriy
27.09.2016
19:55:03

Темный
27.09.2016
19:55:47

Johnnie
27.09.2016
19:56:06
'Кадык страуса' интересненько))

Igor
27.09.2016
19:56:15
т.е. get_smallest_bar(), похоже, это просто min() :)

Темный
27.09.2016
19:57:39

Igor
27.09.2016
19:58:00

Темный
27.09.2016
19:58:06
вооот

Igor
27.09.2016
19:59:32
хотя ничего не мешает сделать, как любят на собеседованиях спрашивать
знаешь, что небольших пабов ровно три штуки? говно вопрос!
In [28]: ['Tiny Pub'] * 3
Out[28]: ['Tiny Pub', 'Tiny Pub', 'Tiny Pub']
(шучу, не надо так делать)

Темный
27.09.2016
20:00:50
мне посоветовали сделать проверку на сложность пароля от 1 до 10 - random(1-10)
так наверное тоже не стоит делать?)

Igor
27.09.2016
20:01:51
наверное, зависит от :)

Johnnie
27.09.2016
20:03:43
а как правильно убирать "Sign in" из NavBar'а?
сейчас у меня так:
def top_nav_bar():
nav = Nav()
nav.register_element(
'top', Navbar(
'MY_TITLE',
View('Home', 'common.index'),
View('Sign in', 'auth.signin'),
View('Logout', 'auth.logout'),
)
)
return nav

Igor
27.09.2016
20:04:13
{% if current_user.is_authenticated %} ... {% else %} ... {% endif %}
А, так

Johnnie
27.09.2016
20:04:20
это в шаблоне

Igor
27.09.2016
20:05:08
да, я поспешил, сорри :)
Нууу.. т.к. эти две вьюхи - sign in и logout у тебя взаимозаменяемы, можешь тупо написать

Johnnie
27.09.2016
20:05:21
гугление SO чет не выдало сходу best practice :)

Igor
27.09.2016
20:05:21
View(SignIn) if current_user.is_authenticated else View(LogOut)
я эту логику запихнул к херам в сам шаблон

Google

Igor
27.09.2016
20:06:21
нехорошо, конечно, логику в шаблонах хранить, но раз уж так всё - то идеально подходит

Johnnie
27.09.2016
20:06:52
да там и в офф доке такой пример идет

Igor
27.09.2016
20:07:42
сейчас у меня так:
def top_nav_bar():
nav = Nav()
nav.register_element(
'top', Navbar(
'MY_TITLE',
View('Home', 'common.index'),
View('Sign in', 'auth.signin'),
View('Logout', 'auth.logout'),
)
)
return nav
ну, т.е., вот так так
'top', Navbar(
'MY_TITLE',
View('Sign in', 'auth.signin') if current_user.is_authenticated else View('Logout', 'auth.logout'),
)

Johnnie
27.09.2016
20:09:47
from flask_login import current_user ?
в шаблонах это некий прокси
а тут его похоже не отсюда брать нужно
AttributeError: 'NoneType' object has no attribute 'is_authenticated'
не канает
пойду гуглить
On login_user, Flask-Login gets the user object's ID from User.get_id and stores it in Flask's session. Flask-Login then sets a before_request handler to load the user instance into the current_user object, using the load_user hook we provide. The logout_user function then removes the relevant bits from the session.
навбар раньше создается чем этот объект похоже

Igor
27.09.2016
20:13:03
ага
ща скину свой шаблончик
там, конечно, любой человек охуеет, но мало ли поможет как

Johnnie
27.09.2016
20:13:57
просто хотелось красиво меню в одном методе сочинить
а в итоге придется костыли хуярить

Igor
27.09.2016
20:15:00
https://gist.github.com/hatarist/a122d201e37d8586072f7d05635bfe19
вот мой костылёчек родименький!
ты только сильно не пугайся
как-то так в итоге

Google

Johnnie
27.09.2016
20:18:18
ну то есть выкинуть к хуям этот Flask-Nav и сделать меню в шаблонах?

Igor
27.09.2016
20:18:49
хз, смотри как тебе удобнее/проще окажется
в глаза не видел flask-nav)

Johnnie
27.09.2016
20:19:34
http://pythonhosted.org/flask-nav/
выглядит просто и круто
а на деле))
ладно, пойду еще доки почитаю
может есть средство

Igor
27.09.2016
20:20:06
вон, кстати, в документации
https://github.com/mbr/flask-nav/blob/master/docs/advanced-topics.rst#dynamic-construction
ой, бесполезно, похоже
> This does not alter the structure of the bar though

Johnnie
27.09.2016
20:21:22
ну тут не вижу доступа к юзеру))

Темный
27.09.2016
21:08:57
data = [
{
'Cells': {
'Name': 'Писька мамонта',
'District': 'Выхино',
'People': 100500
}
},
{
'Cells': {
'Name': 'Попа негра',
'District': 'Марьино',
'People': 1488
}
},
{
'Cells': {
'Name': 'Кадык страуса',
'District': 'Алтуфьево',
'People': 666
}
}
]
print '\n'.join(
[str(i) + ' - ' + obj['Cells']['Name'] for i, obj in enumerate(data)]
)
# 0 - Писька мамонта
# 1 - Попа негра
# 2 - Кадык страуса
max_people = max(data, key=lambda obj: obj['Cells']['People'])['Cells']['People']
# max_people == 100500
max_obj_name = max(data, key=lambda obj: obj['Cells']['People'])['Cells']['Name']
# min_obj_name == 'Писька мамонта'
min_obj_name = min(data, key=lambda obj: obj['Cells']['People'])['Cells']['Name']
# min_obj_name == 'Кадык страуса'
чет я уже туплю, как обраться к дикту зная определенный 'name'?
значение нейма


Igor
27.09.2016
21:10:06
[obj['Cells']['Population'] for obj in data if data['Cells']['Name'] == "Писька мамонта"] - получаешь populationы диктов с таким названием

Темный
27.09.2016
21:10:23
не, не то
зайти в этот дикт и забрать популейшин, например

Igor
27.09.2016
21:11:11
все еще не подходит?)
(сорри, случайно отредактировал прошлое сообщение вместо того чтоб новое написать)

Темный
27.09.2016
21:13:24
Эта группа больше не существует