Hi,

First, please update to the latest version of Spyne.

I did not add support for the File type to Soap as the Xml Schema standard doesn't have a File primitive. You can have binary data sent into Spyne code via SOAP using the ByteArray (==base64binary) type.

By the way, Spyne's MTOM code is not working (doesn't even have tests). Patches are welcome :)

Best,
Burak

On 12/17/12 11:16, Gopalakrishna Bhat wrote:
Hi all,

I am trying to use spyne to build a service that uploads a file. Following the example at https://github.com/arskom/spyne/tree/master/examples/file_manager I have the following code

class MyService(ServiceBase):
@rpc(Unicode, Unicode, spyne.model.binary.File.customize(min_occurs=1, nullable=False), _returns=Unicode)
def add(ctx, person_type, action, file):
try:
os.makedirs('./files')
except OSError:
pass
log.info <http://log.info>("Person Type: %r" % person_type)
log.info <http://log.info>("Action: %r" % action)
os.path.abspath('./files')
path = os.path.join(os.path.abspath('./files'), file.name <http://file.name>)
log.info <http://log.info>("Path: %r" % file.name <http://file.name>)
if not path.startswith(os.path.abspath('./files')):
raise ValidationError(file.name <http://file.name>)

f = open(path, 'w') # if this fails, the client will see an
                            # # internal error.

try:
for data in file.data:
f.write(data)

log.debug("File written: %r" % file.name <http://file.name>)

f.close()

except:
f.close()
os.remove(file.name <http://file.name>)
log.debug("File removed: %r" % file.name <http://file.name>)
raise # again, the client will see an internal error.

return "gk."
services = csrf_exempt(DjangoApplication(Application([MyService],
        'services',
            in_protocol=Soap11(),
            out_protocol=Soap11(),
    )))
I am accessing the service via C# .NET and on the server side I get this exception [17/Dec/2012 14:03:14] ERROR [spyne.application:137] 'NoneType' object has no attribute 'name'
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\spyne-2.8.0_rc-py2.7.egg\spyne\application.py", line 109, in process_request
    ctx.out_object = self.call_wrapper(ctx)
File "C:\Python27\lib\site-packages\spyne-2.8.0_rc-py2.7.egg\spyne\application.py", line 153, in call_wrapper
    return ctx.service_class.call_wrapper(ctx)
File "C:\Python27\lib\site-packages\spyne-2.8.0_rc-py2.7.egg\spyne\service.py", line 198, in call_wrapper
    return ctx.function(ctx, *ctx.in_object)
File "D:\DevWorks\SupporTrac\SupporTrac\SupporTrac\SupporTracWebApp\views.py", line 362, in add path = os.path.join(os.path.abspath('./files'), file.name <http://file.name>)
AttributeError: 'NoneType' object has no attribute 'name'

Can anyone point me as to what am I doing wrongly?

BTW basic service without attachments are working fine

-Gopal

--
My blog http://gkbhat.blogspot.com


_______________________________________________
Soap mailing list
[email protected]
http://mail.python.org/mailman/listinfo/soap

_______________________________________________
Soap mailing list
[email protected]
http://mail.python.org/mailman/listinfo/soap

Reply via email to