2012-03-10 5 views
5

프로젝트에서 WSDL에 suds 클라이언트를 사용하고 있습니다.AttributeError : 'NoneType'객체에 기질에 'str'속성이 없습니다.

이 코드가 있습니다. 나는이 오류가있어 내 프로그램을 실행할 때

sudsclient = sudsClient(settings.WSDL_URL) 
values = { 
            "MerchantCode": settings.YP_MERCHANT_CODE, 
            "MerchantReference": str(reference_id), 
            "TransactionType":settings.YP_TRANSACTION_TYPE, 
            "Amount":int(charged), 
            "CurrencyCode":client.currency, 
            "CardHolderName":str(form.cleaned_data['name_on_card']), 
            "CardNumber": str(form.cleaned_data['card_number']), 
            "ExpiryMonth":int(form.cleaned_data['exp_month']), 
            "ExpiryYear":int(form.cleaned_data['exp_year']), 
            "CardID":0, 
            "CardSecurityCode":str(form.cleaned_data['security_code']), 
            "CustomerAccountNumber":"", 
            "BillNumber":0, 
            "CardHolderEmail":str(form.cleaned_data['email']), 
            "ClientIPAddress":get_ip, 
            "Notes":"OK", 
              } 
response = sudsclient.service.OnlineTransaction(**values) 

는 :

Exception Type: AttributeError 
Exception Value:  
'NoneType' object has no attribute 'str' 
Exception Location: /usr/local/lib/python2.7/dist-packages/suds/sax/document.py in str, line 48 

을 내 로컬 및 테스트에 내 코드가 동일하다는 것을 확신합니다.

나는 문제가 suds에 있다고 생각하지만 해결 방법에 대해서는 전혀 모른다.

누구든지 내 도움을 줄 수 있습니까? 사전에 감사 .. 난이 오류가있어 이유를 모르겠어요 really2x

Environment: 

Request Method: GET 
Request URL: http://127.0.0.1:8000/1/book/save/?csrfmiddlewaretoken=05e5bdb542c3be7515b87e8160c347a0&check_in=2012-04-24&check_out=2012-04-25&no_of_nights=1&quantity=1&product=4&price=900.0&chargedMasterCard=180.0&chargedVisa=90.0&totalcostMasterCard=720.0&totalcostVisa=810.0&totalcost=900.0&charged=10.0&price_rate=1000.0&old_totalcost=1000.0&discount_charged=100.0&first_name=dsnmbmh&last_name=jhbjhb&email=jdlabandero%40agile.com.ph&contact=657879&address=gjkj&no_of_adult=1&no_of_kid=0&memo=&card_type=MasterCard&card_number=40000234234210&security_code=788&name_on_card=ghjk&exp_month=1&exp_year=2012 

Django Version: 1.3.1 
Python Version: 2.7.1 
Installed Applications: 
['admin_tools', 
'admin_tools.theming', 
'admin_tools.menu', 
'admin_tools.dashboard', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.humanize', 
'django.contrib.admin', 
'surebooked.booking', 
'surebooked.api', 
'surebooked.account_app', 
'surebooked.client_app', 
'surebooked.product_app', 
'surebooked.report_app', 
'debug_toolbar', 
'billing', 
'south', 
'paypal.standard.ipn', 
'django_extensions', 
'cms', 
'menus', 
'mptt', 
'south', 
'cms.plugins.text', 
'cms.plugins.picture', 
'cms.plugins.link', 
'cms.plugins.file', 
'cms.plugins.snippet', 
'cms.plugins.googlemap', 
'sekizai', 
'django.contrib.admin', 
'filer', 
'sorl.thumbnail', 
'easy_thumbnails', 
'cmsplugin_filer_file', 
'cmsplugin_filer_folder', 
'cmsplugin_filer_image', 
'cmsplugin_filer_teaser', 
'cmsplugin_filer_video', 
'media_tree', 
'django_cron'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.csrf.CsrfResponseMiddleware', 
'debug_toolbar.middleware.DebugToolbarMiddleware', 
'media_tree.middleware.SessionPostMiddleware', 
'cms.middleware.page.CurrentPageMiddleware', 
'cms.middleware.user.CurrentUserMiddleware', 
'cms.middleware.toolbar.ToolbarMiddleware') 


    Traceback: 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
     111.       response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/agileone/workspace/surebooked/surebooked/../surebooked/booking/views.py" in booking_save_page 
     752.        response = sudsclient.service.OnlineTransaction(**values) 
    File "/usr/local/lib/python2.7/dist-packages/suds/client.py" in __call__ 
     542.    return client.invoke(args, kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/suds/client.py" in invoke 
     595.   soapenv = binding.get_message(self.method, args, kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py" in get_message 
     120.   content = self.bodycontent(method, args, kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py" in bodycontent 
     63.    p = self.mkparam(method, pd, value) 
    File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py" in mkparam 
     105.    return Binding.mkparam(self, method, pdef, object) 
    File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py" in mkparam 
     287.   return marshaller.process(content) 
    File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py" in process 
     62.    self.append(document, content) 
    File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py" in append 
     73.   log.debug('appending parent:\n%s\ncontent:\n%s', parent, content) 
    File "/usr/lib/python2.7/logging/__init__.py" in debug 
     1120.    self._log(DEBUG, msg, args, **kwargs) 
    File "/usr/lib/python2.7/logging/__init__.py" in _log 
     1250.   self.handle(record) 
    File "/usr/lib/python2.7/logging/__init__.py" in handle 
     1260.    self.callHandlers(record) 
    File "/usr/lib/python2.7/logging/__init__.py" in callHandlers 
     1300.      hdlr.handle(record) 
    File "/usr/lib/python2.7/logging/__init__.py" in handle 
     744.     self.emit(record) 
    File "/home/agileone/workspace/surebooked/surebooked/.ve/src/django-debug-toolbar/debug_toolbar/panels/logger.py" in emit 
     51.    'message': record.getMessage(), 
    File "/usr/lib/python2.7/logging/__init__.py" in getMessage 
     328.    msg = msg % self.args 
    File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py" in __str__ 
     58.   return unicode(self).encode('utf-8') 
    File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py" in __unicode__ 
     61.   return self.str() 
    File "/usr/local/lib/python2.7/dist-packages/suds/sax/document.py" in str 
     48.   s.append(self.root().str()) 

    Exception Type: AttributeError at /1/book/save/ 
    Exception Value: 'NoneType' object has no attribute 'str' 

. 이제 로컬 및 프로덕션에서 동일한 오류가 발생합니다. btw, 코드를 분리하고 실행 해보십시오. 괜찮아.

sudstest.py이 결여에 의한 것 같다

그래서
def root(self): 
    if len(self.children): 
     return self.children[0] 
    else: 
     return None 

#!/usr/bin/env python 
import os 
from suds.client import Client as abo 

WSDL = 'DirectConnect.production.wsdl' 

#def test_api(): 
url = 'file://' + os.path.join(os.path.abspath(os.path.dirname(__file__)), WSDL) 
print url 
client = abo(url) 

data = { 
    'MerchantCode': 'HELLO', 
    'MerchantReference': '3252', 
    'TransactionType': 20, 
    'Amount': 10, 
    'CurrencyCode': 'USD', 
    'CardHolderName': 'RAUL O REVECHE', 
    'CardNumber': 4005550000000001, 
    'ExpiryMonth': 5, 
    'ExpiryYear': 2013, 
    'CardID': 0, 
    'CardSecurityCode': 400, 
    'CustomerAccountNumber': '', 
    'BillNumber': 0, 
    'CardHolderEmail': '[email protected]', 
    'ClientIPAddress': 'http://127.0.0.1:8000/', 
    'Notes': 'This is test', 
} 

print data 
result = client.service.OnlineTransaction(**data) 
print result.ResponseDescription 
+0

전체 역 추적하십시오 다음을 사용하여 디버그 툴바의 개발 버전을 사용할 수 있습니다. – jpic

+0

지금 내 로컬 및 프로덕션에서 동일한 오류가 있습니다. – gadss

답변

2

예외가 suds.sax.Document에 다음과 같이 self.root에 의해 반환되는 없음 값으로 caued되고, 일부 데이터 필드. 로컬 컴퓨터에서 테스트 서버에 기입 한 정확한 데이터를 다시 재생하면 도움이 될 수 있습니다. 또한 테스트 서버에서 Django 설정이 로컬 설정과 유사한 지 확인하십시오.

+1

답장을 보내 주셔서 감사합니다. okm ... 내 설정을 확인하려고하는데 아무런 문제가 없습니다 ... – gadss

0

테스트 서버에서이 문제가 발생했습니다. IP 주소가 WSDL 서버에 의해 차단되므로 프로세스를 수행 할 때 WSDL 서버가 테스트 서버에 오류를 반환합니다.

0

이 버그를 사라지게하려면 내 설정에서 INTERNAL_IPS를 주석 처리해야했습니다. 거의 이해가되지 않지만, 이것이 다른 누군가를 돕기를 바랍니다. =)

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 설정에 INTERNAL_IPS이 없습니다. – gadss

+0

툴바를 사용 중지 해보세요. 어둠 속에서 쐈어. 내 INTERNAL_IPS 설정은 장고 - 디버그 - 툴바를 사용하지 않도록 설정해야했기 때문에 관련성이 있습니다. 나는 똑같은 상황을 겪었습니다. 독립 실행 형 Python이 잘 돌아 갔지만, 내 응용 프로그램에서 폭발했습니다 ... 도움이되기를 바랍니다. – bahoo

12

버그가 있습니다. @okm은 가깝지만 문제는 실제로 Document.__str__입니다. 그러나 로깅 패널에 로깅 된 모든 메시지가 표시되므로 django-debug-toolbar를 사용할 때만 버그가 노출됩니다. 이것은 비눗물 버그를 유발합니다. https://github.com/bradleyayers/suds-htj

편집 :

나는이 문제를 해결 비눗물의 패치 버전을 만든 내 패치가 지금 https://github.com/htj/suds-htj로 통합되었습니다 - 대신 bradley.ayers @

+0

감사합니다.이 수정은 suds를 App Engine에서 실행하는데도 필요했습니다. 건배! –

+3

나는 최신 SUDS가 여기에 유지된다고 생각한다. https://bitbucket.org/jurko/suds'pip install suds-jurko' – benjaoming

+0

@ bradley.ayers 나는 Django 커스텀 관리 명령으로 같은 문제에 직면하고있다. 이견있는 사람? – Conans

0

잘입니다 저장소를 사용 . 이 문제는 suds 라이브러리에 있습니다. 내 셀러리 작업에 suds == 0.4를 사용하고 있습니다.

일시적인 해결책 : celeryd 프로세스의 로그 레벨을 DEBUG에서 INFO로 다시 전환했을 때 문제가 발생했습니다.

2

@ bradley.ayers에 따르면 문제는 suds 라이브러리 (죽었습니다)에 있습니다.관련 코드 주위에 try-catch 문을 추가하여 https://github.com/htj/suds-htj

그러나, 문제는 디버그 도구 모음 (> 0.9.4) 이후 버전 fixed을하고있다 : 당신은 그가 제시 포크를 사용할 수 있습니다.

pip install django-debug-toolbar==dev 

하거나 또는 단순히 시도 - 캐치 모듈 초기화 파일 어딘가에서 자신을 차단 원숭이 - 패치 :

import debug_toolbar.panels.logger 

original_emit = debug_toolbar.panels.logger.ThreadTrackingHandler.emit 
def emit(self, record): 
    try: 
     original_emit(self, record) 
    except: 
     pass 
debug_toolbar.panels.logger.ThreadTrackingHandler.emit = emit 
관련 문제