AttributeError: 'NoneType' object has no attribute 'str' in suds
Question: I am using suds client for WSDL in our project.

i have this code .

    
    
    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)
    

when i run my program i got this error:

    
    
    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
    

I am sure that my code in my local and test are same.

I think the problem is in the `suds`, but i don't have any idea on how to
solve it.

Do anyone can help me in my case? thanks in advance ..

    
    
     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'
    

i really2x don't know why i got this error. Now I got the same error in my
local and my production. btw, when i separate the code and try to run. it runs
ok.

sudstest.py

    
    
    #!/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': 'development@yespayments.com.ph',
        'ClientIPAddress': 'http://127.0.0.1:8000/',
        'Notes': 'This is test',
    }
    
    print data
    result = client.service.OnlineTransaction(**data)
    print result.ResponseDescription
    


Answer: The bug is in suds. @okm was close, but the problem is really in
`Document.__str__`. However the bug is only exposed when using django-debug-
toolbar, as the logging panel shows all the messages that have been logged.
This triggers the suds bug.

I've created a patched version of suds that fixes this problem:
<https://github.com/bradleyayers/suds-htj>

**Edit:** My patch has now been merged into <https://github.com/htj/suds-htj>
– use that repository instead

