Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

Python для новичков » Клиент серверное приложение. Нжен совет по организации взаимодействия. » Дек. 19, 2011 13:13:12

Добрый день.

В принципе, приложение уже готово и работает нормально но у меня возникло сомнение в правильности его реализации.

Клиент-серверное приложение. Сервер оформлен в виде демона и работает исключительно на Linux.
Клиент на PyQT и работает только на виндовс. Взаимодействие реализованно через вызов серверных функций доступных через XML.RPC

Клиентская консоль предстовляет из себя что то вроде диспетчера задач(упр. процессами, просмотр нагрузки, и информация о ситеме).

Напрмер:
Нажимаем посмотреть список процессов. Консоль вызывает соответствующую функцию на сервере.
Сервер у себя выполняет стандартную команду линух ps aux и весь результат в виде строки возвращает клиенту.
Клиент эту строку парсит и заполняет данными соответствующую табличку в консоле.

Все это работает. Но текстовый обмен и сложный парсинг вывода каждой команды кажется мне слишком сложным и требующим кучи проверок на каждой Линукс ситеме т.к. в некоторых версиях вывод стандартных команд оболочки отличается.

Может, я чего то не знаю и есть какой то модуль для питона позволяющий получать работать с процессами системы и прочими системными компонентами? или текстовый обмен это норма?

Python для новичков » Клиент серверное приложение. Нжен совет по организации взаимодействия. » Дек. 19, 2011 12:17:35

Добрый день.

В принципе, приложение уже готово и работает нормально но у меня возникло сомнение в правильности его реализации.

Клиент-серверное приложение. Сервер оформлен в виде демона и работает исключительно на Linux.
Клиент на PyQT и работает только на виндовс. Взаимодействие реализованно через вызов серверных функций доступных через XML.RPC

Клиентская консоль предстовляет из себя что то вроде диспетчера задач(упр. процессами, просмотр нагрузки, и информация о ситеме).

Напрмер:
Нажимаем посмотреть список процессов. Консоль вызывает соответствующую функцию на сервере.
Сервер у себя выполняет стандартную команду линух ps aux и весь результат в виде строки возвращает клиенту.
Клиент эту строку парсит и заполняет данными соответствующую табличку в консоле.

Все это работает. Но текстовый обмен и сложный парсинг вывода каждой команды кажется мне слишком сложным и требующим кучи проверок на каждой Линукс ситеме т.к. в некоторых версиях вывод стандартных команд оболочки отличается.

Может, я чего то не знаю и есть какой то модуль для питона позволяющий получать работать с процессами системы и прочими системными компонентами? или текстовый обмен это норма?

Python для новичков » Передача данных в метод класса » Дек. 16, 2011 15:01:09

Добрый день! Я в Пайтоне 3 день, прошу не судить строго. Волей судьбы :) пришлось обратится к этому языку.
Итак суть: Работаю с API для хостинг панели DirectAdmin, не выходит передать перменную методу класса.

Метод класса выглядит так:
def get_user_limits(self, user):
"""Get User Limits

Implements command CMD_API_SHOW_USER_CONFIG

Returns a dictionary with the user's upper limits
and settings that defines their account

Method info: http://www.directadmin.com/api.html#info
"""
return self._execute_cmd("CMD_API_SHOW_USER_CONFIG", \
[('user', user)])
для вывода списка обращаюсь так:
#!/usr/local/bin/python2.7
import directadmin
u = "someuser"
api = directadmin.Api("admin", "Somepwd", "example.com", 2222)
user_config = api.get_user_limits(u)
print user_config
На выходе получаю вот это: ):
File "./test.py", line 23, in <module>
user_config = api.get_user_limits(u)
File "/usr/local/lib/python2.7/site-packages/directadmin/api.py", line 948, in get_user_limits
[('user', user)])
File "/usr/local/lib/python2.7/site-packages/directadmin/api.py", line 624, in _execute_cmd
return self._connector.execute(cmd, parameters, get)
File "/usr/local/lib/python2.7/site-packages/directadmin/api.py", line 512, in execute
return self._handle_response(urllib2.urlopen(request))
File "/usr/local/lib/python2.7/site-packages/directadmin/api.py", line 575, in _handle_response
raise ApiError(response['details'][0])
directadmin.api.ApiError: no container class for data
Что я делаю не так?

GUI » PyGTK редактирование ячеек в таблице » Дек. 16, 2011 08:58:21

Имеется таблица с моделью описанная следующим образом :
   self.lst=gtk.ListStore(int,str,str,int,float)
self.grid=gtk.TreeView(self.lst)
renderText=gtk.CellRendererText()
renderText.set_property( 'editable', True )
renderText.connect('edited',self.__edit_col,self.lst)
cell=gtk.TreeViewColumn('PLU',renderText,text=0)
self.grid.append_column(cell)
cell=gtk.TreeViewColumn('Штрихкод',renderText,text=1)
self.grid.append_column(cell)
cell=gtk.TreeViewColumn('Наименование',renderText,text=2,editable=2)
self.grid.append_column(cell)
cell=gtk.TreeViewColumn('Группа',renderText,text=3)
self.grid.append_column(cell)
cell=gtk.TreeViewColumn('Цена',renderText,text=4)
self.grid.append_column(cell)
Функция обработки редактирования одна для всех колонок и описана она следующим образом :
	def __edit_col(self,cell,path,new_text,model):
model[path][2]=new_text # для проверки работы изменяем 3 столбец
return
Вопрос : как определить номер колонки ?
Добавить идентификатор в renderText.connect('edited',self.__edit_col,self.lst) и устанавливать обработчик для каждой ячейки можно но хотелось бы через один обработчик.

Флейм » Ищу Python Team Lead / Руководитель группы разработки, Москва, 80-120К » Дек. 16, 2011 07:34:02

В представительство крупной международной компании, специализация - аутсорсинговая разработка ПО на заказ, требуется Python Team Lead / Руководитель группы разработки.




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

управление командой python, c++ разработчиков
написание и защита детальной технической архитектуры проекта
детализация архитектуры в виде задач разработками (у нас jira)
реализация логики и скриптов обслуживания высоконагруженных систем и распределенной базы данных
прототипирование и реализация алгоритмов при необходимости
интеграция модулей системы с различными API зарубежных проектов




Обязательные требования:

высшее техническое образование
опыт разработки на Python под Linux
опыт работы в команде, с системами контроля версий (SVN, CVS), работа с юнит-тестами
высокий уровень знаний Python (Django или похожие фреймворки), MySQL или PgSQL, основы JavaScript (jQuery)
опыт работы в высоконагруженных проектах с распределенным файловыми системами и БД обязательно
опыт в проектировании архитектур подобных проектов
умение читать техническую документацию на английском языке
знать, что такое кэш
системное, краткое и емкое изложение собственных мыслей другим людям
желательные требования:
опыт запуска приложений с использованием веб-серверов Apache, NGINX
желание оставлять потомкам документированный код и умение писать тесты
базовое знание shell. В консольке sed, awk, etc.
базовые знания с++
опыт работы с Amazon EC2, S3 или аналогами


Примечание:

рассматриваются как кандидаты с руководящим опытом работы, так и без такового. Если у разработчика есть желание (и качества) стать team lead, то welcome
работа в офисе (возможно гибкое время посещения офиса)
нужно уметь работать с удаленной командой

Первая беседа по Скайпу с прямым работодателем.

Жду Ваши отклики,
Ларина Елена
elarina@hreshebnik.ru

Флейм » Работа. Дописать скрипт python » Дек. 14, 2011 14:09:14

Есть парсер контакт листа скайпа написанный на python, после запуска скрипт создает SOAP сервер. Необходимо дописать скрипт чтоб его можно было запускать как unix демон.
Цена договорная.

Python для новичков » ElementTree и кодировка » Дек. 14, 2011 07:27:44

Ситуация в следующем: работаю с xml с русским текстом в кодировке 1251. Ищу элемент:
 
tree = ET.parse('file.xml')
person = tree.find('/отправитель')
Выкидывает исключение связанное с кодировками, и строку '/отправитель он воспринимает иероглифами. Подскажите, как в таких случая поступать, желательно без перезаписи самого xml

Python для новичков » Pycairo: поворот текста вокруг своего центра (линейная алгебра?) » Дек. 13, 2011 15:19:51

Привет.

Подскажите, пожалуйста, как сделать с помощью библиотеки cairo (pycairo) поворот текста вокруг своего центра?

По умолчанию, можно повернуть его только вокруг своего, так называемого `origin` - точки, которая находится слева внизу будущего текста. То есть, при повороте, текст как бы заваливается на сторону.

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

Я честно пробовал сделать транслейт (cr.translate(text_center_x, text_center_y)), но это не помогает. Вообще, в принципе, транслейт никак не влияет на рендеринг текста. Он влияет только на относительное позиционирование “курсора”.

Помогите, пожалуйста, товарищи!
Возможно, нужно иметь дело с матрицами трансформации, в кторых я, откровенно говоря, не силён, как не силён в линейной алгебре.

Вот картинка, как на данный момент выглядит ситуация и кусочек кода:


from utils import \
transparent_white as transparent, \
create_cairo_font_face_for_file, \
middle_center
from PIL.ImageColor import getrgb
from cairo import ImageSurface, Context, FontOptions, FORMAT_ARGB32
from math import radians, sin, cos, pi

font_files = [
"/WINDOWS/Fonts/cour.ttf",
"/WINDOWS/Fonts/arial.ttf",
"/WINDOWS/Fonts/times.ttf",
"/WINDOWS/Fonts/georgia.ttf",
"/WINDOWS/Fonts/DejaVuMonoSans.ttf",
"/WINDOWS/Fonts/DejaVuCondensedSerif.ttf",
]

font_size = 60
letter = u"Ж"
text_angle = 15
font_color = getrgb("black")
border_color = getrgb("magenta")

# нарисовать букву в 0, 0

WIDTH = 200
HEIGHT = 200

im = ImageSurface(FORMAT_ARGB32, WIDTH, HEIGHT)
cr = Context(im)
face = create_cairo_font_face_for_file(font_files[0], reinit = 0)

cr.set_font_face(face)
cr.set_font_size(font_size)

px = max(cr.device_to_user_distance(1, 1))

canvas_center = WIDTH * 0.5, HEIGHT * 0.5
rectangle_origin = canvas_center[0] * 0.5, canvas_center[1] * 0.5

# квадрат, ограничивающий 100x100 в серединке холста
cr.translate(*rectangle_origin)
cr.set_source_rgb(*border_color) # СИРЕНЕВЫЙ
cr.set_line_width(1 * px)
cr.rectangle(0, 0, WIDTH * 0.5, HEIGHT * 0.5)

# вспомогательные оси x, y, пересекающиеся в центре квадрата
cr.move_to(0, rectangle_origin[1])
cr.line_to(rectangle_origin[0] * 2, rectangle_origin[1])
cr.move_to(rectangle_origin[0], 0)
cr.line_to(rectangle_origin[1], rectangle_origin[1] * 2)
cr.stroke()

width, height = cr.text_extents(letter)[2:4]
text_origin = middle_center(rectangle_origin[0], rectangle_origin[1], width, height)

print "rectangle_origin:", rectangle_origin[0], rectangle_origin[1]
print "width, height:", width, height
print "text_origin:", text_origin

######## сначала рисуем без поворота
cr.set_source_rgb(*getrgb("red"))
# перемещаемся к месту, от которого рисовать
cr.move_to(*text_origin)
# рисуем текст
cr.show_text(letter)

cr.move_to(*text_origin)
cr.translate(width/2, -height/2)
cr.rotate(radians(text_angle))
cr.set_source_rgb(*getrgb("blue"))
cr.show_text(letter)

del cr
im.write_to_png("task_6.png")

Django » StackedInline (TabularInline): русификация интерфейса » Дек. 13, 2011 13:05:21

Доброго всем времени суток!

есть две модели:
class Telephones(models.Model):
show=models.BooleanField(default=True,
verbose_name=u'Показывать телефон на сайте')
prioritet=models.IntegerField(verbose_name=u'Приоритет')
telnum=models.CharField(max_length=20, verbose_name=u'Номер телефона')
prim=models.CharField(max_length=50, verbose_name=u'Примечание',
blank=True)


class Flats(models.Model):
...
...
telephones=models.ManyToManyField(Telephones,verbose_name=u'Отображаемые на \
странице квартиры телефоны', blank=True)
есть админка, в которой к каждому телефону привязан список квартир, на которых он должен отражаться через TabularInline:
class TelFlatsInline(admin.TabularInline):
model=Flats.telephones.through


class TelephonesAdmin(admin.ModelAdmin):
inlines=(TelFlatsInline,)
При этом в админке мы получаем следующую картинку (см. в прикрепленном файле)

Вопрос: как добавить описания полей на русском языке?
Еще можно ли каким-то образом сделать filter_horizontal ?

Django » DataTimeField на вход подается время UnixTimeStamp как сделать? » Дек. 12, 2011 21:23:52

Есть форма, в которой есть поле
DataTimeField()
есть модель, в которой так же есть поле
DataTimeField() связанное с базой PostgreSQL

По условию задачи на вход к нам приходит время в формате UnixTimeStamp
+ надо сделать проверку, что время пришло именно в таком формате и ни в каком другом
Как это аккуратнее сделать?

Я пока придумала не очень красивое решение
для формы сделала поле UnixTimeStampField(forms.RegexField)
где проверяю регулярным выражением, что на входе только цифры

для модели сделала поле UnixTimeStamp(model.DataTimeField)
где в методе get_db_prep_value() преобразую строку из формы к datatime, в случае если мы берем значение из базы - ничего не преобразую

Как-то все это выглядит не так красиво, как хотелось бы.

Хотелось бы для формы сделать что-то вроде
UnixTimeStampField(forms.DataTimeField), но в упор не представляю, как это сделать(((
Встроенный валидатор сразу выкидывает с Incorect value, если на вход подаю что-то вроде “123443221”

Есть идеи?

Python для новичков » Не компилируется модуль при импорте » Дек. 12, 2011 11:02:29

Обнаружил странное: в каталоге с модулями проекта, где все модули скомпилированы, обновил один из исходников, однако, он не “подцепился”, то есть импортировался старый скомпилированный модуль.
При удалении .pyc-файла, не срабатывает директива import - не может найти модуль, хотя вот он, тут, рядом в виде .py

У меня, к сожалению, нет доступа к исходникам того модуля, который производит импорт (он есть только в .pyc виде).

Отчего может происходить такое поведение, переназначен метод import каким-то образом? Как, что могло быть сделано, чтобы поведение было таковым?

GUI » PyGTK, пропадают виджеты » Дек. 12, 2011 07:51:05

Здравствуйте!
Написал небольшой скрипт на Python с использованием PyGTK.
class Gui():
blah blah blah
def start(self):
if not self.window.get_visible(): # Если окно невидимо
self.window.set_visible(True) # Показываем его
self.window.set_child_visible(True) # Показываем дочерние виджеты (кнопки, label и т. д.)
urlopen(myurl).read()
self.text = database.preparation_results(tmp1)
blah blah blah
Как вы поняли, этот код отвечает за вызов окна, но он работает только один раз, во второй, третий и т. д. появляется пустое окно без виджетов.
Вот код для скрытия окна:
class Gui():
blah blah blah
def close_app(self, widget):
print 'Скрытие окна...'
self.window.set_visible(False) # Скрываем его
blah blah blah
Код ошибок не вызывает, всё работает, но окно пустое.
Заранее спасибо.

GUI » tkinter и scintilla » Дек. 8, 2011 01:43:58

привет.

скажите, есть ли реализация редактора типа Scintilla на пайтон, который может работать с tkinter?

спасибо.

Python проекты » Ищу разработчиков python! » Дек. 5, 2011 12:52:59

Всем привет!
ищу программистов на проект - постоянная работа, задач много, и сложных ;)
офис в центре питера, готовы обсуждать любые варианты сотрудничества

чуть больше конкретики - чего бы мы хотели от кандидата:
Опыт программирования на языке Python от двух лет;
Опыт программирования на языке Javascript от одного года, желательно знать jQuery;
Опыт работы с фреймворком Django;
Опыт работы с South, Celery, pdb;
Знание языка SQL, желательно знать тонкости MySQL;
Опыт работы с каким-либо NoSQL решением, желательно Redis

что делать:
Разработка программного обеспечения в команде программистов;
Разработка ERP, CRM и e-commerce решений, адаптация инноваций на российском рынке.

пишите в личку или на hr@boutique.ru

Python для экспертов » PyInstaller. file too big to fit on memory » Дек. 4, 2011 23:13:59

pyinstaller версии 1.6dev (trunk). Делаю .exe файл, ошибками при сборке не плюется. Сначала пробую запускать из wine. Там пишет : could not load L“Z:\\путь\к\моему\файлу.exe”: Bad EXE format for

При запуске в окошках пишет “file too big to fit on memory”.

Пробовал и с опцией –onefile и без нее, делал то же самое с версией 1.5.1, там соответственно с UPX и без него. ООчень долго гуглил, ничего ценного не нашел. Кто имел опыт, пожалуйста помогите.

GUI » PyQt, печать без QPrintPreviewDialog » Дек. 2, 2011 14:57:14

Добрый день!

Подскажите, как можно заставить, например, QWebview распечататься без предпросмотра?
Так же было бы неплохо убрать выбор принтера, но как в это случае можно указать его программно?

Спасибо!

Upd: разобрался. Можно удалять.

Центр помощи » Парашют » Ноя. 29, 2011 16:35:56

Вообщем была такая игра “парашют”. Заключалась она в том, что в центре экрана располагалась башня ,которая могла вращаться от 0 до 180 градусов, а сверху сбрасывался десант который предстояло отстреливать. Собственно такое задание мне задали на курсовую. Уже неделю убил на эту хрень, а прогресса все нет. Хотел спросить о помощи.

Задача заключается в том, что в окне 640х480 должны быть расположены две башни по бокам на оси y = y/2, которые могут двигать стволами орудий соответственно от 270 до 90 градусов и наоборот, а десант сбрасывался строго по центру в разном кол-ве не больше 5 и пересекая линию, где у = 320. Нанося при этом базе урон.

Звучало легко, а сделать что-то не получается.

Мое понимание:

Используя:
сlass CoordSysConverter:
def __init__(self, center):
self.center_x, self.center_y = center

# pygame -> polar
def pygame2polar(self, x, y):
rx, ry = self._pygame2cartesian(x, y)
return self._cartesian2polar(rx, ry)

# polar -> pygame
def polar2pygame(self, r, fi):
x, y = self._polar2cartesian(r, fi)
return self._cartesian2pygame(x, y)

# pygame -> cartesian
def _pygame2cartesian(self, x, y):
rx = x - self.center_x
ry = self.center_y - y
return rx, ry

# cartesian -> pygame
def _cartesian2pygame(self, x, y):
rx = x + self.center_x
ry = self.center_y - y
return rx, ry

# polar -> cartesian
def _polar2cartesian(self, r, fi):
x = r * math.cos(fi)
y = r * math.sin(fi)
return x, y

# cartesian -> polar
def _cartesian2polar(self, x, y):
r = math.sqrt(x**2 + y**2)

if r == 0:
return r, 0

if x == 0:
if y > 0:
return r, math.pi / 2
else:
return r, math.pi + math.pi / 2

fi = math.atan(y / x)
if x < 0:
fi += math.pi
if fi < 0:
fi += math.pi * 2

return r, fi
можно переводить координаты из pygame в декартову и полярные системы координат.
Получая при этом соответственно необходимый нам угол фи.

Далее в задумке было привязать в эвентах класса “башня” к какой либо кнопке изменения угла башни на pi/12 (15 градусов) и при начальном положении в 0 градусов. После проигрыша начальное положение башни соответственно 0. При этом снаряды должны были бы лететь под тем же углом, на который развернута башня, т.е. по прямой относительно ствола.


Вот тут то и начинается проблема т.к. реализовать этот кусок я не могу =/

вот оригинал убогого кода :D, но оптимизм еще теплица во мне.
import pygame
import time
import math


pygame.init()


#main def
def main():
#screen
size = 640, 480
screen = pygame.display.set_mode(size, pygame.DOUBLEBUF | pygame.HWSURFACE)
pygame.display.set_caption('Landing')


#process event

damage = False
done = False
a = 2
turretl = Turretl(size, a)
turretr = Turretr(size, a)
troop = Troop(size)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
turretl.events(event)
turretr.events(event)



#step
turretl.step()
turretr.step()
damage = turretl.step_bullets(troop) or turretr.step_ballets(troop)
if troop_dead():
a = a + 1

#rendering
if damage:
screen.fill((255, 0, 0))
damage = True
else:
screen.fill((255, 255, 255))
turretl.render(screen)
for bulletl in turretl.bullets:
bulletl.render(screen)


turretr.render(screen)
for bulletr in turretr.ballets:
bulletr.render(screen)

pygame.draw.line(screen, (255, 0, 0), (0, 340), (640, 340), 3)
pygame.display.flip()

#wait
time.sleep(0.20)
#Classes
class Troop:
def __init__(self, screen_size):
self.x = 320
self.y = 0
self.dy = 2
self.r = 10
self.screen_size = screen_size
self.pain = 0


def step(self):
self.y -= self.dy

def cross_line(self):
if self.y == 440:
return True
return False


def render(self, screen):
pygame.draw.circle(screen, (0, 50, 0), (self.x, self.y), self.r)

def troop_dead(self):
if self.pain <= 2:
self.pain += 1


def pain(self):
if self.pain >= 2.5:
return True
return False


class Turretl:
def __init__(self, screen_size, a):
self.x = 0
self.y = 320
self.damage = 0
self.screen_size = screen_size
self.bullets = []
self.r = 50
self.a = a


def events(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.y += 15
if event.key == pygame.K_DOWN:
self.y -= 15

elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and self.i == 2:
bulletl = Bulletl(self.screen_size, (self.x, self.y))
self.bullets.append(bulletl)
self.a -= 1

def step_bullets(self, troop):
damage = False
for i in reversed(range(0, len(self.bullets))):
self.bullets[i].step()
if self.bullets[i].is_out_of_screen():
self.bullets.pop(i)
elif self.bullets[i].in_troop(troop):
damage = True
self.bullets.pop(i)
troop.pain()
return damage



def step(self):
if self.damage > 0:
self.damage += 0.00001

def render(self, screen):
pygame.draw.circle(screen, (255, 40, 0), (self.x, self.y), self.r)
rect = pygame.Rect((self.x - 10, self.y - 10), (20, 20))
pygame.draw.rect(screen, (100, 100, 40), rect)

def damage(self):
if self.damage <= 10:
self.damage += 1


def death(self):
if self.damage > 10.5:
return True
return False

class Turretr:
def __init__(self, screen_size, a):
self.x = 480
self.y = 320
self.damage = 0
self.screen_size = screen_size
self.ballets = []
self.r = 50
self.a = a


def events(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_W:
self.y += 15
if event.key == pygame.K_S:
self.y -= 15

elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_P and self.a == 2:
bulletr = Bulletr(self.screen_size, (self.x, self.y))
self.ballets.append(bulletr)
self.a -= 1

def step(self):
if self.damage > 0:
self.damage += 0.00001

def render(self, screen):
pygame.draw.circle(screen, (255, 40, 0), (self.x, self.y), self.r)
rect = pygame.Rect((self.x - 10, self.y - 10), (20, 20))
pygame.draw.rect(screen, (100, 100, 40), rect)

def damage(self):
if self.damage <= 10:
self.damage += 1


def death(self):
if self.damage > 10.5:
return True
return False

def step_ballets(self, troop):
damage = False
for i in reversed(range(0, len(self.ballets))):
self.ballets[i].step()
if self.ballets[i].is_out_of_screen():
self.ballets.pop(i)
elif self.ballets[i].in_troop(troop):
damage = True
self.ballets.pop(i)
troop.pain()
return damage




class Bulletl:
def __init__(self, screen, pos):
self.x, self.y = pos
self.dx = 5
self.r = 4
self.screen_size = screen_size

def step(self):
self.x -= self.dx

def in_troop(self, troop):
if self.x + self.r > troop.x:
if self.y + self.r > troop.y and self.y - self.r < troop.y + troop.r:
return True
return False

def is_out_of_screen(self):
if (self.y - self.r) > self.screen_size[1]:
return True
return False

def in_turret(self, turretr):
if self.x + self.r > turretr.x:
if self.y + self.r > turretr.y and self.y - self.r < turretr.y + turretr.r:
return True
return False

def render(self, screen):
pygame.draw.circle(screen, (8, 80, 80), (self.x, self.y), self.r)



class Bulletr:
def __init__(self, screen, pos):
self.x, self.y = pos
self.dx = 5
self.r = 4
self.screen_size = screen_size

def step(self):
self.x += self.dx

def is_out_of_screen(self):
if (self.y - self.r) > self.screen_size[1]:
return True
return False

def in_turret(self, turretl):
if self.x + self.r > turretl.x:
if self.y + self.r > turretl.y and self.y - self.r < turretl.y + turretl.r:
return True
return False


def in_troop(self, troop):
if self.x + self.r > troop.x:
if self.y + self.r > troop.y and self.y - self.r < troop.y + troop.r:
return True
return False


def render(self, screen):
pygame.draw.circle(screen, (8, 80, 80), (self.x, self.y), self.r)

#class Land:
#def






#class Base:
#def __init__(self, screen_size):





#class Supertroop:
#def __init__():



class CoordSysConverter:
def __init__(self, center):
self.center_x, self.center_y = center

# pygame -> polar
def pygame2polar(self, x, y):
rx, ry = self._pygame2cartesian(x, y)
return self._cartesian2polar(rx, ry)

# polar -> pygame
def polar2pygame(self, r, fi):
x, y = self._polar2cartesian(r, fi)
return self._cartesian2pygame(x, y)

# pygame -> cartesian
def _pygame2cartesian(self, x, y):
rx = x - self.center_x
ry = self.center_y - y
return rx, ry

# cartesian -> pygame
def _cartesian2pygame(self, x, y):
rx = x + self.center_x
ry = self.center_y - y
return rx, ry

# polar -> cartesian
def _polar2cartesian(self, r, fi):
x = r * math.cos(fi)
y = r * math.sin(fi)
return x, y

# cartesian -> polar
def _cartesian2polar(self, x, y):
r = math.sqrt(x**2 + y**2)

if r == 0:
return r, 0

if x == 0:
if y > 0:
return r, math.pi / 2
else:
return r, math.pi + math.pi / 2

fi = math.atan(y / x)
if x < 0:
fi += math.pi
if fi < 0:
fi += math.pi * 2

return r, fi


class Ttower:
def __init__(self, csc, length, width, r):
self.csc = csc
self.length = 2
self.width = 1
self.fi = math.pi / 12

def set_fi(self, fi):
self.fi = fi


#def process_event(self, event):
#if event.type == pygame.KEYDOWN:
#if event.key == pygame.K_LEFT:



def render(self, screen):
center = self.csc.center_x, self.csc.center_y
end = self.csc.polar2pygame(self.length, self.fi)

center = int(center[0]), int(center[1])
end = int(end[0]), int(end[1])

pygame.draw.line(screen, (0, 0, 90), center, end, self.width)




main()
вот примерно такого образца должно выйти =( http://www.pers.ru/cgi-bin/play.cgi?file=20014949

Network » django-ckeditor и загрузка изображений на сервер. » Ноя. 28, 2011 10:10:23

Всем привет. Установил django-приложение “django-ckeditor” (http://pypi.python.org/pypi/django-ckeditor/0.0.9). При загрузке картинок и любых других файлов выдает ошибку:

IOError at /ckeditor/upload/
cannot identify image file

Но физически все файлы на сервер загружаются.

Скажите пожалуйста как с этим бороться???

Python для новичков » Читать по символьно из stdin. Перенос строки. » Ноя. 26, 2011 10:42:51

Привет.

Для чтения по символьно из консоли я использую следующий код.
cli.py
import sys
class _Getch:
"""Gets a single character from standard input. Does not echo to the screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()

def __call__(self):
ch = self.impl()
if ord(ch) == 127:
ch = '\x08'
sys.stdout.write('\x08\x20')
return ch

class _GetchUnix:
def __init__(self):
import tty, sys
self.text = ''
self.rch = ''

def __call__(self):
import sys, tty, termios, select
fd = sys.stdin.fileno()
fout = sys.stdout.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch

class _GetchWindows:
def __init__(self):
import msvcrt

def __call__(self):
import msvcrt
return msvcrt.getch()

getch = _Getch()
test_cli.py
#!/usr/bin/python
#coding:utf-8

from cli import getch
import sys

while True:
ch = getch.__call__()
sys.stdout.write(ch)
if ord(ch) == 90: break
И если запустить его python test_cli.py то он работает как мне нужно.
Но есть одна проблема. При вводе строки превышающей длину терминала, курсор переводится на следующую строку, это нормально. Но при удалении символа backspace'ом дойдя до начала строки, не переходит на предыдущую строку. И это понятно, потому как я здесь использую управляющий код ‘\x08’ “возврат на один символ назад”.
Вопрос в том, как можно переносить курсор на предыдущую строку?

Пробовал на Python 2.6.5 в Ubuntu

Django » Надо запустить Джанго проект на виртуальном хостинге. » Ноя. 25, 2011 19:28:29

Хлопцы, я в этом не специалист. Есть выделенный хостинг (пароль к ФТП и тэдэ) и папка с питоноджанговскими файлами. Нужно знать, куда кидать папку, чтобы хостинг видел питоновский код На хостинге Апач и wsgii мод. Если кто действительно захочет помочь, дам доступ к серваку. Зараннее спасибо.