Sergey
21.09.2017
09:58:39
Marco
21.09.2017
09:59:20
понимаю что к воркерам это не относится, и речь лишь про сам supervisord, но в 2017 году "does not work on Python 3" как-то очень вызывающе звучит
Google
Eugene
21.09.2017
10:02:08
Есть ещё circus
Danil
21.09.2017
10:02:09
Marco
21.09.2017
10:06:42
А systemd не умеет запускать процессы по количеству ядер? Channels воркерам ведь кроме редиса вообще ничего не нужно - входящие соединения они не слушают.
Aleksander
21.09.2017
10:11:29
Danil
21.09.2017
10:12:30
Sergey
21.09.2017
10:18:27
Marco
21.09.2017
10:19:22
Danil
21.09.2017
10:19:53
Robert
21.09.2017
10:20:52
Здравствуйте. Кто-нибудь работал с Orator ORM?
Danil
21.09.2017
10:21:53
spb_python_bot
21.09.2017
10:21:53
import __this__
The Zen of SPb Python Chat
(Inspired by "The Zen of Python, by Tim Peters")
- Short introduction of yourself is better than "hello".
- Link to gist is better than source paste.
- One long message is better than many short.
- Editing the message is better than correcting via another one.
- Staying on topic is better than offtopic.
- Good topic is worth discussing though.
- Unless it is started by a link to Habrahabr.
- Politeness counts.
- Bad mood is not a good reason to break the rules.
- Don't ask to ask just ask.
- Text message is better than voice message.
- Unless it is voice conference.
- Git repos are one honking great idea — let's do more of those!
Danil
21.09.2017
10:22:36
Robert
21.09.2017
10:23:48
Объясню проблему. Почему-то Orator ORM пытается подключиться к БД от имени root без пароля.
Google
Robert
21.09.2017
10:24:36
Модель выглядит так:
Danil
21.09.2017
10:24:53
Robert
21.09.2017
10:25:20
from orator import Model
from orator import DatabaseManager
config = {
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'somedb',
'user': 'someuser',
'password': 'somepass',
'prefix': ''
}
}
db = DatabaseManager(config)
Model.set_connection_resolver(db)
class Websites(Model):
__table__ = 'vhosts'
__fillable__ = [
'userid',
'mainname',
'charset',
'index',
'email',
'php',
'node'
]
__timestamps__ = False
__primary_key__ = 'unid'
Sergey
21.09.2017
10:25:25
Danil
21.09.2017
10:25:32
spb_python_bot
21.09.2017
10:25:33
#pep8
https://www.python.org/dev/peps/pep-0008/
Sergey
21.09.2017
10:25:49
?
Robert
21.09.2017
10:26:31
Импортирую модельв контроллер:
from models.Websites import Websites
И затем пытаюсь получить все сайты
hosts = Websites.all()
Ошибка:
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)")
В чём может быть проблема?
Т.е. Orator ORM игнорирует указанные мною значения логина и пароля
Danil
21.09.2017
10:31:37
надо в DatabaseManager капать, кстати, попробуй для начала из этого же файла сделать Websites.all()
Robert
21.09.2017
10:36:13
Если в том же файле это сделать, то всё работает
class Websites(Model):
__table__ = 'vhosts'
__fillable__ = [
'userid',
'mainname',
'charset',
'index',
'email',
'php',
'node'
]
__timestamps__ = False
__primary_key__ = 'unid'
print(Websites.all().to_json())
root@dartp52:~/api/models# python3.6 Websites.py
[]
b0g3r
21.09.2017
10:38:53
что-то ты не договариваешь
Google
b0g3r
21.09.2017
10:39:01
from orator import Model
from orator import DatabaseManager
config = {
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'somedb',
'user': 'someuser',
'password': 'somepass',
'prefix': ''
}
}
db = DatabaseManager(config)
Model.set_connection_resolver(db)
class Websites(Model):
__table__ = 'vhosts'
__fillable__ = [
'userid',
'mainname',
'charset',
'index',
'email',
'php',
'node'
]
__timestamps__ = False
__primary_key__ = 'unid'
это один файл или несколько?
Robert
21.09.2017
10:40:01
Не совсем понял Ваш вопрос. Я в модели импортирую классы DatabaseManager и Model
И насколько я понимаю, это один файл
Который я потом подключаю в контроллере
Roman
21.09.2017
10:52:51
Robert
21.09.2017
10:56:02
File "testcontroller.py", line 1, in <module>
from models.Websites import Websites
ModuleNotFoundError: No module named 'models'
При попытке запуска файла ~/api/controllers/testcontroller.py получаю такую ошибку
b0g3r
21.09.2017
10:56:52
а как запускаешь?
Robert
21.09.2017
10:57:07
Модель лежит в ~/api/models/Websites.py
а как запускаешь?
cp@srv:~/api/controllers$ python3.6 testcontroller.py
Traceback (most recent call last):
File "testcontroller.py", line 1, in <module>
from models.Domains import Domains
ModuleNotFoundError: No module named 'models'
b0g3r
21.09.2017
10:59:53
ну всё верно, чтобы models был виден - нужно запускать из api
~/api$ python 3.6 -m controllers.testcontoller
но вообще это предмет разговора для @ru_python / @ru_python_beginners
Robert
21.09.2017
11:04:00
Сделал как Вы сказали - вернулся к ошибке
File "/usr/local/lib/python3.6/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)")
Dmitry
21.09.2017
11:05:46
выведи на печать конфиг. судя по всему он не цепляется в этом случае
Robert
21.09.2017
11:07:59
Всё работает, если определить конфиг в контроллере...
b0g3r
21.09.2017
11:08:28
Не, без исходного кода здесь сложно по обрезкам так думать чего там не так
Dmitry
21.09.2017
11:09:07
Robert
21.09.2017
11:11:28
Вот как работает:
Google
Robert
21.09.2017
11:11:39
from dbconfig import config
from orator import DatabaseManager, Model
from models.Domains import Domains
db = DatabaseManager(config)
Model.set_connection_resolver(db)
class Site:
@staticmethod
def getall():
print(Domains.all().to_json())
Site.getall()
dbconfig.py:
b0g3r
21.09.2017
11:12:06
models/Domains.py в студию
Sergey
21.09.2017
11:12:31
Не в студию, а на gist :(
Robert
21.09.2017
11:12:35
from orator import Model
class Domains(Model):
__table__ = 'domain'
__timestamps__ = False
__primary_key__ = 'unid'
__fillable__ = [
'mainname',
'fullname',
'type',
'userid',
'sub',
'vhost',
'https',
'node']
b0g3r
21.09.2017
11:13:03
регистрируй конфиг при запуске приложения в entry-point, а не в файлах моделей и будет тебе счастье
Если у тебя в файле a.py что-то происходит (например, глобально регистрируется конфиг опатора), но этот файл не импортируется и не запускается - то чуда не произойдет
сейчас, очевидно - у тебя где-то регистрируется конфиг, где-то нет, поэтомы ты костылишь то тут, то там
Sergey
21.09.2017
11:13:32
Robert
21.09.2017
11:30:52
Как вариант - во все контроллеры добавить config и подключение к БД
b0g3r
21.09.2017
11:31:03
один раз - в entry-point (я ж правильно называю?)
Sergey
21.09.2017
11:31:33
Robert
21.09.2017
11:32:17
Не совсем понял, что Вы имеете ввиду под entry-point
Всё приложение представляет собой API, который запускается через файл handler.py. Это, насколько я понимаю, и есть entry-point
b0g3r
21.09.2017
11:34:15
Именно!
Robert
21.09.2017
11:34:19
И в нём я должен прописать подключение к БД, которое будет общим для всех моделей и контроллеров?
b0g3r
21.09.2017
11:34:58
Можно необязательно в нём, можно туда импортировать модуль/функцию с регистрацией
Robert
21.09.2017
11:59:11
Спасибо большое
Evgeny
21.09.2017
12:02:31
Всем привет! #job Ищем ещё двух (джуна и мидла) https://moikrug.ru/vacancies/1000036558.
Andrey
21.09.2017
12:03:47
Что это за кнжка кстати
Google
b0g3r
21.09.2017
12:04:12
На следующей фотке ссылка на автора
Sergey
21.09.2017
12:07:20
Andrey
21.09.2017
12:07:42
Насколько я понял, это два скетча, а не целая книга
Но всё равно милота
Ilya
21.09.2017
12:12:06
Chikiro
21.09.2017
12:13:29
Скорее всего это не книжка, а скетчбук
Sergey
21.09.2017
12:16:22
Ilya
21.09.2017
12:17:10
эх... вообще или в сети? надо к автору напрямую, видимо, обращаться!
Sergey
21.09.2017
12:18:15
https://twitter.com/girlie_mac/status/905270297128865792
Ну вот первый твит, от шестого сентября, второй — ответом на первый, десятого :D
Andrey
21.09.2017
12:19:12
Я еще знаю в таком стиле - manga guide to databases и https://jvns.ca/zines/
Ilya
21.09.2017
12:19:31
https://twitter.com/b0rk