Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3495 posts.

Python для новичков » Проблема с import в python при написании unittest'ов » Март 26, 2012 18:36:50

Заранее прошу прощение за какие-то пробелы в знаниях по Python. Мне достался в “наследство” некоторый немалый по размерам проект. Я не могу оценить качество кода в нём (хотя пишу уже на python около 3х месяцев) и насколько он соответствует pythonic way, но это и не суть сейчас. Структура папок проекта примерно такая (не ругайте сильно если что не так):

projectname
—somefolder1
—somefolder2
——somesubfolder
———__init__.py
———module1.py
———module2.py
—tests
——testsomesubfolder1
———__init__.py
———recipy1.py
—project.py

Я использую среду разработки PyCharm. Для запуска у меня создана конфигурация python в которой задано:

Script: D:\project\projectname\project.py

Working directory: D:\project\projectname

Я хочу покрыть некоторые части этого проекта unittest'ами. Например, мне необходимо написать тест в recipy1.py для некоторого класса из somefolder1/somesubfolder/module1.py Как мне правильно сделать import для module1 в recipy1:

# recipy1.py
# как написать import для module1?
import unittest
    class Test1(unittest.TestCase):
        def test_testtest(self):
            self.assertEquals(100,100)
        def test_fakeclass(self):
            obj = module1.SomeClass( 10 )
            self.assertEquals(10, obj.GetValue() )
    if __name__ == '__main__':
        unittest.main()

чтобы у меня в recipy1.py был доступен некоторый класс SomeClass из module1.py:

# module1.py
class SomeClass():
        def __init__(self, value):
            self.value = value
        def GetValue(self):
            return self.value

Вообще правильно ли я делаю, что пишу тесты в отдельной папке? Во многих статья и литературе это видел? Имеет ли значение Working directory, указанная в конфигурации python для запуска проекта (запуска project.py). Какой Working directory мне необхождимо указать для тестов?

Инструментальные средства разработки » Отладка в PyDev » Март 26, 2012 11:23:58

При попытке отладить скрипт в PyDev дебаггере вылезает ошибка:
Traceback (most recent call last):
File "D:\Program Files\eclipse\plugins\org.python.pydev.debug_2.4.0.2012020116\pysrc\pydevd_comm.py", line 253, in OnRun
r = r.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 25: invalid continuation byte
Причем она вылезает только когда я устанавливаю точку останова, если нет - она нормально выполняется.

GUI » GTK 3 » Март 25, 2012 17:42:59

Кто-нибудь работал с модулем PyGI, реализующим функции GTK 3? Я свою программу портировал на этот модуль с PyGTK, она работает, но выдаёт слишком много ошибок.

Django » Наследование атрибутов » Март 25, 2012 12:36:07

1) Есть категории с 2-мя уровнями вложенности (Category -> SubCategory -> Item)
2) Есть таблица свойств вида название-значение

Как возможно реализовать следующее:
Категории, подкатегории и item можно добавлять свойства, при этом item наследует все свойства подкатегории, а подкатегория все свойства категории.
Возможно ли это сделать средствами джанги? Или может отказаться от такой идеи?

Флейм » Специалист по автоматизации функционального тестирования в Acronis » Март 25, 2012 10:51:43

Требования:
• Опыт разработки автоматизированных сценариев тестирования (не менее года)
• Знания и опыт работы с Python и/или Java
• Опыт работы с автоматизированной системой тестирования: Selenium (или аналогичные)
• Приветствуется опыт работы с VMWare Workstation или VMWare Server
• Понимание основных принципов и методологии тестирования программного обеспечения
• Понимание целей и задач автоматизированного тестирования программного обеспечения

Обязанности:
• Разработка автоматизированных тестовых сценариев для Web и консольных приложений
• Подготовка автоматизированной тестовой среды

Заработная плата:
по результатам собеседования

Условия работы:
Мы предлагаем работу в стабильной и успешной компании, полное соблюдение ТК РФ, перспективы карьерного роста и достойную оплату труда (по результатам собеседования).

Для сотрудников:
• бесплатное питание;
• частичная компенсация абонемента в фитнес-клуб;
• комплексная медицинская страховка (ДМС).

Офис компании находится в районе ст. метро Отрадное. Утром и вечером от метро до офиса ходит корпоративный транспорт.

Python для новичков » Получить SHA1 дайджест от объекта » Март 23, 2012 11:38:03

Здравствуйте!

Пытаюсь работать с Thrift (IDL ниже)
struct AuthSalt {
1: required i64 client, /* случайные данные генерируемы клиентом. */
2: required i64 server, /* salt-данные из предыдущего ответа сервера. */
}

struct AuthRequest {
1: required AuthSalt bootstrap,
2: required string who, /* логин пользователя. */
3: required string signature, /* SHA-1 дайджест от слияния bootstrap + password + who + bootstrap. */
}

exception NotAuthorisedException {
1: required string description
}

service Bookworm {
AuthResponse Authenticate( 1: required AuthRequest a, 2: required string locale )
throws ( 1: NotAuthorisedException e )
}
Сгенерировал файлы, теперь пытаюсь работать с сервисом. Проблема в следующем, я не понимаю как получить дайджест.

Для генерации SHA использую: dig = hashlib.sha1(), судя по описанию, то получить дайджест я могу последовательным вызовом dig.update(string).

bw_authsalt = AuthSalt(0,0) #создаем объект, который будем использовать при создании AuthRequest
т.е. реализация подписи представляется мне примерно так:
dig.update(bw_authsalt)
dig.update(password + login)
dig.update(bw_authsalt)
Но метод update на вход получает только строку. Соответственно у меня вопрос, как мне структуру к строке преобразовать правильно, чтобы вызвать метод? На Си этот код выглядит вот так:
SHA_CTX c;
::SHA1_Init(&c);
::SHA1_Update(&c, &bootstrap, sizeof(bootstrap));
::SHA1_Update(&c, password.c_str(), password.size());
::SHA1_Update(&c, who.c_str(), who.size());
::SHA1_Update(&c, &bootstrap, sizeof(bootstrap));
::SHA1_Final(digest, &c);
Это была первая часть проблемы.

Вторая часть проблемы в том, что я решил создать объект без корректного дайджеста и вызвать метод Authenticate - ожидал получить exception NotAuthorisedException, но вывалилось с:

Traceback (most recent call last):
File "./bw_client.py", line 44, in <module>
client.Authenticate(bw_authreq, 'rus')
File "./gen-py/bookworm/Bookworm.py", line 50, in Authenticate
self.send_Authenticate(a, locale)
File "./gen-py/bookworm/Bookworm.py", line 58, in send_Authenticate
args.write(self._oprot)
File "./gen-py/bookworm/Bookworm.py", line 213, in write
self.a.write(oprot)
File "./gen-py/bookworm/ttypes.py", line 161, in write
oprot.writeString(self.digest)
File "/usr/local/lib/python2.6/dist-packages/thrift/protocol/TBinaryProtocol.py", line 122, in writeString
self.writeI32(len(str))
TypeError: object of type '_hashlib.HASH' has no len()
Я нашел, где пишут про мою ошибку: http://notes.alexdong.com/quick-introduction-to-hypertables-thrift-api но не понял как лечить. Подскажите пожалуйста, что не так делаю. В Pythone начинающий совсем. Спасибо.

Python для новичков » Разваливается многопоточный клиент » Март 23, 2012 07:25:19

При обращении к отключившемуся серверу клиент падает, выдавая в консоль:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b76250), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b76250), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject::installEventFilter(): Cannot filter events for objects in a different thread.
QObject::installEventFilter(): Cannot filter events for objects in a different thread.
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::LabelEngine(0x2b77b20), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::LabelEngine(0x2b77b20), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::WidgetStateEngine(0x2b70370), parent's thread is QThread(0x1b6c7f0), current thread is QThread(0x302f600)
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
python2: /var/calculate/tmp/portage/x11-libs/libX11-1.4.4/work/libX11-1.4.4/src/xcb_io.c:178: dequeue_pending_request: Проверочное утверждение «!xcb_xlib_unknown_req_in_deq» не выполнено.
Аварийный останов
Как я понял мне нужно запустить XInitThreads перед вызовом потока??
Где-то нашёл такой код:
from miro.platform import xlibhelper
if xlibhelper.XInitThreads() == 0:
print "WARNING: XInitThreads() failed!"
но неужели для этого нужно ставить media-video/miro? Что-то я не понимаю, подскажите.

Центр помощи » Прошу помощи !!!! Спектральный тест » Март 22, 2012 17:12:08

Дорогие форумчане, прошу вашей помощи в решении головной боли (((
Не могу решить поставленную мне задачу, последняя надежда на вас !

Задача:

С использованием pefile на языке Python разработать программу оценки
статистических характеристик файла

Спектральный тест (http://ru.wikipedia.org/wiki/Статистические_тесты_NIST)
Вот нарыл еще инфы http://mathinfinity.net.ru/article/item/83/

GUI » PyQt4: Помогите выбрать лучший способ... » Март 22, 2012 14:04:45

Здравствуй, любимое сообщество!

Буду краток.
Есть табличная модель и таблица в приложении. Юзер должен интуитивно понять, что он может добавлять/заменять/очищать содержимое столбцов, путём загрузки строк из текстовых файлов. Однако, при реализации GUI возникли сложности с выбором способа подачи этой информации юзеру:

1. Вставить свои виджеты в заголовки таблицы можно, но это такой геморрой (извиняюсь), что 5 потраченных почти впустую дней гугления, самостоятельной реализации, копипастов, портов в Qt (C++) и прочей лабуды были потрачены зря. Делегаты с QHeaderView не работают.

2. Реализовать всё одной кнопкой “Открыть…” с кастомизацией QFileDialog - это тоже то ещё счастье. Теряется суть подхода “нажал - выбрал - сделал”. Хотя, реализовать это получилось без труда.

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

4. Делать целый тулбар, в котором можно добавить несколько кнопок для добавления/замены/очистки столбцов видится более-менее удобным, но не намного удобнее, чем п.2.

5. Пока самым удобным способом видится только контекстное меню на каждом заголовке, но это так неочевидно.

6. Была даже мысль сделать контекстные менюшки для каждой ячейки, чтобы можно было манипулировать данными столбца, относительно текущего положения: добавить до текущей ячейки, добавить после текущей ячейки, заменить текущую ячейку; а в контекстой менюшке на заголовке: добавить в начало столбца, добавить в конец столбца, очистить столбец, заменить данные в столбце, и т.п. Однако, это так же неочевидно, как в п.5, да и первым делом в голове мелькает мысль о целесообразности доступа к такого рода манипуляциям (приложение довольно простое, но планируется как масштабируемое).

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



На всякий случай, вот второй маленький вопросик. Насколько лучше или хуже, вместо манипуляций с методами вставки/удаления строк и сотлбцов, пользоваться возможностью изменять массив данных, используя лишь сигнализирование “beginResetModel()” и “endResetModel()”, независимо от общего количества данных в таблице (модели) и количества изменяемых данных.

Например, для очистки всей таблицы, я использую вот такой способ, вместо удаления строк/столбцов (код комментом “# ВОТ ТАК:”):
class UserTableModel(QtCore.QAbstractTableModel):

def __init__(self, data = [[]], headers = [], parent = None):
QtCore.QAbstractTableModel.__init__(self, parent)

if headers:
self.__data = [[[]] * len(headers)] # just for DEBUG
else:
self.__data = data

self.__headers = headers

........

# ВОТ ТАК:
def clear(self):
self.beginResetModel()
self.__data = []
self.endResetModel()

Флейм » Питер. Разыскивается Python (django) developer » Март 22, 2012 09:18:14

В один из новых проектов, стабильно развивающейся компании требуется разработчик на python (django).
Проект уже запущен, но нуждается в доработках.
Работа в офисе!
Работа не временная!

Обязанности:

Развитие поисковой системы
Работа с API
Создание новых алгоритмов поиска и подбора информации
Создание новых инструментов для пользователей
Участие как в front-end, так и в back-end разработке


Требования:

Хорошие знания Python (django), javascript (jquery)
Опыт работы с MySQL
Опыт работы с git
Знания HTML, XML, css
Знания Linux на уровне продвинутого пользователя
Английский язык на уровне понимания тех. документации


Плюсом будет:

Опыт работы с south
Опыт работы с celery
Опыт работы с mongoDB


Условия:

График работы — 5/2
Испытательный срок 2 месяца
Абонемент в спортивный клуб SportLife на льготных условиях
Комфортабельный офис рядом со ст. м. Чкаловская
Молодой дружный коллектив единомышленников
Перспективы карьерного роста
Активная и динамичная корпоративная культура (праздники, выезды на природу, офисные вечеринки)
Кофе, чай, сладости, PS3

Мы ищем как опытных профессионалов, так и талантливых новичков, поэтому заработная плата обсуждается!

По всем вопросам можно обращаться в личку или по телефону 8 (965) 0794885 Виктор

Python для новичков » Парсинг Гугла » Март 21, 2012 17:12:14

Всем привет. Перестал работать парсер ссылок из гугла, пытаюсь разобраться как починить, но пока ничего не выходит, ибо за парсинг отвечает библиотека pyquery, и что там где править непонятно совершенно.

Код тут:
http://pastebin.com/xbd9tp4g

Задайте направление куда рыть, чтобы поправить его.

Python для новичков » Пользовательский тип данных+ctypes » Март 21, 2012 15:29:29

Здравствуйте.
Импортирую с помощью ctypes dll'ку, в одной из функций которой одним из аргументов является Msg, который определен так в документации:
Msg
Адрес переменной (имеющей тип “указатель на TMTEMsg”), куда будет помещен указатель на буфер, содержащий описание информационных объектов. Структура TMTEMsg определена так:
PMTEMsg = ^TMTEMsg;
TMTEMsg = record
DataLen: Integer; // Длина следующих далее данных
Data: record end; // Данные переменной длины
end;
Сама функция:
function MTEStructure(Idx: Integer; var Msg: PMTEMsg): Integer;
—————————————————————-
Как такую структуру реализовать в Python?

import ctypes as cc
bridge=cc.WinDLL("my.dll")
idx=0
struct=bridge.MTEStructure(idx,Msg)

Network » xmpppy. Как получить контакт лист? » Март 21, 2012 12:36:56

Как получить список всех твоих контактов, включая тех, кто оффлайн?

Флейм » Требуется программист Python » Март 21, 2012 08:42:45

В Питере на поддержку существующего проекта требуется программист. Сайт социального телевидения. 921-75-51. tav64@mail.ru

GUI » PyGTK: gtk.TreeView.select_path() » Март 20, 2012 11:21:26

Необходимо выделить определённую строку в gtk.TreeView. В документации сказано, что для этого используется gtk.TreeView.select_path(path). Но как получить передаваемый path?

Python для новичков » Копирование по сети с помощью py » Март 19, 2012 10:46:46

Я копирую из каталога в каталог таким методом:

shutil.copy2(“d:/projects/2012_03_16-1800/test1.zip”,“e:/filez/”)

Подскажите пожалуйста как правильно скопировать из сети в локальный каталог?

GUI » PyQt4: Не вызывается обработчик события focusInEvent » Март 18, 2012 10:29:20

Во вкладках не вызывается обработчик события приёма фокуса focusInEvent, независимо передаётся фокус через SetFocus или нажатием клавиши табуляции.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import PyQt4.QtGui as QtGui
import PyQt4.Qt as Qt
import PyQt4.QtCore as QtCore
import sys

class MainTab(QtGui.QTabWidget):
def focusInEvent (self, ev):
print "MainTab focus event"
QtGui.QTabWidget.focusInEvent(self, ev)

def init(self):
self.connect(self, QtCore.SIGNAL("currentChanged (int)"), self.currentChanged_slot)

def currentChanged_slot(self, i):
print "MainTab currentChanged_slot ", i
self.currentWidget().setFocus()



class SecondTab(QtGui.QTabWidget):
def focusInEvent(self, ev):
print "SecondTab focus event"
QtGui.QTabWidget.focusInEvent(self, ev)



app = QtGui.QApplication(sys.argv)
MWin = QtGui.QMenuBar()
tab = MainTab(MWin)
tab.init()
tab0 = SecondTab()
tab1 = SecondTab()
wdg0 = QtGui.QWidget()
wdg1 = QtGui.QWidget()
tab0.addTab(wdg0, '1')
tab1.addTab(wdg1, '2')
tab.addTab(tab0, 'one')
tab.addTab(tab1, 'two')

MWin.resize(790, 590)
MWin.show()
sys.exit(app.exec_())

Python для экспертов » Автоматизация записи » Март 15, 2012 08:18:12

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

Вначале мы имеем изделие, которое, проходя через все стадии рассчета, постепенно обрастает данными.
Стадии выглядят примерно так:

Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_1_________


Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_2_________



Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_N_________

Информация о том, что было изменено на стадии, сколько ещё вариантов изменения осталось и как эта стадия называется записывается в журнал Изделия. Беда в том, что из-за недостатка моих знаний эту информацию приходится записывать вручную. Это несколько некошерно, так как я чувствую, что есть способ делегировать эти полномочия программе. Например с помощью декораторов.
Стадии реализованы в виде типовых классов. В каждом классе есть методы .count() и .to_journal().
Вот пример простой формулы-стадии (прототип).
class r1_S:
"""Мощность одной фазы и одного стержня"""
def __init__(self, product):
self.name = 'r1_S'
self.product = product
# Данные, которые используются в этой формуле
self.S = product.ut['S_kVA'] # Полная мощность
self.m = product.ut['phase_num'] # Число фаз
def count(self):
# Вычисление
self.Sf = float(self.S) / self.m
# Запись результатов
self.product.math['Sf'] = self.Sf
def text(self):
# Текстовая аннотация
self.product.text += [
"""Мощность одной фазы и одного стержня:
S_ф = S\' = S/m = {0}/{1} = {2}""".format(self.S, self.m, self.Sf)]
def to_journal(self):
# Запись в журнал Изделия
self.product.journal.append( {'handler_name': self.name, 'Sf': self.Sf} )
Вопрос:
Как автоматизировать запись в журнал данных, которые получаются в методе .count()?
То есть избавиться от этого метода
def to_journal(self):
# Запись в журнал Изделия
self.product.journal.append( {'handler_name': self.name, 'Sf': self.Sf} )

Инструментальные средства разработки » eclipse, быстрая замена объекта на словарь » Март 15, 2012 07:56:49

Имеется примерно такой код
obj = MyObject()
obj.attr1 = ...
obj.attr2 = ...
...
obj.attrn = ...
Такого кода довольно много
Можно как-нибудь быстро заменить это на следующее?
obj = {}
obj['attr1'] = ...
obj['attr2'] = ...
...
obj['attrn'] = ...

Центр помощи » сделать прокручивание графика по оси Х ? » Март 13, 2012 15:54:09

Такой вопрос, пишу прогу на python для вывода графиков, точек около 3тыс. как можно, не уменьшая масштаб, т.к. точки накладываются друг на друга, сделать прокручивание графика по оси Х ? библиотека matplotlib