Использование Ladon в Python 2.6 в windows

Я пытался создать веб-службу из некоторых скриптов Python, и, похоже, мне не очень повезло. Я новичок в веб-сервисах в целом, но мне бы очень хотелось разобраться в этом. Я нахожусь в Windows 7 и использую IIS7. Сервис также должен быть SOAP.

Я прочитал большинство сообщений, которые имеют какое-либо отношение к python и SOAP, и опробовал почти все различные библиотеки, но большинство из них просто кажутся мне непосильными (особенно ZSI / SOAPpy). Библиотека Ladon кажется лучшей (и самой простой) для того, что мне нужно, но учебник http://www.youtube.com/watch?v=D_JYjEBedk4&feature=feedlik теряет меня в 5:10, когда приносит его на сервер. Когда я набираю ladon2.6ctl в cmd, мне кажется, что окна сильно запутались. Я предполагаю, что это немного другое, потому что он работает в Linux и использует Apache.

При этом мы будем очень благодарны за любые советы о том, как запустить веб-службу python на «материалах» Microsoft, поскольку я слишком долго пытался разобраться в этом материале.

Следует отметить, что причина такой специфичности (и кажущейся странности) заключается в том, что имеющиеся у меня скрипты выполняют большую часть геообработки с помощью ESRI arcpy.

--Добавление--

Traceback on localhost:8080/TestService:
Traceback (most recent call last):
  <br>File "c:\Python26\ArcGIS10.0\lib\site-packages\ladon-0.5.1-py2.6.egg\ladon\server\wsgi_application.py", line 229, in __call__
    exec("import %s" % ','.join(self.service_list))
  File "<string>", line 1, in <module>
  File "c:\Users\r\workspace\ladon\src\testspace.py", line 3, in <module>
    class TestService2(object):
  File "c:\Users\r\workspace\ladon\src\testspace.py", line 4, in TestService2
    @ladonize(int,int,rtype=int)
  File "c:\Python26\ArcGIS10.0\lib\site-packages\ladon-0.5.1-py2.6.egg\ladon\ladonizer\decorator.py", line 87, in decorator
    ladon_method_info = global_service_collection().add_service_method(f,*def_args,**def_kw)
  File "c:\Python26\ArcGIS10.0\lib\site-packages\ladon-0.5.1-py2.6.egg\ladon\ladonizer\collection.py", line 119, in add_service_method
    sinfo = self.source_info(src_fname)
  File "c:\Python26\ArcGIS10.0\lib\site-packages\ladon-0.5.1-py2.6.egg\ladon\ladonizer\collection.py", line 79, in source_info
    a = ast.parse(src)
  File "c:\Python26\ArcGIS10.0\lib\ast.py", line 37, in parse
    return compile(expr, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
     from ladon.ladonizer import ladonize

^
 SyntaxError: invalid syntax

образец кода:

from ladon.ladonizer import ladonize

class TestService2(object):
    @ladonize(int,int,rtype=int)
    def sum(self,a,b):
        '''add two numbers<br>
        param a: number 1
        param b: number 2
        rtype: sum of result
        '''
        return a+b

person Royce    schedule 09.07.2011    source источник


Ответы (2)


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

Вы писали, что ladon2.6ctl запуталась. У вас есть исключение Traceback?

person Jakob Simon-Gaarde    schedule 10.07.2011
comment
Я только что установил Ладон на окна. Оказалось, что был импорт системного журнала в 3 разных модуля ladon, которые я использовал несколько месяцев назад для отладки класса LadonWSGIApplication. Этот импорт системного журнала должен был быть удален после того, как я закончил, но я забыл. В любом случае функции системного журнала нигде не используются, поэтому вы можете просто удалить их локально - ladon / interfaces / jsonwsp.py [6] ladon / dispatcher / dispatcher.py [7] ladon / server / wsgi_application.py [37]. Я, конечно, удалил импорт из дерева исходников на launchpad.net, поэтому следующий выпуск Ladon 0.6.1, запланированный на 1 августа, должен работать из коробки. - person Jakob Simon-Gaarde; 10.07.2011
comment
Я взял на себя смелость добавить это как ошибку - это правильный способ ходите с чемоданом вроде вашего. Надеюсь, это помогло :-) Ladon в действии в Windows - person Jakob Simon-Gaarde; 10.07.2011
comment
Я добавил трассировку к вопросу, большое спасибо за помощь. - person Royce; 10.07.2011
comment
Последняя трассировка выглядит как синтаксическая ошибка в вашем модуле класса обслуживания - возможно, ошибка отступа. Попробуйте запустить интерпретатор Python и вручную импортировать модуль. Вы загружаете свой сервисный модуль на pastebin.com, если хотите, чтобы я его посмотрел. - person Jakob Simon-Gaarde; 11.07.2011
comment
он находится на pastebin.com в течение 24 часов под названием Ladon and Python. Не думаю, что это ошибка отступа. Если ошибка в первой строке, возможно, проблема с импортом ladon? Еще раз спасибо за вашу помощь. - person Royce; 11.07.2011
comment
ок, Ройс, я вижу, что это ошибка python2.6. Я сейчас выясню, почему это происходит. Проверьте через час :-) - person Jakob Simon-Gaarde; 11.07.2011
comment
По какой-то причине неизвестный модуль ast в python2.6 не принимает \r\n в качестве перевода строки при синтаксическом анализе. Но все версии python после этого работают, поэтому python 2.7 будет работать для примера, который вы мне прислали. В качестве альтернативы вы можете убедиться, что используемый вами редактор использует \n в качестве перевода строки, что решит проблему в python 2.6. - person Jakob Simon-Gaarde; 11.07.2011
comment
Хм. так это Python 2.6, а не я? От этого мне наверняка легче. К сожалению, я не смогу использовать Python 2.7 до выхода ArcGIS 10.1 в начале следующего года. Кроме того, я использую Eclipse SDK, имеет ли это вообще значение? - person Royce; 11.07.2011
comment
Нет, это не вы. Надеюсь, теперь у вас все работает. Не забудьте использовать веб-сервер с поддержкой WSGI, когда вы начнете производство. ladon2.6ctl serve следует использовать только для тестирования вашей веб-службы. - person Jakob Simon-Gaarde; 11.07.2011
comment
Неважно, какую IDE вы используете - просто убедитесь, что редактор IDE сохраняет файлы с \n - Eclipse: stackoverflow.com/questions/2374728/ - person Jakob Simon-Gaarde; 11.07.2011

Чтобы обобщить исправление для всех, кто интересуется, удалите «импорт системного журнала» из этих 3 модулей ladon:
ladon / interfaces / jsonwsp.py - строка 6
ladon / dispatcher / dispatcher.py - строка 7
ladon / server / wsgi_application.py - строка 37

Затем вам нужно изменить перевод строки с окна по умолчанию / r / n на / n. В Eclipse перейдите в Window -> Preferences -> General, затем выберите (не раскрываясь) вкладку Workspace. В правом нижнем углу выберите «Другое» в разделе «Новый разделитель строк текстового файла» и измените его на Unix.

person Royce    schedule 11.07.2011
comment
Большое спасибо за помощь, Якоб. - person Royce; 12.07.2011