Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

Python для новичков » i18n Django » Авг. 28, 2015 17:34:49

Всем привет!
Столкнулся со следующей проблемой при использовании ленивого перевода:
TASK_REPEAT_KEYS = (_('never'), _('daily'), _('weekly'), _('monthly'),)
TASK_REPEAT = dict(zip(TASK_REPEAT_KEYS, range(1, len(TASK_REPEAT_KEYS) + 1)))

В текущем исполнении джанга ругается на django.core.exceptions.AppRegistryNotReady: The translation infrastructure cannot be initialized before the apps registry is ready.
Если отказаться от перевода строк все ОК, непонятное поведение при ленивом переводе.
Кто сталкивался?

Django » Видоизменить настройки для пользователей в админке Django » Авг. 26, 2015 13:01:56

Добрый день! Подскажите, пожалуйста, как реализовать следующее: На страницу выводятся картинки, для каждого пользователя свой набор картинок и свой порядок (какая картинка за какой идет), а также свой макет расположения (в 1 или в 2 колонки, например). У разных пользователей могут использоваться одни и те же картинки. Картинки хранятся физически в виде файлов. Есть модель

class VisualModule(models.Model):
    class Meta: 
        db_table = 'visualmodules'
    visualmodule_img = models.CharField(max_length=200)
    visualmodule_userlogin = models.CharField(max_length=30)
    visualmodule_enabled = models.BooleanField(default=True)
Содержит имя картинки, имя пользователя, которому ее показывать, и показывать/скрывать. Модель для теста, конечно, корявая)

В админку добавляется сейчас, как список обычных статей или т.п.

class VisualModuleAdmin(admin.ModelAdmin):
    list_filter = ['visualmodule_img']
admin.site.register(VisualModule, VisualModuleAdmin)

На странице выводится набор тех картинок, у которых установлен флаг Показывать (visualmodule_enabled). В visualmodules сейчас передаются сразу только те картинки, у которых visualmodule_userlogin == логин текущего пользователя

{% block visualmodule %}
<div class="large-8">
{% for visualmodule in visualmodules %}
    {% if visualmodule.visualmodule_enabled == True %}
        <h4>{{ visualmodule.visualmodule_img }}</a></h4>
        <img src="{% static "img/workplace/" %}{{ visualmodule.visualmodule_img }}" />
        <hr>
    {% endif %}
{% endfor %}
</div>
{% endblock %}

Проблема: через админку неудобно, вернее, невозможно сейчас в таком виде управлять картинками. Плюс невозможно задать порядок отображения. Плюс все картинки в куче, и непонятно, что к какому пользователю относится.

Есть идея перенести эту настройку в настройку Пользователей, т.е. каким-то образом добавить в стандартные настройки каждого пользователя: 1) Выбор отображаемых для этого пользователя картинок: список всех картинок + рядом список отображаемых картинок с возможностью перемещения (стрелки вверх-вниз или что-то в этом роде) для изменения их порядка. И плюс возможность добавить из первого списка во второй, и обратно. 2) Выбор макета для отображения: комбобокс со списом доступных макетов и рядом схематичное изображение каждого макета - как располагаются картинки

Буду признателен за любые подсказки , помощь и советы.

GUI » Background » Авг. 26, 2015 03:56:11

Здравствуйте, подскажите пожалуйста как сделать окно в котором открывается картинка (фон), а прямо поверх этой картинки кнопка? Желательно все с помощью ткинтер и пил

Флейм » HTTP API на Python  » Авг. 22, 2015 13:09:55

Нужен программист.

Желательно:
- опыт программирования с использованием OpenLayers 3.5;
- опыт разработки сервисов.

На данный момент нужно реализовать авторизацию и пару методов HTTP API (клиентскую часть, в виде библиотеки, получить данные и выдать их тем кто вызовет метод). Дальше работу с картами.

Оплата по факту, после каждой функциональной части.

буду благодарен за ссылку на хороший пример по работе с OpenLayers 3.5 и POST/GET запросами в Python.

Web » Проверьте, пожалуйста, правильно ли прочитал код с effectivedjango » Авг. 19, 2015 10:56:39

Доброго времени суток.
Разбирался с примером на effectivedjango.com, с авторизацией пользователей и вывода информации принадлежащей конкретному пользователю. link

пример кода, который заставил долго думать:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class LoggedInMixin(object):
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(LoggedInMixin, self).dispatch(*args, **kwargs)

Собственно пытаясь понять происходящее я пришёл к таким выводам: method_decorator - декоратор, который конвертирует декоратор функций в декоратор методов класса. Ему для конвертации был передан декоратор login_requred, который предназначен для вьюх, и проверяет пользователя на то залогинен он или нет, и если нужно делает redirect на страницу логина. Собственно это строчка @method_decorator(login_required) возвращает декоратор метода класса, в него мы оборачиваем ф-ю dispatch(self, *args, **kwargs), которая теперь умеет проверять наличие логина у пользователя, а так же возвращает/перекрывает метод dispatch(self, request, *args, **kwargs) у насоедованных от generic классов, тем самым защищает от любого request'а нашу class-based view, пока не будет проверен залогинен ли пользователь.

Данный примесный класс применяется следующим образом:

class ListContactView(LoggedInMixin, ListView):
    model = Contact
    template_name = 'contact_list.html'
    def get_queryset(self):
        return Contact.objects.filter(owner=self.request.user)

В итоге мы получаем список контактов, которые создал конкретный пользователь.

Прошу, вас, исправить меня, если я допустил ошибки в размышлениях. А также прошу подсказать, где можно почитать про примесные классы, т.к. по этой теме я нашел лишь в книге Лутца небольшой параграф, и примеры в параграфе строятся на основе предыдущих нескольких параграфов.

Флейм » Список библиотек для парсинга сайтов и обработки данных (Python, PHP, Ruby) » Авг. 18, 2015 15:21:52

Здравствуйте.
Я решил создать список библиотек для парсинга сайта и обработки данных. На данный момент я собрал списки для языков Python, PHP и Ruby.
Со списком для языка Python можно ознакомиться тут: https://github.com/lorien/awesome-web-scraping/blob/master/python.md
И, конечно же, можно форкнуть репу и предложить библиотеку, которая ещё не присутствует в списке.

Django » несмколько XML запросов на одной странице » Авг. 14, 2015 15:41:28

У меня проект на Django и у меня возникла следующая задача: нужно создать форму с несколькими полями. Из заполненных данных формы нужно сформировать 3 xml запроса методом POST на разные адреса, получить 3 xml ответа и вывести результат на страницу.
Подскажите пожалуйста как это лучше всего реализовать это, я так понимаю запросы лучше делать через XMLHTTPREQUEST. Но я так и не понял, можно ли с его помощью сделать сразу несколько запросов.
Заранее благодарен за ответ!

GUI » PyQt5. QTableView + QSqlQuery. Выдрать значение row. » Авг. 14, 2015 10:43:30

Добрый день. Нужно выдрать значение row(QTableView) по id самой записи. Т.е. получаем некий id записи, а потом применяем к ней selectRow(), проблема вся в том, что записи выводятся по фильтру ORDER BY name ASC. Спасибо.

Python для новичков » Параллельный sql запрос  » Авг. 13, 2015 09:04:17

Доброе утро.

Прошу подсказать как можно выполнить параллельный sql запрос используя cx_oracle , threading/asyncio

Python для новичков » scrapy » Авг. 12, 2015 09:22:55

Здравствуйте, подскажите пожалуйста что я делаю не так. У меня есть проект на gjango, и в нет scrapy,по нажатии на кнопку у меня должно распарсивать то что мне надо.
у меня постаянно выбивает ошибку ‘Settings’ object has no attribute ‘update_settings’. Что мне надо сделать?
исползую celary
прилагаю файлы
сelary.py
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings')
from django.conf import settings
app = Celery('main')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

в settings.py
BROKER_URL = 'amqp://guest:guest@localhost//'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

actions.py

BROKER_URL = 'amqp://guest:guest@localhost//'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

tasks.py
from __future__ import absolute_import
from celery import shared_task
from my_scrapy import actions
@shared_task
def run_spider():
    actions.domain_crawl()
my_scrapy.py
import scrapy
from ..items import DmozItem
class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        # "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://localhost:8000/#/note/",
        # "http://localhost:8000/#/note/2/",
        # "http://localhost:8000/#/note/3/",
        # "http://localhost:8000/#/note/category/",
    ]
    def parse(self, response):
        # for h3 in response.xpath('//*[@id="bd-cross"]/span[3]/img').extract():
        #     yield {"desc": h3}
        #
        for a in response.xpath('//a/@href').extract():
            yield {"link": a}

Python для новичков » Получение потока с IP камеры » Авг. 9, 2015 13:01:12

Доброго времени суток. Есть задача сохранения и обработки потока с IP камер. Так как с подобным не сталкивался, почитав форумы остановился на связке Python и Gstreamer. Установил Python Tools под Visual Studio Community 2015 и скачал Gstreamer под Windows. теперь не могу понять, как заставить питон видеть данные компоненты. В Gstreamer имеется папка python2.7 с набором папок и файлов.

Python для новичков » PyCharm. Не выполняется код после правки » Авг. 4, 2015 22:24:32

Доброго времени суток!
Подскажите, пожалуйста, может кто в курсе.
После правки в pycharm кода на python3 и запуска, показывается результат выполнения предыдущего кода.
Например, правлю код оконного приложения, добавляю элемент и запускаю. Ооднако в результате вижу предыдущий вариант окна.
Кто знает, в чем может быть проблема?

Django » Непонятки с thumbnail  » Авг. 2, 2015 21:43:30

Выполнил очистку кеша командой thumbnail clear_delete_all

В файловой системе и базе все потерлось, но при этом на страницах по прежнему ссылка на старый путь и соответственно миниатюра не отображается. Для созданных заново все работает.

Кто нибудь сталкивался с подобным? На просторах пишут, что должны миниатюры перекешироваться, но увы…

P.S. миниатюры пересоздались после перегрузки компа. Похоже где то в кешируется на уровне ПК(так как разные браузеры не давали результата). Может быть неприятный глюк для пользователя. Если кто знает как лечить, поделитесь опытом.

Обсуждение новостей » Необычный модуль fuckit - если хочется жить без Exceptions. » Июль 31, 2015 04:06:41

Страница на PyPi
Код на GitHab

FuckIt.py uses state-of-the-art technology to make sure your Python code runs whether it has any right to or not. Some code has an error? Fuck it.

Если в кратце то модуль позволяет импортировать модули, выполнять функции и методы содержащие в себе ошибки.

Насколько он полезен в реальной жизни неизвестно. да и сомнительно. Как шутка выглядит хорошо. Отдельного внимания может стоить код - используются модули для работы “внутри питона”.

Python для экспертов » Автоматизация действий на сайте(Фриланс) » Июль 29, 2015 22:27:43

Необходимо за вознаграждение.
Модуль для автоматизации действий на сайтах бк марафон и фонбет.
Список действий: залогиниться, разлогиниться, совершить определенную ставку, считать максимум по конкретной ставке, получить остаток на счету.
Кого заинтересовало подробности в почту.

GUI » многопоточность в pyqt  » Июль 28, 2015 12:09:35

Добрый день.
Ситуация следующая:
в обработчик событий PYQT передаю функциию в которой есть использование concurrent.futures и соответсвенно больше одного потока. При генерации события получаю ошибку:
QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)

Как это можно побороть ?

Python для новичков » twisted defer для dataReceived » Июль 28, 2015 10:17:21

Всем привет!

пособите)
есть протокол, в моем случае это ssh channel.SSHChannel из conch.
не могу понять как повесить дефер на событие. К пример отправил команду через

    
def channelOpen(self, data):
self.conn.sendRequest(self, 'exec', common.NS(self.command), wantReply=True).addCallback(self._gotResponse)

ответ прилетает через def dataReceived(self, data)

Для связки с отправителем команды приходится выполнять self.conn.factory.test1(self.id, data).

Может есть более красивые варианты?

GUI » Grid и columns » Июль 27, 2015 17:35:28

Дано:
Две строки с виджетами. Первая строка упаковывается сразу. Вторая - в зависимости от выбора в комбобокс.
row1: combobox(1 колонка), entry(2 колонки), combobox(1 колонка). упаковано grid сразу
row2: 4 combobox(1 колонка). упаковываются по мере необходимости

Проблема:
1.При старте программы первый ряд пакуется с учетом трех колонок:

2. При упаковке второго ряда возникает проблема с геометрией:

3. И только при упаковке всех виджетов, вид окна становится как нужно:


Вопрос:
Как реализовать упаковку первого ряда с учетом 4 колонок?

Код:
import Tkinter as tk
import ttk
############################## MAIN APP GUI SETTINGS
m_min_width = 900
m_min_height = 500
m_x, b_y = 100, 100    #if m_center_win is True xpos, ypos are ignored
m_center_win = True
m_resizable = True
combobox_width = 35
############################## MAIN APPLICATION CLASS
class MainApplication():
    def __init__(self, root):
        self.master = root
        self.master.minsize(m_min_width, m_min_height)
        self.xpos = (self.master.winfo_screenwidth() - m_min_width) / 2
        self.ypos = (self.master.winfo_screenheight() - m_min_height) / 2
        self.master.geometry('+%s+%s' % (self.xpos, self.ypos))
        if m_resizable:
            self.master.resizable(1,1)
        else:
            self.master.resizable(0,0)
        self.createWidgets()
    def ShowHideWidget(self, current_combobox, next_combobox):
        
        def HideAndNull(master, *args):
            for i in args:
                try:
                    i.grid_remove()
                except:
                    i.set('')
    
        def SetAndGrid(master, current_combobox, next_combobox, sub_row, sub_col):
            next_combobox['values'] = sub_cat
            next_combobox.grid(row=sub_row, column=sub_col, sticky='WE', padx=5, pady=5, ipady=2)
        if current_combobox == self.category_combobox:
            HideAndNull(self, self.sub1_category_combobox, self.sub2_category_combobox, self.sub3_category_combobox, self.sub4_category_combobox,
                            self.sub1_category_var, self.sub2_category_var, self.sub3_category_var, self.sub4_category_var)
            if len(current_combobox.get()) > 0:
                SetAndGrid(self, current_combobox, next_combobox, 1, 0)
            else:
                HideAndNull(self, self.sub1_category_combobox, self.sub2_category_combobox, self.sub3_category_combobox, self.sub4_category_combobox,
                            self.sub1_category_var, self.sub2_category_var, self.sub3_category_var, self.sub4_category_var)
                
        elif current_combobox == self.sub1_category_combobox:
            HideAndNull(self, self.sub2_category_combobox, self.sub3_category_combobox, self.sub4_category_combobox,
                        self.sub2_category_var, self.sub3_category_var, self.sub4_category_var)
            if len(current_combobox.get()) > 0:
                SetAndGrid(self, current_combobox, next_combobox, 1, 1)
            else:
                HideAndNull(self, self.sub2_category_combobox, self.sub3_category_combobox, self.sub4_category_combobox,
                        self.sub2_category_var, self.sub3_category_var, self.sub4_category_var)
        elif current_combobox == self.sub2_category_combobox:
            HideAndNull(self, self.sub3_category_combobox, self.sub4_category_combobox,
                        self.sub3_category_var, self.sub4_category_var)
            if len(current_combobox.get()) > 0:
                SetAndGrid(self, current_combobox, next_combobox, 1, 2)
            else:
                HideAndNull(self, self.sub3_category_combobox, self.sub4_category_combobox,
                        self.sub3_category_var, self.sub4_category_var)
                
        elif current_combobox == self.sub3_category_combobox:
            HideAndNull(self, self.sub4_category_combobox, self.sub4_category_var)
            if len(current_combobox.get()) > 0:
                SetAndGrid(self, current_combobox, next_combobox, 1, 3)
            else:
                HideAndNull(self, self.sub4_category_combobox, self.sub4_category_var)
                
        
    def createWidgets(self):
        self.master.grid_columnconfigure(0, weight=1)
        self.master.grid_rowconfigure(0, weight=1)
        self.up_frame = tk.LabelFrame(self.master, text=' Test ')
        self.up_frame.grid(row=0, column=0, sticky='SNEW', padx=5, pady=5, ipady=2, ipadx=2)
        self.up_frame.grid_columnconfigure(0, weight=1)
        self.up_frame.grid_columnconfigure(1, weight=1)
        self.up_frame.grid_columnconfigure(2, weight=1)
        self.up_frame.grid_columnconfigure(3, weight=1)
        self.category_var = tk.StringVar()
        self.category_combobox = ttk.Combobox(self.up_frame, values=cat, state='readonly')
        self.category_combobox.bind("<<ComboboxSelected>>", lambda x:self.ShowHideWidget(self.category_combobox, self.sub1_category_combobox))
        self.category_combobox.grid(row=0, column=0, sticky='WE', padx=5, pady=1, ipady=2)
        self.what2search = tk.Entry(self.up_frame)
        self.what2search.grid(row=0, column=1, columnspan=2, sticky='WE', padx=5, pady=1, ipady=2)
        self.region_var = tk.StringVar()
        self.region_combobox = ttk.Combobox(self.up_frame, state='readonly')
        self.region_combobox.grid(row=0, column=3, sticky='WE', padx=5, pady=1, ipady=2)
        
        
        self.sub1_category_var = tk.StringVar()
        self.sub1_category_combobox = ttk.Combobox(self.up_frame, textvariable=self.sub1_category_var, state='readonly')
        self.sub1_category_combobox.bind("<<ComboboxSelected>>", lambda x:self.ShowHideWidget(self.sub1_category_combobox, self.sub2_category_combobox))
        self.sub2_category_var = tk.StringVar()
        self.sub2_category_combobox = ttk.Combobox(self.up_frame, textvariable=self.sub2_category_var, state='readonly')
        self.sub2_category_combobox.bind("<<ComboboxSelected>>", lambda x:self.ShowHideWidget(self.sub2_category_combobox, self.sub3_category_combobox))
        self.sub3_category_var = tk.StringVar()
        self.sub3_category_combobox = ttk.Combobox(self.up_frame, textvariable=self.sub3_category_var, state='readonly')
        self.sub3_category_combobox.bind("<<ComboboxSelected>>", lambda x:self.ShowHideWidget(self.sub3_category_combobox, self.sub4_category_combobox))
        self.sub4_category_var = tk.StringVar()
        self.sub4_category_combobox = ttk.Combobox(self.up_frame, textvariable=self.sub4_category_var, state='readonly')
        self.sub4_category_combobox.bind("<<ComboboxSelected>>", lambda x:self.ShowHideWidget(self.sub4_category_combobox, self.sub4_category_combobox))
        
cat = ['', 1]
sub_cat = ['', 2]
root = tk.Tk()
app = MainApplication(root)
root.mainloop()

Python проекты » Игра "Атомы" (Головоломка) » Июль 27, 2015 17:23:27

Всем привет! Решил выложить начальную версию своей головоломки.
Игра “Атомы”
Язык программирования: Python 2.7
Жанр: головоломка, логическая

Игра находиться на самой ранней стадии разработки. В данной версии представлена общая идея геймплея.

Описание

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

Цель

Необходимо найти расположение всех атомов.

Правила

Игрок пускает сканирующий луч из любой клетки по периметру игрового поля. Луч может преломиться, либо поглотиться при взаимодействии с атомами. Правила прохождения луча по игровому полю представлены на рисунке 1.

Рисунок 1


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

Рисунок 2


Числа обозначают номер луча. Вход и выход луча обозначаются одинаковыми числами. Если луч никуда не вышел, то он либо поглощён, либо вернулся в точку входа. В этом случае число (номер луча) будет стоять только в точке входа. На основании этих данных вам нужно определить расположение всех атомов.

Чтобы отметить атом, нужно кликнуть левой кнопкой по игровому полю, и клетка поменяет цвет на зелёный. Повторный клик по отмеченной клетке отменяет выбор. Если кликнуть по полю правой кнопкой, то она поменяет цвет на сиреневый. Этим цветом вы можете отмечать клетки, где по вашему мнению нет атомов, и таким образом облегчать себе поиск атомов. Повторный клик по сиреневой клетке меняет цвет клетки на основной цвет игрового поля.

В данной версии необходимо найти 8 атомов.

Другие возможности

Для того, чтобы открыть расположение всех атомов, необходимо кликнуть 3 раза по любой угловой клетке.

Ещё хотелось бы спросить. Встречал ли кто-нибудь подобные игры? Буду благодарен за ссылки.

Ссылка для скачивания: Скачать игру “Атомы”
В архиве лежат и исходники на python, если кому интересно.

UPD 10.08.15, версия 0.0.2
В новой версии каждый 6-ой ход происходит случайное движение любого не найденного атома в случайном направлении на 1 клетку. При движении атомы могут находиться на соседних диагональных клетках. Атомы, которые вы отметили правильно не двигаются.

Ссылка для скачивания прежняя.

Python для новичков » Админка в Django 1.8 » Июль 26, 2015 22:36:58

Как кастомизировать функциональность админки в Django 1.8 (малой кровью)…ото как я понял можно просто копировать целиком модуль и задать свой путь к уже скопированному модулю в настройках приложения.и переписывать его сколько душе угодно…