
Igor
12.10.2016
06:47:43
т.е. helpers.py:
import sqlite3
import math
def cool_stuff(x, y):
return cos(x) / sin(y)
def save_data(data): # псевдокод, не помню как там с sqlite3 работать
sqlite3.open('file.db')
sqlite3.command('INSERT INTO ...')
app.py:
from helpers import cool_stuff, save_data
if __name__ == '__main__':
save_data('hello world')
```
в итоге тебе не надо там писать import math, import sqlite3 и еще кучу всего, надо написать только импорт одной функции
это облегчит тебе боль, возможно

Zart
12.10.2016
06:48:37
и как видно из примера - 1) от кучи импортов это один хрен не избавляет 2) просто появляется фирма-однодневка посредник

Google

Igor
12.10.2016
06:48:59

Pavel
12.10.2016
06:49:22

Igor
12.10.2016
06:50:54

Zart
12.10.2016
06:50:54

Igor
12.10.2016
06:51:20
я идиот и мне стоит поменьше здесь пиздеть

Zart
12.10.2016
06:52:01
единственное что как-то может сэкономить список импортов - это звёздочки

Pavel
12.10.2016
06:52:24

Igor
12.10.2016
06:52:28
угу, но на этом тоже можно напороться

Zart
12.10.2016
06:52:28
но их надо применять строго по предписанию врача

Pavel
12.10.2016
06:53:40
если импорты такие большие, что смущают взгляд, а используемый редактор на может их скрыть, то стоит разбить файл на три, в которых будут мелкие импорты.

Igor
12.10.2016
06:53:56
это как делать
list = [1, 2, 3]
а потом хуяк
list2 = [4, 5, 6, 4]
list(set(list2))
и иди разбирайся, что ты сделал не так

Pavel
12.10.2016
07:01:11
это как делать
list = [1, 2, 3]
а потом хуяк
list2 = [4, 5, 6, 4]
list(set(list2))
и иди разбирайся, что ты сделал не так
а не надо называть переменную list (или list2). И не потому что есть такое слово, а потому что это тупо.
это список чего? если какие-то айдишники, то пусть будет ids=[1,2,3]. Если входные данные для какой-то задачи, то input_data=[1,2,3] (например). Ну и т.п.

Igor
12.10.2016
07:02:01
справедливо :) но чаще всего такое делал по глупости на своей памяти в параметрах в функции
а в этом случае это как раз оправдано

Google

light
12.10.2016
07:02:45
люди

Igor
12.10.2016
07:02:48
def print_names(list):
понятно же, что список имен. но можно и "names" назвать, ты прав

light
12.10.2016
07:02:50
есть задача
хелп ми плиз
дан массив, например
[3, 3, 7, 2, 2, 8]
надо привести его к виду [9, 7, 4, 8]
т.е если произведение двух соседних членов меньше 10 - то их надо перемножить и ити дальше

Zart
12.10.2016
07:03:14
file = 'foo'
min = 10
max = 20
list = [1, 2]
...

Bulatbulat48
12.10.2016
07:03:49
Спасибо

Igor
12.10.2016
07:03:49

light
12.10.2016
07:03:49
'''
for k, i in enumerate(mass):
for j in mass[1:]:
if i*j < 10:
mass.pop(k)
mass[k] = i * j
'''

Igor
12.10.2016
07:03:58

Pavel
12.10.2016
07:04:05

Zart
12.10.2016
07:04:53

light
12.10.2016
07:05:06

Igor
12.10.2016
07:05:47
по крайней мере, не с первого раза; и только если кто-то постоянно будет следить за кодом и хуесосить его
ну или если по умолчанию есть перфекционизм какой-то

Johnnie
12.10.2016
07:14:25
помогите плз по алхимии :) есть две сущности. заказчик и исполнитель. набор полей одинаковый (фамилия, имя, отчество). разные только роли у них. как правильно сделать модели? я вижу это как модель с ФИО и две модели, наследующиеся от нее, с дефолтными значениями роли. только непонятно как быть с этими ролями (точнее их названиями) при выводе например в SelectField?

Igor
12.10.2016
07:15:12
сделать абстрактную модель Person (с ФИО), от нее наследоваться заказчику иисполнителю
а что с selectfield?

Google

Johnnie
12.10.2016
07:15:34
ну например я пока набросал так:
class Employee(Base):
first_name = Column(String(30), nullable=False)
last_name = Column(String(30), nullable=False)
middle_name = Column(String(30), nullable=True)
role_id = Column(Integer, nullable=False)
def __init__(self, first_name, last_name, middle_name):
self.first_name = first_name
self.last_name = last_name
self.middle_name = middle_name
class Customer(Employee):
def __init__(self, first_name, last_name, middle_name):
super().__init__(first_name, last_name, middle_name)
self.role_id = 'customer'
class Performer(Employee):
def __init__(self, first_name, last_name, middle_name):
super().__init__(first_name, last_name, middle_name)
self.role_id = 'performer'

Zart
12.10.2016
07:15:48
что мешает человеку быть и заказчиком и исполнителем...

Johnnie
12.10.2016
07:16:02
но чую это неправильно, потому что красивое "Заказчик" мне пока не вывести

Zart
12.10.2016
07:16:05
person_id

Johnnie
12.10.2016
07:16:10

Igor
12.10.2016
07:17:28
все равно не понял, в чем проблема
к тому же, в твоем примере проще иметь одну модель Employee
все равно role_id и там и там есть
если role_id - это int, то у тебя должен быть какой-то enum-подобный объект, который будет связывать role_id 1 с customer'ом, а 2 - с performer'ом (например)
тогда при отображении в selectfield можно будет делать что-то вроде такого:
from enum import Enum
class Role(Enum):
customer = 1
performer = 2
class Person(object):
first_name = 'Vasily'
last_name = 'Pupkin'
role_id = 1
my_customer = Person()
print(my_customer.first_name, 'is a', Role(my_customer.role_id).name)
Vasily is a customer

Johnnie
12.10.2016
07:30:29
а если на русском нужно? отдельную таблицу делать с role_id и role_name?

Igor
12.10.2016
07:30:49
ну enum это лишь пример. можно dict
отдельная таблица нахуй не нужна, если у тебя не бдут постоянно редактироваться типы юзеров
roles = {1: 'заказчик', 2: 'исполнитель'}
и потом roles[person.role_id]

Igor
12.10.2016
07:32:43
хоть так, например

Johnnie
12.10.2016
07:39:35
хм, щас так попробую, спасибо :)

Igor
12.10.2016
07:40:01
если нужны все заказччики, то session.query(Person).filter_by(role_id=1)

Johnnie
12.10.2016
07:40:54
ну это я буду пихать в форме как источник данных для selectfield, да?

Igor
12.10.2016
07:41:43
если форма поддерживает реузльтат запроса алхимии, то да
если не поддерживает - то надо будет как-то в list сконвертнуть, скорее всего
тут я не уверен, если честно
у wtforms есть QuerySelectField
погоди, я запутался
ты что хочешь в selectfield отображать?
тип роли для какого-то определенного человека?
(либо заказчик, либо исполнитель)

Google

Johnnie
12.10.2016
07:44:43
"Заказчик" и "Исполнитель"
ну и в просмотре отдельного сотрудника это выводить

Zart
12.10.2016
07:46:01
таблица людей и поле с типом

Igor
12.10.2016
07:46:15
тогда QuerySelectField не нужен, пардон. можно будет указать в форме
role = SelectField('тип сотрудника', choices=roles.items())
где roles - это dict что выше
по идее все само должно будет подцепляться и выбираться

Zart
12.10.2016
07:47:38
олсо легким движением руки и апдейта превращается в пидораса

Igor
12.10.2016
07:48:12

Zart
12.10.2016
07:48:59
тип = заказчик/исполнитель/пидорас
тебе UPDATE TABLE написать?

Igor
12.10.2016
07:49:32

Admin
ERROR: S client not available

Igor
12.10.2016
07:49:36

Johnnie
12.10.2016
07:49:56
пидорасов не планируется :)

Igor
12.10.2016
07:50:09

Johnnie
12.10.2016
08:23:23
а вывод названия как правильно? сейчас у меня в модели только айдишник роли
соот-но при выводе там 1 2
не в шаблоне же ифом шпарить :)
class Employee(Base):
first_name = Column(String(30), nullable=False)
last_name = Column(String(30), nullable=False)
middle_name = Column(String(30), nullable=True)
role_id = Column(Integer, nullable=False)
role = Column(String(30), nullable=False)
def __init__(self, first_name, last_name, middle_name, role_id):
self.first_name = first_name
self.last_name = last_name
self.middle_name = middle_name
self.role_id = role_id
self.role = roles[role_id]
как вариант
но смысла хранить это в БД не вижу

Google

Igor
12.10.2016
08:28:31
сделай property
в классе с моделью
@property
def role(self):
return roles[self.role_id]
должно работать
дикт я бы обозвал, кстати, ROLES
чтобы путаницы меньше было, т.к. он константный

Johnnie
12.10.2016
08:29:54
получилось, спасибо)
да, надо поменять
уникальность вот как проверять только
фамилия+имя+отчество?
или от этого взять md5?
в lowercase

Igor
12.10.2016
08:31:47
уверен, что это все необходимые поля? наверняка пригодилось бы какое-нибудь уникальное типа логина или емейла
и вот по нему уже проверять уникальность

Johnnie
12.10.2016
08:31:55
role = SelectField('Role', choices=[(str(key), value) for key, value in ROLES.items()])
вот так сделал
но я хочу для них справочник, чтобы указывать их в других сущностях

Igor
12.10.2016
08:33:07
ну так items это и есть набор туплов. ну хотя да, в третьем питоне будет генератор
возможно можно list(ROLES.items()) обойтись

Johnnie
12.10.2016
08:33:48
http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.SelectField
как здесь делал

Igor
12.10.2016
08:34:31
ну ок, не спорю :) тем более раз в доке описано
Эта группа больше не существует