gentoo.ru
python
python@conference.gentoo.ru
Понедельник, 28 марта 2011< ^ >
maksbotan установил(а) тему: Пей тон @ Жуй картон || https://gist.github.com/289467 || Логи: http://tinyurl.com/gentoo-py-logs || "Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck."
Конфигурация комнаты
Участники комнаты

GMT+4
[01:41:47] <maksbotan> фиговый у пигментса определятель синтаксиса
[01:41:55] <maksbotan> с++ код за перл принял
[01:42:03] <krigstask> Это у тебя синтаксис хреновый
[01:42:12] <maksbotan> да ну
[01:42:23] <maksbotan> обычная такая сишка++
[01:42:39] <maksbotan> http://paste.pocoo.org/show/361130/
[02:04:43] <lk4d4> ботан совсем задекорировался
[02:04:46] <lk4d4> вот что я скажу
[02:04:53] <maksbotan> Ты о чем?
[02:06:31] <lk4d4> да как-то эти декораторы излишними кажутся
[02:07:01] <maksbotan> по мне так удобно
[02:07:08] <maksbotan> lk4d4: ну предложи чо другое
[02:11:10] <lk4d4> а почему ты channel_user раньше login_required применяешь?
[02:12:38] <maksbotan> где?
[02:12:44] <maksbotan> вообще не надо так делать
[02:13:03] <maksbotan> хотя стой
[02:13:12] <maksbotan> внешним-то будет login_required
[02:13:20] <lk4d4> да ладно
[02:13:25] <maksbotan> и если логина нет, то channel_user уже не выполнится
[02:13:46] <maksbotan> lk4d4: именно так
[02:13:53] <lk4d4> ну внутренним ты имеешь ввиду
[02:13:58] <maksbotan> блин
[02:14:20] <maksbotan> сначала вызовется login_required, потом channel_user
[02:14:29] <lk4d4> то есть сначала login_required возвращает либо тоже что и было либо error()
[02:14:58] <maksbotan> да
[02:15:00] <lk4d4> ну в принципе я понял, что пофигу
[02:15:10] <maksbotan> нет не пофигу
[02:15:23] <lk4d4> но почему ты говоришь, что channel_user не выполнится?
[02:15:27] <maksbotan> если сначала channel_user вставить, то канал откроется лишний раз
[02:15:45] <maksbotan> lk4d4: сам декоратор применится к функции, но канал не откроется
[02:16:08] <lk4d4> что ему помешает?
[02:16:16] <maksbotan> ну блин
[02:16:32] <maksbotan> если team нету в session, то login_required не вызывает внутреннюю функцию
[02:16:42] <maksbotan> в которой канал открывается
[02:16:46] <maksbotan> значит он и не откроется
[02:17:12] <lk4d4> return util.login_error()
[02:17:17] <maksbotan> lf
[02:17:18] <maksbotan> да*
[02:17:29] <lk4d4> значит f = util.login_error()
[02:17:47] <lk4d4> почему для нее channel_user не будет открывать канал?
[02:17:47] <maksbotan> нееееееет
[02:18:07] <lk4d4> да как нет-то, что вернул, то и будет
[02:18:23] <maksbotan> при вызове функции, скажем, allsubmits фласком, вызывается замыкание из login_required
[02:18:34] <maksbotan> если логина нет,то оно возвращает ошибку
[02:18:53] <maksbotan> если есть, то вызывает функцию и возвращает её результат
[02:18:59] <lk4d4> а
[02:19:02] <maksbotan> функцией тут является замыкание из channel_user
[02:19:10] <maksbotan> которое канал открывает
[02:19:21] <lk4d4> ты меня словами умными не путай
[02:19:35] <maksbotan> каким такими словами
[02:20:51] <lk4d4> почему канал-то не откроется
[02:20:56] <maksbotan> :')
[02:20:58] <lk4d4> ну вернуло оно тебе ошибку
[02:20:58] <maksbotan> :'( *
[02:21:10] <maksbotan>         if not 'team' in session:
            return util.login_error()
        return f(*args, **kwargs)
[02:21:19] <maksbotan> если сработало  return util.login_error()
[02:21:27] <maksbotan> то   return f(*args, **kwargs) уже не запустится
[02:21:31] <maksbotan> это понятно?
[02:21:47] <lk4d4> да
[02:22:02] <maksbotan> а значит и         def wrapper(*args, **kwargs):
            channel = testsys.get_channel(chan)
....
[02:22:05] <maksbotan> не запустится
[02:22:11] <maksbotan> который внутре f сидит
[02:23:10] <maksbotan> дошло?
[02:23:30] <lk4d4> нет
[02:23:35] <maksbotan> :'(
[02:23:37] <maksbotan> как же так
[02:23:45] <maksbotan> это же все просто и очевидно
[02:23:56] <lk4d4> почему это внутре f?
[02:24:04] <maksbotan> @decorators.login_required
@decorators.channel_user('MSG')
def submits(channel):
[02:24:21] <maksbotan> submits внутре channel_user, а он внутре login_required
[02:24:35] <maksbotan> для Login_required f это channel_user
[02:24:45] <maksbotan> а для channel_user f это submits
[02:24:49] <maksbotan> это вот так:
[02:25:00] <maksbotan> def submits: blabla
[02:25:14] <maksbotan> submits = channel_user('MSG')(submits)
[02:25:19] <lk4d4> так, тиха
[02:25:22] <maksbotan> submits = login_required(submits)
[02:25:36] <lk4d4> ну да
[02:25:41] <maksbotan> вот вот
[02:25:52] <lk4d4> чаннел_юзерз вызвался до логин_реквиред
[02:26:01] <lk4d4> канал уже открыт
[02:26:23] <maksbotan> АААААААААААААААААААААААААААА
[02:26:32] <maksbotan> в чаннел_юзер три уровня вложенности
[02:26:36] <maksbotan> [02:24:36] <maksbotan> submits = channel_user('MSG')(submits)
[02:26:38] <maksbotan> тут только 2
[02:26:43] <maksbotan> третий вызывается в рантайме
[02:26:46] <maksbotan> _рантайме_
[02:27:32] <maksbotan> читни уже пеп
[02:27:38] <lk4d4> я его и читаю
[02:27:50] <maksbotan> молодец
[02:28:47] <maksbotan> декоратор это нечто, что возвращает то, что будет выполняться вместо функции
[02:30:11] <maksbotan> http://paste.pocoo.org/show/361151/
[02:30:14] <maksbotan> вот, смотри
[02:32:15] <lk4d4> вот еще здесь непонятно
[02:32:18] <lk4d4> return f(channel, *args, **kwargs)
[02:32:42] <lk4d4> *args, **kwargs для submit до декоратора какие?
[02:33:10] <maksbotan> что значит до?
[02:34:10] <lk4d4> ну значит было submit(*args, **kwargs), стало submit(channel, *args, **kwargs)
[02:34:41] <maksbotan> http://paste.pocoo.org/show/361156/
[02:34:45] <maksbotan> вот тебе ещё примерец
[02:35:20] <maksbotan> lk4d4: ну если вызывать submits(1), то он выйдет submits(channel, 1)
[02:35:22] <maksbotan> например
[02:35:25] <lk4d4> но если закоментить декоратор про ченнел, то и так submit(channel)
[02:35:32] <lk4d4> а
[02:35:42] <lk4d4> то есть там разные channel
[02:35:46] <maksbotan> то ексепшн возникнет
[02:35:53] <maksbotan> т.к. никто ему этот чаннел не даст
[02:36:34] <maksbotan> вообще в принципе декораторы не должны вмешиваться в аргументы функций
[02:36:41] <maksbotan> но тут вроде все ясно и понятно
[02:36:51] <maksbotan> submits() нужен канал
[02:36:57] <maksbotan> декоратор дает ей канал
[02:37:10] <maksbotan> а внешнему миру плевать на каналы
[02:37:18] <lk4d4> ага
[02:37:25] <maksbotan> я мог бы заставить фласк передавать туда ещё левые аргументы
[02:37:43] maksbotan жалеет что пока channel_fetcher нигде не пригодился
[02:37:51] <maksbotan> может его и выпилить придется
[02:38:43] <maksbotan> lk4d4: въехал теперь?
[02:38:50] <lk4d4> ну в основном
[02:38:59] <maksbotan> ну и славно
[02:39:06] <maksbotan> разбирайся дальше, а я спать пойду
[02:39:16] <lk4d4> почему return f(channel, *args, **kwargs), а не просто return f(channel)
[02:39:20] <lk4d4> да пора уже
[02:39:49] <maksbotan> lk4d4: а вдруг функция f ещё какие-нибудь аргументы принимает?
[02:40:25] <lk4d4> а, точно, я что-то к этому submit прицепился
[02:40:27] <lk4d4> ладно, давай
[02:40:31] <lk4d4> спокойной ночи
[02:40:36] <maksbotan> спасибо
[02:40:51] <maksbotan> тебе тоже
[02:41:57] <maksbotan> lk4d4: я скоро запилю пару функций которые кроме канала ещё че-нить принимать будут, если  чо
[02:43:23] maksbotan вышел(а) из комнаты
[08:57:11] maksbotan вошёл(а) в комнату
[09:19:02] krigstask вышел(а) из комнаты
[09:41:46] lk4d4 вышел(а) из комнаты: Replaced by new connection
[09:41:56] lk4d4 вошёл(а) в комнату
[09:59:26] lk4d4 вышел(а) из комнаты
[10:09:42] maksbotan вышел(а) из комнаты: Replaced by new connection
[10:09:52] maksbotan вошёл(а) в комнату
[10:27:32] maksbotan вышел(а) из комнаты
[10:30:45] maksbotan вошёл(а) в комнату
[10:43:20] lk4d4 вошёл(а) в комнату
[11:24:59] krigstask вошёл(а) в комнату
[11:42:42] lk4d4_1 вошёл(а) в комнату
[11:51:18] <maksbotan> lk4d4: запилил, можешь посмотреть
[11:55:53] <lk4d4_1> maksbotan: ты тут?
[12:22:41] lk4d4_1 вышел(а) из комнаты
[12:47:04] lk4d4 вышел(а) из комнаты
[13:50:58] youshi вошёл(а) в комнату
[13:51:44] <youshi> есь тут кто?
[13:52:03] <krigstask> Ага, но я лично скоро на обед пойду
[13:52:29] <youshi> ну у меня тока один вопрос. если знаешь ответ  - много времени не займет. а не знаешь - буду дальше искать)
[13:53:49] <youshi> ковыряю pylons. никак не пойму, куда и как из класса Mapper модуля routes деваются части URL из запроса и откуда их достать из контроллера. ты в pylons не шаришь?
[13:54:24] <krigstask> Нет, я больше по django и flask
[13:54:35] <youshi> ясн. ну ладно. бум дальше разбираться
[14:01:21] maksbotan вышел(а) из комнаты
[14:07:00] lk4d4 вошёл(а) в комнату
[14:11:29] lk4d4_1 вошёл(а) в комнату
[14:15:22] <krigstask> lk4d4, lk4d4_1: понабежало вас!
[14:15:32] <lk4d4_1> :E
[15:30:07] lk4d4_1 вышел(а) из комнаты
[15:38:14] lk4d4_1 вошёл(а) в комнату
[16:09:32] youshi вышел(а) из комнаты
[17:12:49] <krigstask> Я дуб. Угробил полчаса, пока вспомнил, что str.replace создаёт новую строку, а не меняет старую )-:Е
[17:15:24] <lk4d4_1> это отлично
[17:35:43] lk4d4_1 вышел(а) из комнаты
[19:35:09] lk4d4 вышел(а) из комнаты
[19:52:48] krigstask вышел(а) из комнаты
[19:52:58] krigstask вошёл(а) в комнату
[20:32:17] lk4d4 вошёл(а) в комнату
[20:43:31] maksbotan вошёл(а) в комнату
[20:45:25] <maksbotan> хехе
[20:50:20] krigstask вышел(а) из комнаты: Logged out
[21:05:04] <maksbotan> lk4d4: ну чо, читал ещё?
[21:05:14] <lk4d4> читал еще
[21:26:06] <maksbotan> и как?
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!