Size: a a a

2019 May 12

D

Dmitry in SPb Python
--- no python application found, check your startup logs for errors ---
источник
2019 May 13

SM

Serge Matveenko in SPb Python
Dmitry
--- no python application found, check your startup logs for errors ---
во-первых, для локального запуска можно вполне использовать встроенный в uwsgi http server
во-вторых, префикс в app.register_blueprint лучше указывать без слэша в конце. там же вьюшка внутри / путь ждет, наверняка, а это уже второй получается
в-третьих, я бы просто сделал вьюшку без всякого блюпринта для проверки, чтобы хоть что-то видно было на / и было понятно, что именно app не видно
в-четвертых, можно отдать uwsgi импортить модуль, а не показыать тупо файл

с учетом этого, конфиг можно привести к примерно такому виду

[uwsgi]
http-socket = :8000
manage-script-name = True
mount = /=app:app
callable = app
источник

SM

Serge Matveenko in SPb Python
Dmitry
Вызов uwsgi:
uwsgi ./socket-uwsgi.ini

socket-uwsgi.ini:
[uwsgi]

socket    = 0.0.0.0:9000
protocol  = uwsgi
wsgi-file = app.py
callable  = app

flask-приложение (app.py):
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

from .config import db_host, db_name, db_user, db_password

from .routes.list import list
from .routes.book import book


app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://{}:{}@{}/{}".format(db_user, db_password, db_host, db_name)

db = SQLAlchemy(app)


app.register_blueprint(list, url_prefix="/list/")
app.register_blueprint(book, url_prefix="/book/")
О! А команда вроде как должна быть
uwsgi --ini ./socket-uwsgi.ini
источник

D

Dmitry in SPb Python
Serge Matveenko
О! А команда вроде как должна быть
uwsgi --ini ./socket-uwsgi.ini
Я нашёл решение. В приложении было несколько ошибок, поэтому uwsgi не начинал его хостить.
источник

D

Dmitry in SPb Python
Ошибки были в относительных и циклических импортах.
источник

E

Eugene in SPb Python
Dmitry
Ошибки были в относительных и циклических импортах.
Что-то я в последнее время слишком часто вижу, что люди сталкиваются с проблемами импорта модулей в питоне. Недавно товарищ мне весь мозг проел тем, что у него "импорты не работали", потому что он всё делал неправильно, вообще не понимая, как работает механизм импортов.

Похоже, что эта проблема реально существует у новичков.
источник

SM

Serge Matveenko in SPb Python
я делал докладик про питон пару лет назад, так вот там оказывается серия ответов на вопросы офигенная получилась. я продолжаю на них чуть ни раз в неделю отвечать.
теперь буду туда посылать людей:)
до сих пор готов подписаться под каждым словом этого пацана;)
вот отсюда https://youtu.be/OL9_HaWHOI4?t=3768
источник

S

Stan in SPb Python
Я тут задумался, насколько корректно такое поведение?
-> % python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = ""
>>> s[0]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[:1]
''
>>> s[:1000]
''


Почему у пустой строки может существовать подстрока произвольной длины и равна она пустой строке? Выглядит нелогично.
источник

SM

Serge Matveenko in SPb Python
Stan
Я тут задумался, насколько корректно такое поведение?
-> % python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = ""
>>> s[0]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[:1]
''
>>> s[:1000]
''


Почему у пустой строки может существовать подстрока произвольной длины и равна она пустой строке? Выглядит нелогично.
потому что
>>> s1 = '123'                                                                  
>>> ss = ''                                                                    
>>> ss[:1000]                                                                  
''
>>> s1[:1000]                                                                  
'123'
>>> ss[0:1000]                                                                  
''
>>> ss[3:1000]                                                                  
''
>>> s1[3:1000]                                                                  
''
источник

SM

Serge Matveenko in SPb Python
Stan
Я тут задумался, насколько корректно такое поведение?
-> % python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = ""
>>> s[0]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[:1]
''
>>> s[:1000]
''


Почему у пустой строки может существовать подстрока произвольной длины и равна она пустой строке? Выглядит нелогично.
это slice и с некоторыми параметрами он пустой для некоторых строк
для пустых строк он пустой с любыми параметрами
источник

S

Stan in SPb Python
Serge Matveenko
потому что
>>> s1 = '123'                                                                  
>>> ss = ''                                                                    
>>> ss[:1000]                                                                  
''
>>> s1[:1000]                                                                  
'123'
>>> ss[0:1000]                                                                  
''
>>> ss[3:1000]                                                                  
''
>>> s1[3:1000]                                                                  
''
Но зачем разрешать ссылаться на несуществующие элементы? Я приблизительно понимаю, когда это может быть полезно и удобно, но выглядит как будто некорректно.
источник

S

Stan in SPb Python
Serge Matveenko
это slice и с некоторыми параметрами он пустой для некоторых строк
для пустых строк он пустой с любыми параметрами
Спасибо) Но это скорее "что происходит", а не "почему", а меня интересует второе.
источник

DA

Dmitry Alimov in SPb Python
reduced to len(s) if they are greater
источник

DA

Dmitry Alimov in SPb Python
by design)
источник

SM

Serge Matveenko in SPb Python
Stan
Спасибо) Но это скорее "что происходит", а не "почему", а меня интересует второе.
так устроен slice, чтобы не ломалось
>>> a = [1,2,3]                                                                 
>>> a[4:6]                                                                      
[]
источник

SM

Serge Matveenko in SPb Python
Stan
Спасибо) Но это скорее "что происходит", а не "почему", а меня интересует второе.
ну т.е. пустой слайс и означает, что ты не попал ни в один элемент им.
то, что оно не падает помогает работать с векторами значений и не падать
источник

KM

Kristina Mironova in SPb Python
в учебнике питон они называют это "элегантной" работой со срезами)
источник

DI

Danil Ivanov in SPb Python
Хорошо что хоть обращению по индексу через [] в случае отсутствия элемента не возвращает None )
источник

SM

Serge Matveenko in SPb Python
Danil Ivanov
Хорошо что хоть обращению по индексу через [] в случае отсутствия элемента не возвращает None )
ну, это уже было бы сменой типа
источник
2019 May 14

D

Dmitry in SPb Python
Привет. Кто-нибудь работал с SQLAlchemy? Я использую declarative_base, не могу создать таблицы для моделей. Вызов создания таблиц для конкретных моделей работает, а для всех моделей нет.

database.py:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

from config import db_host, db_name, db_user, db_password


engine = create_engine("mysql://{}:{}@{}/{}".format(db_user, db_password, db_host, db_name), convert_unicode=True, echo=True)
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()


def init_db():

   # import all modules here that might define models so that
   # they will be registered properly on the metadata.  Otherwise
   # you will have to import them first before calling init_db()

   from models.book import Book

   Base.metadata.create_all(bind=engine) # не работает
   Book.__table__.create(bind=engine) # работает


if __name__ == "__main__":
   init_db()

models/book.py:
from sqlalchemy import Column, Integer, String
from database import Base


class Book(Base):

   __tablename__ = "books"

   id = Column(Integer, autoincrement=True, primary_key=True)
   title = Column(String(80), nullable=False)

   def __repr__(self):
       return "<Title: {}>".format(self.title)
источник