Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » Посоветуйте годный инструментарий для работы с Active Directory (Python 3.4) » Май 20, 2014 05:17:12

Здравствуйте!
Собственно сабж в названии темы.

Пробовал модуль python3-ldap, но заглох после установки, не хочет работать операция connect.
c = Connection(s, auto_bind = True, client_strategy = STRATEGY_SYNC, user='username', password='password', authentication=AUTH_SIMPLE)
print(s.info) - Ошибка: ldap3.LDAPException: auto_bind not successful

Если есть вещи получше, буду благодарен за совет. Ну или если кто поможет разобраться с этим модулем, так же буду крайне признателен.

Автоматизация бизнеса » Небольшая доработка ПО IP телефонии CDR-Stats на Python » Май 18, 2014 20:29:09

Есть работающий сервер IP телефонии, обслуживающий 40-50 сотрудников, звонков совершается в день огромное количество и все они записываются. Необходимо установить и настроить решение для статистики и прослушивания записанных разговоров. Изначально стоял php скрипт, но в последнее время из-за большой нагрузки он сильно тормозил. В данный момент поставили решение CDR-Stats V2 (http://www.cdr-stats.org) - там есть подробная статистика, но нет ссылок на записанные разговоры.

Необходимо доделать установленное ПО CDR-Stats V2 (добавить ссылки на прослушивание разговоров, поправить внешний вид немного, поправить локализацию)

Django » Django 1.4 и CONN_MAX_AGE » Май 16, 2014 23:29:36

Всем привет. Есть Джанга 1.4 версии, которая открывает пул “ненужных” соединений к MySQL, т.е. открываются коннекты и висят. В 1.6 версии есть CONN_MAX_AGE, которым можно установить время жизни таких коннектов. Есть ли подобная возможность в 1.4 ?

Обновиться до 1.6 нет возможности, выставить таймауты в mysql пока не рассматриваю.

Web » Bottle + Cork "ProgrammingError: SQLite objects created in a thread...." » Май 12, 2014 19:27:42

Добрый вечер.

Пытаюсь настроить аутентификацию в Bottle с помощью Cork.

import bottle
from cork import Cork
from operator import itemgetter
from py2neo import neo4j, node, cypher
from pip._vendor.colorama import initialise
<...> #здесь метод query задаётсяю это к делу отношения не имеет
from cork.backends import SQLiteBackend
try:
    sqldb = SQLiteBackend('example.db', initialize=True)
except:
    sqldb = SQLiteBackend('example.db', initialize=False)
aaa = Cork(backend=sqldb)
authorize = aaa.make_auth_decorator(fail_redirect="/login", role="user")
@bottle.route('/')
@bottle.view('login')
def index():
    #return "<a href='/person_list'>List of persons</a>"
    return
@bottle.route('/person_list')
@bottle.view('person_list')
def list():
    html_list = str(aaa.current_user) + "<ul>"
    persons = query("MATCH (n:person) RETURN (n) ORDER BY n.name")
    for person in persons:
        html_list += bottle.template('person_list_entry', id=person._id, name=person['name'], nickname=person['nickname'])
    html_list += '</ul>'
    return dict(list=html_list)
@bottle.post('/login')
def login():
    username = bottle.request.forms.get('username')
    password = bottle.request.forms.get('password')
    aaa.login(username, password, success_redirect='/person_list', fail_redirect='/person_list') 

в результате в логах апача имеем:
Traceback (most recent call last):, referer: http://mabimarket/
File “C:\\Python27\\lib\\site-packages\\bottle.py”, line 862, in _handle, referer: http://mabimarket/
return route.call(**args), referer: http://mabimarket/
File “C:\\Python27\\lib\\site-packages\\bottle.py”, line 1729, in wrapper, referer: http://mabimarket/
rv = callback(*a, **ka), referer: http://mabimarket/
File “D:\\Server\\domains\\mabimarket\\index.py”, line 50, in login, referer: http://mabimarket/
aaa.login(username, password, success_redirect='/person_list', fail_redirect='/person_list'), referer: http://mabimarket/
File “C:\\Python27\\lib\\site-packages\\cork\\cork.py”, line 102, in login, referer: http://mabimarket/
if username in self._store.users:, referer: http://mabimarket/
File “C:\\Python27\\lib\\site-packages\\cork\\sqlite_backend.py”, line 52, in __contains__, referer: http://mabimarket/
row = self._backend.fetch_one(query), referer: http://mabimarket/
File “C:\\Python27\\lib\\site-packages\\cork\\sqlite_backend.py”, line 230, in fetch_one, referer: http://mabimarket/
return self._connection.execute(query).fetchone(), referer: http://mabimarket/
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 5780 and this is thread id 10120, referer: http://mabimarket/

Смысл я понимаю. Вопрос в том, как с этим справиться. В каком моменте создавать подключение к базе данных? Ведь aaa = Cork(backend=sqlb) должна быть уровня модуля.

Спасибо.

Флейм » Ищу опытного разработчика на Питон (Джанго) » Май 7, 2014 19:23:57

Требуется опытный программист на Питон Джанго на доработку сервиса бронирования.

Условия работы:
- Работа удаленная
- Оплата почасовая.
- График свободный
- Работа в команде с еще одни программистом.
- Имеется подробное ТЗ и список замечаний, которые нужно исправить.

Требования:
– опыт работы с Django от 1 года
– адекватность и ответственность

Связывайтесь со мной по почте vans315@yandex.ru или по скайпу theterrible_

Сразу ответьте на 3 вопроса:

1. Опыт работы
2. Стоимость часа работы
3. Сколько часов в неделю можете уделять проектам

Python для новичков » сохранение значений в объемлющих областях видимости » Май 7, 2014 15:11:35

начал изучать программирование с начала этого года по книге марка лутца и всё мне было понятно и разжевано до мелочей, вопросов не возникало. но дойдя до главы “фабричные функции” я поймал себя на мысли, что не все понял об объемлющих областях видимости. то ли там примеров мало, то ли мозг не в состояние такое осмыслить. вобщем, если кто может доходчивым языком объясните для чего вобще может пригодиться сохранение значений в объемлющих функциях или ссылку дайте, где описано для нубов. и вобще стоит ли заострять на этом внимание, пока ещё не дошел до изучения классов?

Python для новичков » python, графы, поиск в глубину » Май 6, 2014 14:31:30

Есть алгоритм поиска в глубину на графах.
Код ниже.
#Color — массив, в котором хранятся цвета вершин (0 — белый, 1 — серый, 2 — черный).
#Edges — массив списков смежных вершин.
#Numbers — массив, в котором сохраняются новые номера вершин.
#Stack — стек, в котором складываются вершины после их обработки.
#Cycle — принимает значение true, если в графе найден цикл.
Edges = {'a':['c'], 'c':['b'], 'd':['c', 'b', 't'], 'b':[], 't':[]}
p = {'a':['b'],
     'b':['c','d','f'],
     'd':['dd','dd1']}
Edges1 = {'killerapp':['libzigzag.a'],
          'libzigzag.a':['zag.o', 'zig.o', 'libfoobar.a'],
          'zig.o':['zig.cpp','boz.h'],
          'zag.o':['boz.h','zag.cpp','yow.h','dax.h'],
          'libfoobar.a':['bar.o','foo.o'],
          'bar.o':['boz.h','yow.h','dax.h','bar.cpp'],
          'foo.o':['dax','zow.h','foo.cpp'],
          'zig.cpp':[],
          'boz.h':[],
          'zag.cpp':[],
          'yow.h':[],
          'dax.h':[],
          'bar':[],
          'zow.h':[],
          'foo.cpp':[]
        }
Edges2 = {'killerapp':['d'],
          'd':['zag.o', 'zig.o']
         }
arr1 = {'test.cpp':['testh','t'],
        'test.h':['de','tet.hhh']}
arr = {'test':['test1.s'],'test1.s':['dest','dest2'],'dest':[]}
def topologicSortDFS2(Edges):
    Stack=[]
    Color=dict()
    for i in Edges.keys():
        Color[i]=0
    def topological_sort():
        def dfs(v):
#Если вершина серая, то мы обнаружили цикл. 
#Заканчиваем поиск в глубину.
            if Color[v] == 1: return True
            if Color[v] == 2: return False#Если вершина черная, то заканчиваем ее обработку.
            Color[v] = 1#Красим вершину в серый цвет.
#Обрабатываем список смежных с ней вершин.
            for i in range(len(Edges[v])-1):
                if dfs(Edges[v][i]): return True
            Stack.append(v)#Кладем вершину в стек.
            Color[v] = 2#Красим вершину в черный цвет.
            return False;
         
#Вызывается обход в глубину от всех вершин. 
#Заканчиваем работу алгоритма, если обнаружен цикл.
        for i in Edges.keys():
            Cycle = dfs(i)
            if Cycle: 
                print("!!!имеется цикл!!!")
                exit()
                 
#Заносим в массив новые номера вершин.    
        Stack.reverse()
        return Stack
    return topological_sort()
print(topologicSortDFS2(Edges))
print(topologicSortDFS2(arr))
С простыми примера работает. Например переменная с словарем Edges и arr работает. Но когда я добавляю к второй вершине - третью смежную вершину - сразу вылазит ошибка.
['a', 't', 'd', 'b', 'c']
Traceback (most recent call last):
['test', 'test1.s', 'dest']
File "/home/zubr/PycharmProjects/Learning/lab4_1.py", line 65, in <module>
print(topologicSortDFS2(Edges1))
File "/home/zubr/PycharmProjects/Learning/lab4_1.py", line 62, in topologicSortDFS2
return topological_sort()
File "/home/zubr/PycharmProjects/Learning/lab4_1.py", line 54, in topological_sort
Cycle = dfs(i)
File "/home/zubr/PycharmProjects/Learning/lab4_1.py", line 46, in dfs
if dfs(Edges[v][i]): return True
File "/home/zubr/PycharmProjects/Learning/lab4_1.py", line 41, in dfs
if Color[v] == 1: return True
KeyError: 'dax'
Данная ошибка вылазит, когда я пытаюсь сделать поиск с графом Edges1.
print(topologicSortDFS2(Edges1))
Помогите разобраться.

Python для новичков » Как из двух окон сделать MDI-приложение? » Май 6, 2014 08:54:14

Привет! У меня есть два окна, по отдельности они работают нормально, мне их надо объединить в MDI-приложение, чтобы сначала появлялось первое окно,а по нажатию кнопки Ок закрывалось и запускалось второе окно. Второе окно взаимодействует с первым через глобальную переменную param. Как мне это реализовать? я читала про создание иакого приложения, но нашла мало информации и нормального примера с пояснениями не было, поэтому у меня ничего не получилось.
Вообще задача состоит в написании программы для многокритериальной оптимизации. Программа должна поддерживать интерактивность, т.е. пользователь вводит в первое окно количество целевых функций, переменных и ограничений, а все последующие окна создаются с учетом этих данных.
вот код:
from PyQt4 import QtCore, QtGui
param={}
class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(QtGui.QWidget, self).__init__() 
        self.label1=QtGui.QLabel("Количество целевых функций")
        self.edcount_obj_fun=QtGui.QTextEdit()
        self.edcount_obj_fun.setMaximumSize(30,30)
        self.label2=QtGui.QLabel("Количество переменных")
        self.edcount_var=QtGui.QTextEdit()
        self.edcount_var.setMaximumSize(30,30)
        self.label3=QtGui.QLabel("Количество ограничений")
        self.edcount_const=QtGui.QTextEdit()
        self.edcount_const.setMaximumSize(30,30)
        self.btnOk=QtGui.QPushButton("Ок")
        grid=QtGui.QGridLayout()
        grid.addWidget(self.label1,0,0,QtCore.Qt.AlignLeft)
        grid.addWidget(self.edcount_obj_fun,0,1,QtCore.Qt.AlignLeft)
        grid.addWidget(self.label2,1,0,QtCore.Qt.AlignLeft)
        grid.addWidget(self.edcount_var,1,1,QtCore.Qt.AlignLeft)
        grid.addWidget(self.label3,2,0,QtCore.Qt.AlignLeft)
        grid.addWidget(self.edcount_const,2,1,QtCore.Qt.AlignLeft)
        grid.addWidget(self.btnOk,3,0,QtCore.Qt.AlignCenter)
        self.setLayout(grid)
    def event(self,e):
        if e.type()==QtCore.QEvent.Close:
            param["count_obj_fun"]=self.edcount_obj_fun.toPlainText()
            param["count_var"]=self.edcount_var.toPlainText()
            param["count_const"]=self.edcount_const.toPlainText()
            print(param)
        return QtGui.QWidget.event(self,e)
        self.connect(self.btnOk, QtCore.SIGNAL("clicked()"),
                    QtCore.SLOT("close()"))
 
if __name__=="__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.resize(210,200)
    window.setWindowTitle("Ввод целевой функции")
    window.show()
    sys.exit(app.exec_())
class MyWindow(QtGui.QWidget):
    def __init__(self,parent=None):
        super(QtGui.QWidget,self).__init__()
        self.grid=QtGui.QGridLayout()
        i=0
        for i in range(1,param["count_obj_fun"]+1):
            self.grid.addWidget(QtGui.QLabel("Целевая функция f"+str(i)+"="),i-1,0)
            self.setLayout(self.grid)
        for i in range(1,param["count_obj_fun"]+1): 
            j=0 
            for j in range(1,param["count_var"]*2+2):
                if j!=(param["count_var"]*2+1):
                    if j%2==0:
                        if j<param["count_var"]*2: 
                                self.grid.addWidget(QtGui.QLabel("x"+str(int(j/2))+"+"),i-1,j)
                        else:
                                self.grid.addWidget(QtGui.QLabel("x"+str(int(j/2))),i-1,j) 
                    else:
                        self.textEdit=QtGui.QTextEdit(self)
                        self.textEdit.setMaximumSize(30, 30)
                        self.grid.addWidget(self.textEdit,i-1,j)
                else: 
                    self.grid.addWidget(QtGui.QLabel("->"),i-1,j)
                    self.ComboBox=QtGui.QComboBox()
                    self.ComboBox.addItem("min", userData=None)
                    self.ComboBox.addItem("max", userData=None)
                    self.grid.addWidget(self.ComboBox,i-1,j+1)
                self.setLayout(self.grid)    
if __name__=="__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.resize(100,100)
    window.setWindowTitle("Ввод целевой функции")
    window.show()
    sys.exit(app.exec_())








Центр помощи » Помощь в Python, Matplotlib » Май 5, 2014 22:05:24

Очень срочно требуется помощь в решении задач по Python:

1).С помощью matplotlib анимировать броуновское движение в единичном кубе. При достижении граней куба частицы отражаются от них. Начальные скорости и положения частиц случайное. Число частиц n. Сделать так, чтобы число частиц можно было задавать.

2). Давным давно случайные числа xi генерировались с помощью датчика xi+1 = (a*xi + c)%m; yi=xi/m , где a=8121 c=28411 m=134456. Проанализировать качество этого датчика (среднее, среднее квадратическое отклонение), построить гистограмму для числа реализации n=1000000. Найти период повторения этой псевдослучайной последовательности.

Python для новичков » Помогите собрать Opera Dragofly. » Май 5, 2014 14:47:13

Помогите собрать из изходников на гитхабе утилиту Opera Dragofly.
https://github.com/operasoftware/dragonfly
В раздели Duliding ссылка на еще одну утилиту df2 https://github.com/operasoftware/dragonfly-build-tools
Там тоже питон. Я вообще не понимаю как его собирать в Windows.
Хочу разобраться в коде и сделать себе утилиту для верстки - чтобы сайту привязать по FTP файлы и сразу в опере редактировать их.

Python для новичков » scrapy pipeline mysql » Апрель 30, 2014 14:01:49

После того как паук собрал определенные айтемы со страниц нужно, чтобы в некоторой таблице БД проверялось: во-первых, наличие такой же записи – с таким же id, если такой нет, то записать; во-вторых, если такая запись уже есть, то проверять hash_str у нее, в том случае, если они различны (данные поменялись), то делать запись в базу.
Вопрос: как грамотно написать подсчет новых записей в БД ? Допустим, было найдено 5 новых айтемов и у 2 существоваших уже до этого в БД было изменено содержание, нужно в конце работы паука вывести число – 7 этих новых записей.

Python для новичков » [setuptools] расположение исходников расширения на C » Апрель 25, 2014 10:55:49

Здравствуйте, подскажите пожалуйста можно ли как нибудь указать расположение исходников расширения на C,
пока получается что нужно либо хранить исходники в корне распространяемого пакета,
либо указывать путь к исходнику от корня,
а так как, я думаю, более правильно указывать путь через os.path.join, получается слишком много кода
быть может можно как то по короче?

Python для новичков » Открыть сайт если выполнено условие. » Апрель 24, 2014 12:38:10

Здравствуйте. помогите пожалуйста написать скрипт который открывал бы страницу в браузере. Прогаммирую на Python входы/выходы GPIO на Raspberry PI. Задача такова, чтобы скрипт слушал вход и если на нем 1 то он просто открыл страницу сайта. На чем остановился я:
import RPi.GPIO as GPIO #Импортируем библиотеку для работы с GPIO:
GPIO.setmode(GPIO.BCM) #GPIO.BCM - будет использоваться нумерация GPIO
GPIO.setup(8, GPIO.IN) #конфигурируем GPIO 8 как вход
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #подтяжка к земле 0 В
signal = GPIO.input(8) #считываем сигнал с GPIO 8 в переменную signal
Не знаю не знаю правильно или нет делаю, но на этом остановился))))) Подскажите как сделать дальше или что не правильно до этого.

Django » проблема с sitetree_breadcrumbs » Апрель 24, 2014 10:09:34

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

использую sitetree. сделал на его основе меню, вывел на страницу сайта. работает.

{% sitetree_menu from 'nav_goods' include 'trunk' template 'part_nav_goods.html' %}
далее попытался вывести хлебные крошки(опять на основе sitetree)

{% sitetree_breadcrumbs from 'nav_goods' template 'part_breadcrumbs.html' %}
но они не выводятся. выводится только пустой элемент ul и всё. непонятно где искать ошибку. теоретически её здесь и не может быть. вывод то элементарный

ps
шаблоны не менял. просто скопировал. пробовал и без указания шаблона

Флейм » Ищу pазработчика на Python » Апрель 23, 2014 13:29:51

Ищем специалиста в команду по преобразованию существующего сайта, работаюшего на Python (Pilons) в интернет сообщество объединяющее онлайн шоппинг и пользователей (посетители и владельцы магазинов) в единую социальную платформу (высоко нагруженный сайт). Проект интересный, многообещающий. Работа в Москве в офисе. Бонусная система по готовности проекта ( дополнительно к зарплате)
Нужен питонщик с опытом от 2-х лет.

Базы данных » Mongodb. Cложный поиск » Апрель 20, 2014 12:33:00

Здравствуйте, уважаемые форумчане. Мне нужно получить список от пользователя и сделать выборку из базы по следующему принципу:
если полученный список такой
animals = ['cat', 'dog']
то мне в первую очередь нужны документы с
animals = ['cat', 'dog']
animals = ['cat']
animals = ['dog']
а потом и
animals = ['cat', 'dog', 'penguin']
можно добавить, если количество полученных документов меньше, например, десяти.

Подскажите, пожалуйста, как вообще называются такие выборки и как их правильно делать в mongodb.

Python для новичков » Python + raspberry pi + PIR » Апрель 17, 2014 12:20:44

Добрый день_) Занимаюсь изучением малины, за основу взаимодействия с gpio взял python. В интернете есть около четырёх рабочих кодов, которые взаимодействуют с датчиком движения. Но вот проблема, они получают сигнал с PIR, включают лампочку на некоторое время, потом отключаются. Т.е. даже если продолжаются движения, и датчик движения срабатывает, программа всё равно отключает питание после time.sleep.
В принципе я придумал алгоритм, по которому при срабатывании датчика движения, программа включает счётчик, в котором какая-то переменная увеличивается пока есть движение, и прибавляется к time.sleep. Но попытавшись что-то сотворить, не заработало. Я в питоне новичок, может у кого есть какие идеи? Или иной более простой и логичный алгоритм для работы с датчиком движения.
Тема актуальна, так как весь гугл перерыт и решения не найдено, да и малинка всё больше приобретает популярность.
Вот код программы, которую я взял за основу, переменная i как бы должна увеличиваться.
 import time
import RPi.GPIO as io
io.setmode(io.BCM)

pir_pin = 24
power_pin = 23
i = 0

io.setup(pir_pin, io.IN)
io.setup(power_pin, io.OUT)
io.output(power_pin, False)

print ("Ready")

while True:
if io.input(pir_pin):
i = i+5
print("POWER ON")
print i
io.output(power_pin, True)
time.sleep(2+i);
print("POWER OFF")
io.output(power_pin, False)
i = 0
time.sleep(1)

Python для новичков » Как сделать скриншот с заданием координат мышью? » Апрель 15, 2014 11:07:05

Использую PIL, python 3.3, Win7.
Пока делаю это так:
img = ImageGrab.grab( (x1, y1, x2, y2) )

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

А еще лучше, чтобы можно было протянуть мышью, как бы рамкой выделить область. Подозреваю, что можно как-то отследить координаты нажатия левой кнопки мыши, а потом координаты ее отпускания.
Какие модули подключить, что почитать? Может, кто-то пример набросает, буду благодарен.

Центр помощи » Очень нужна помощь! » Апрель 12, 2014 13:44:01

Добрый день, уважаемые сообщники
Очень нуждаюсь в вашей помощи. Никак не можем решить следующую проблему с сайтом моего интернет-магазинчика www.mimilavka.ru
Пользователям при регистрации периодически пишут, что такой адрес уже существует, и отказывают в регистрации. Программисты, которые писали код, не знают, почему такое происходит. Нам же часто поступают жалобы от клиентов;( Ищем специалистов, которые могли бы помочь в этом вопросе.
В идеале хотим доработать сайт в части интеграции его с 1с. Просим откликнуться действительно тех, кто разбирается в языке и готов “подставить костыли” в чужом коде. Наша почта mimilavka@gmail.com. Спасибо!!