Посты с тэгом pylons


Высоконагруженные сайты и приложения на Python / Django (29 проектов)


Наша компания довольно давно занимается разработкой больших веб-приложений на Python / Django. В рунете крайне мало информации об этом замечательном языке программирования и фремворке на его основе. Мы решили исправить эту ошибку и рассказать о популярных высоконагруженных сайтах на этой технологии, а также дать много интересных технических подробностей. Для удобства сравнения сайтов между собой мы приводим еще и немного статистики к каждому из проектов. В целом сайтов на Python / Django, конечно, очень много в мире, мы охватим только наиболее интересные по нашему мнению.

Небольшая таблица известных проектов (на основе данных http://builtwith.com/), кликабельно:
Читать дальше →


Тестируем ARM платформу Marvel Armada XP как хостинг для Python проекта


Благодаря GlobaTel смог получить на тест один из серверов (модулей) как из этой статьи Сервер на ARM? Made in Russia!. Как вы понимаете хостинг на ARM, а не набившем оскомину x86, это как минимум свежо и возможно будет модно. Спасибо GlobaTel.

В этой заметке я не хочу сильно подымать тему производительности (но она будет), куда интереснее посмотреть насколько безпроблемно заведётся всё ПО моего проекта. Разворачивал я только ПО, базу картинок я никуда не перемещал. Так что под катом anime-picures.net т.е. nginx, Python+Pylons+SQLAlchemy, PostgreSQL, Memcached, Redis.
Сразу оговорюсь — заметка будет не последней, это только первое впечатление.





Перевод шаблонов Jinja в Pylons


Все точно также как и с mako, "Но есть нюансы"©
Добавьте в setup.py
    package_data={'myproject': ['i18n/*/LC_MESSAGES/*.mo']},
    message_extractors={'myproject': [
            ('**.py', 'python', None),
            ('templates/**.html', 'jinja2', None),
            ('public/**', 'ignore', None)]},
Добавьте в lib/base.py
from pylons.i18n.translation import _, ungettext
И что то типа того в config/environment.py
    # Create the Jinja2 Environment
    config['pylons.app_globals'].jinja2_env = Environment(loade


Pylons обработка csv с веб формы (метод POST)

Небольшой "хинт" как при помощи Pylons обрабатывать CSV файлы, отправленные из формы.
Создаем шаблон

<form action="" method="POST" enctype="multipart/form-data">
CSV file: 

</form>
<table class="simpletable">
{% for data in c.data %}
<tr>
<td>{{ data[0] }}</td>
<td>{{ data[1] }}</td></tr>
{% endfor %}
</table>

Метод контроллера выглядит как то так
# coding=utf8
import pylons
import csv

from cStringIO import StringIO
from pylons import request, response, session, tmpl_context as c, url
from myproject.lib.base import BaseController, render

class CsvController(BaseController):

    def index(self):
        data = request.POST.get('csvfile', '')
        if data:
            data = data.value
        else:
            return render("/example/csv/index.html")

        f = StringIO(data)

        c.data = []
        for row in csv.reader(f):
            c.data.append((row[0], row[5]))

      


Pylons система плагинов для своего проекта (yapsy)

При проектировании любого проекта, через определенное время, встает проблема маштабируемости, конечно если вы не пишите сайт-визитку или что то подобное. Проект может состоять из одного большого монолитного ядра с множеством контроллеров, сотнями или даже тысячами таблиц и бессчетным количеством разных шаблонов, библиотек итд итп. Под ядром подразумевается та часть проекта(pylons), которую либо нельзя изменить совсем, либо это потребует очень больших усилий. Для того что бы создать гибкий и легко масштабируемый веб(и не только) проект, необходимо иметь небольшое ядро, которое будет выполнять минимальный функционал соответствующий логически завершенной программе. Остальные функции, пусть даже улучшающие программу, нужно выносить за пределы ядра. Вообще я знаю только два способа решения этой проблемы:

  1. это создание API;
  2. создание подключаемых модулей(плагинов).

В этой статье рассмотрим систему плагинов. Для работы понадобится очень неплохая библиоте


Скрипты работающие в окружении проекта на Pylons

Иногда необходимо написать скрипт который выполняется из консоли и использует окружение проекта на Pylons. Копипастю простой пример с pylonshq. Так-как там есть привычка периодически удалять информацию.

import optparse

import pylons
from paste.deploy import appconfig

from YOURAPP.config.environment import load_environment


if __name__ == '__main__':
    option_parser = optparse.OptionParser()
    option_parser.add_option('--ini',
        help='INI file to use for pylons settings',
        type='str',
        default='development.ini')
    options, args = option_parser.parse_args()

    # Initialize the Pylons app
    conf = appconfig('config:' + options.ini, relative_to='.')
    load_environment(conf.global_conf, conf.local_conf)

    # Now code can be run, the SQLalchemy Session can be used, etc.
    ....


OpenStreetMap, Геокодирование и автодополнение адреса в строке поиска (как у гугла) с помощью Яндекс API :)

Геокоди́рование — процесс назначения географических идентификаторов (таких как географические координаты, выраженные в виде широты и долготы) объектам карты и записям данных.
Например, геокодированием является назначение координат записям, описывающим адрес (улица/дом) или фотографиям (где было сделано фото) или IP-адресам, или любой другой информации, имеющей географический компонент. Геокодированные объекты могут быть использованы в


Как поднять demo версию проекта на paster + virtualenv в Debian

Иногда необходимо поднять демо версию своего проекта для тестов. Склонируем наш git проект на сервер где будет демо

git clone --bare ~/myproject ssh://uralbash@myserver/~/my_project.git
Проект склонируется в домашнюю директорию сервера myserver. Ключ --bare означает что клон предназначен только для push или pull т.е. все коммиты мы будем делать у себя локально а потом пушить на сервак. Далее напишем скрипт который будет из нашего bare репозитария создавать проект для запуска демки
rm -r /home/uralbash/my_project
git clone /home/uralbash/my_project.git /home/uralbash/my_project
После этого создаем virtualenv окружение (/home/uralbash/mypythonenv/) и добавляем скрипт запуска в /etc/init.d/my_project.sh


FormAlchemy KeyError: "Key not found: "

Ошибка в FormAlchemy типа KeyError: "Key not found: u'Task--super_task_id'" лечится обновлением

pip install formalchemy --upgrade
При этом новая версия подтянет бетта версию webob 1.2 с которым pylons 1 еще не работает. Откатимся
pip install webob==1.1.1
Ошибка должна исчезнуть, вот обсуждение google groups


готовим Pylons + WTForms

WTForm простая, но довольно удобная библиотека для создания форм. И еще WTForm очень похожа на формы в Django - одно из немногово что в джанге сделано хорошо. Посмотрим как это работает с Pylons. Для удобства будем хранить формы отдельно
|+config/
|+controllers/
|~forms/
| |~mycontroller/
| | |-__init__.py
| | `-equipments.py
| |+validators/
| `-__init__.py
Создаем форму для редактирования оборудования equipments.py
from myapp.model.meta import Session as s
from myapp.model.mymodel import EquipmentType
from wtforms import Form, TextField, validators
from wtforms.ext.sqlalchemy.fields import QuerySelectField

# Выбор всех разновидностей оборудования для списка type в форме
def all_equipment_types():
return s.query(EquipmentType).all()

class EditForm(Form):
ip = TextField('ip address')
netmask = TextField('netw