
Zart
21.11.2016
16:26:28
между 72/79/80 тоже холиворы были

Vitali K.
21.11.2016
16:26:49
pylint --generate-rcfile | grep max-line-length
No config file found, using default configuration
max-line-length=100

Sergey
21.11.2016
16:32:25

Zart
21.11.2016
16:33:45
79 - это для тех, у кого проблемы с soft margins в терминале... а я думаю что это как оспа, которую устранили еще в том тыщелетии

Google

Serge
21.11.2016
16:35:19

Roman
21.11.2016
16:39:49
Слушайте, а есть что-то типа namedtuple, но для dict?

Zart
21.11.2016
16:40:47

Roman
21.11.2016
16:42:04

Aleksander
21.11.2016
16:42:15
так, а в pylintrc плагины же через запятую указываются ?
что-то не нахожу примера где больше одного в этом поле))

Zart
21.11.2016
16:44:45
>>> class adict(dict):
... __getattr__ = dict.__getitem__
... __setattr__ = dict.__setitem__
... __delattr__ = dict.__delitem__
...
>>> adict(a=1, b=2, c='c')
{'a': 1, 'c': 'c', 'b': 2}
>>> d = adict(a=1, b=2, c='c')
>>> d.a, d.b, d.c
(1, 2, 'c')

Serge
21.11.2016
16:46:19

Zart
21.11.2016
16:46:55
я вон привел же пример дикта, с доступом по аттрибуту, а не индексу

Serge
21.11.2016
16:46:57
это не то ли
https://attrs.readthedocs.io/en/stable/
подозреваю, что написанное тобой, @pragus и сам бы осилил

Zart
21.11.2016
16:48:02

Google

Zart
21.11.2016
16:48:27
за что люди обожают такую декларативщину я хз

Serge
21.11.2016
16:48:28

Zart
21.11.2016
16:48:56
классдекораторы у нас же только в тройке? или в 2.7 их бакпортили?

Serge
21.11.2016
16:48:57
https://glyph.twistedmatrix.com/2016/08/attrs.html

Zart
21.11.2016
16:49:26
глиф крутой, но в ряде случаев он неправ

Serge
21.11.2016
16:50:31
https://attrs.readthedocs.io/en/stable/why.html
это вот ровно namedtuple для диктов:)
$ python2
Python 2.7.12 (default, Sep 29 2016, 13:30:34)
[GCC 6.2.1 20160916 (Red Hat 6.2.1-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo(bar):
... return bar
...
>>> @foo
... class A(object):
... pass
...

Zart
21.11.2016
16:52:46
https://www.python.org/dev/peps/pep-3129/ значит завозили в 3.0 и 2.6
я просто помню что когда-то их еще не было, но людям хотелось 8)
там собсно всё изменение вроде к исправлению грамматики свелось

Eugene
21.11.2016
16:57:16
>>> class adict(dict):
... __getattr__ = dict.__getitem__
... __setattr__ = dict.__setitem__
... __delattr__ = dict.__delitem__
...
>>> adict(a=1, b=2, c='c')
{'a': 1, 'c': 'c', 'b': 2}
>>> d = adict(a=1, b=2, c='c')
>>> d.a, d.b, d.c
(1, 2, 'c')
А как быть если ключи не являются строками? Предвижу ответ: не использовать такое вот. Но всё же.

Zart
21.11.2016
16:57:34
тогда getattr?

Serge
21.11.2016
16:58:16

Eugene
21.11.2016
16:58:43
а было бы клёво
a.1 = 10

Zart
21.11.2016
16:58:52
а, гетаттр таки форсит тип

Serge
21.11.2016
16:59:53
>>> class adict(dict):
... __getattr__ = dict.__getitem__
... __setattr__ = dict.__setitem__
... __delattr__ = dict.__delitem__
...
>>> adict(a=1, b=2, c='c')
{'a': 1, 'c': 'c', 'b': 2}
>>> d = adict(a=1, b=2, c='c')
>>> d.a, d.b, d.c
(1, 2, 'c')
проблема этого кода в том, что он непрозрачен немного. например, ключ 'setdefault' убьет одноименный метод дикта. если от такого класса наследоваться, то все новые методы будут запрещать соответствующие ключи

Zart
21.11.2016
17:00:03
а было бы клёво
a.1 = 10
>>> 0.0.real
0.0
>>> 0.real
File "<stdin>", line 1
0.real
^
SyntaxError: invalid syntax
>>> (0).real
0

Google

Serge
21.11.2016
17:00:09

Zart
21.11.2016
17:00:21

Eugene
21.11.2016
17:00:23
Да это то понятно, то не сработает

Zart
21.11.2016
17:01:01
поэтому в питоне деление на дикт/лист довольно однозначное и по типу и синтаксису

Serge
21.11.2016
17:01:39

Zart
21.11.2016
17:03:11
угу. хотя нюансы сишной реализации порой вылазят

Roman
21.11.2016
17:05:24
Слушайте, а вызов сишного кода отпускает gil?

Zart
21.11.2016
17:05:52
если там указано отпустить, то да
https://docs.python.org/3/c-api/init.html#thread-state-and-the-global-interpreter-lock см. пример с Py_BEGIN_ALLOW_THREADS макросом

Eugene
21.11.2016
17:10:05
Слушайте, а вызов сишного кода отпускает gil?
Только если явно сказать об этом. Это делается, например в numpy. Мы в своих обёртках тоже так делаем. Но важно не обращаться ни к каким питонячим структурам и функциям с отпущенным GIL, иначе всё упадёт

Zart
21.11.2016
17:11:17
nogil в ситоне афаир

Tatiana
22.11.2016
10:25:02
не сочтите за флуд )

Serge
22.11.2016
10:54:21
опечатка.
насовместимость
вторая
писав

Vitali K.
22.11.2016
10:55:30
Наверное пыхер рисовал

Serge
22.11.2016
10:55:41
ну короче, я бы пошарил, но с опечатками не буду:)
@zartsoft сглазил. у меня в проекте появился файл constraints.in :)

Vitali K.
22.11.2016
10:58:28

Serge
22.11.2016
10:58:39
сам
потому что вот https://aws.amazon.com/ec2/faqs/#longer-ids

Google

Serge
22.11.2016
11:00:15
пора бы переехать на новые айдишники

Vitali K.
22.11.2016
11:00:37
а я забыл что это constraints.in
что-то не гуглится

Serge
22.11.2016
11:01:50
pip install --help

Vitali K.
22.11.2016
11:02:05
“Constraints files are requirements files that only control which version of a requirement is installed, not whether it is installed or not”
“There is one key difference: Including a package in a constraints file does not trigger installation of the package.
”
вот это видимо

Serge
22.11.2016
11:09:22
ну да

Vitali K.
22.11.2016
11:11:34
Правильно ли я понимаю что зависимости пэкэджей указанных в requirements.txt будут ограничены сonstraints файлом?

Serge
22.11.2016
11:12:07
версии, а не зависимости

Admin
ERROR: S client not available

Vitali K.
22.11.2016
11:12:27
версии зависимостей ага
а не. я запутался
requirements.txt
pkg=2.0
constraints.txt
pkg=1.0
поставится 1.0?
Сорян что напрягаю) Сам наверн потом прочитаю) ахаха

Serge
22.11.2016
11:15:20
не знаю, скорее всего будет конфликт
как с двумя -r

Zart
22.11.2016
11:15:27
инвалид синтакс будет скорее всего
это вам не билдаут

Serge
22.11.2016
11:15:42
можно же два -r написать, если версии конфликтуют, оно упадет. причем по моему сейчас оно падает даже если просто один и тот же пакет в двух -r упомянут

Google

Zart
22.11.2016
11:18:01
с чего это?

Serge
22.11.2016
11:18:05
ну и я делаю вот так:
$ pip install --upgrade -r requirements.in -c constraints.in
$ pip freeze -r requirements.in > requirements.txt
а на целевых системах уже
pip install --upgrade -r requirements.txt
с чего это?
ну вот у меня такое есть и приходится по очереди с разными файлами запускать

Zart
22.11.2016
11:18:44

Serge
22.11.2016
11:20:14
а зачем вот это делать?
потому что в .in написано или без версии или с границами
а в .txt нагенерено один раз для релиза с == и в этом релизе других версий ни в докере, ни на тестах, ни на стейджинге уже не будет, даже если выйдут новые версии, которые удовлетворяют условиям в .in
И — идемпотентность

Zart
22.11.2016
11:20:46
м...
я слегка о другом

Serge
22.11.2016
11:21:50
ну и вот у меня вот так в итоге
$ cat requirements.in
ansible==2.1.3.0
awscli
boto
$ cat constraints.in
awscli>=1.10.2
boto3>=1.2.1
botocore>=1.3.24
boto>=2.42.0

Zart
22.11.2016
11:21:53
у тебя джангокод + вот эти вот файлики
сетап.пи есть?

Serge
22.11.2016
11:22:22
а в .txt куча всего что установлено по зависимостям с жестко закрепленными версиями

Zart
22.11.2016
11:23:12
откуда такое заблуждение?

Serge
22.11.2016
11:23:22
и "джангокод" код у меня в одном из 12 процессов только:)

Zart
22.11.2016
11:24:23
что-то у меня нет желания вникать в чужой деплой

Serge
22.11.2016
11:24:37
откуда такое заблуждение?
ну потому что смысла в них нет;) есть код, копируешь, ставишь к нему зависимости, оно работает.
разницы с setup.py никакой, только питонщину разводить в нем, вместо декларативного requirements.txt

Zart
22.11.2016
11:25:06
я идею с .in понял, чтобы разнести общие и зафризенные

Serge
22.11.2016
11:25:15
и еще вот этот вечный трах со статикой в пакете
setup.py не нужен, пока ты не распространяешь код через pypi, даже внутренний

Zart
22.11.2016
11:26:04

Serge
22.11.2016
11:26:24

Zart
22.11.2016
11:26:33
чтобы ставить из пакетов чтолибо никакого pypi не нужно о.О