summaryrefslogtreecommitdiffstats
path: root/test/python/test-client.py
Commit message (Collapse)AuthorAgeFilesLines
* 2005-11-27 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-271-0/+1
| | | | | | | | | | * python/dbus_bindings.pyx: Repair my previous commit which reverted part of the preceding one. Oops. Merge patch by Johan Hedberg <johan.hedberg@nokia.com> to fix marshalling of 16-bit integer values on big-endian platforms. * test/python/test-client.py: Add some 16-bit integers to the test values.
* 2005-11-27 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-271-2/+3
| | | | | | | | | | | * python/dbus_bindings.pyx: Fix a bug where doing a strict append with type v of an instance of dbus.Variant(foo, type='x') caused it to be boxed twice before sending over the bus. * python/dbus_bindings.pyx, python/service.py, test/python/test-client.py: Update the constants for the new request_name flags, and update comments/test cases now that queueing is the default action.
* 2005-11-15 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-151-0/+9
| | | | | | | | | | | | | | | | | | | | | | | * bus/driver.c, bus/services.c, bus/services.h: Add a ReleaseName method to org.freedesktop.DBus to release a bus name or give up waiting in the queue for it. * dbus/dbus-bus.c, dbus/dbus-bus.h, dbus/dbus-shared.h: Add a dbus_bus_release_name method to send the ReleaseName method calls. Add constants for the return values to dbus/dbus-shared.h. * doc/dbus-specification.xml: Document the new ReleaseName method in the specification. * python/dbus_bindings.pyx: Add a low-level python binding for the release name method. * python/exceptions.py, python/service.py: Make freeing BusName objects release the name. Add a NameExistsException, and fix a bug with creating UnknownMethodException. * test/python/test-client.py: Add tests for freeing BusName objects causing names to be released.
* 2005-11-14 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-141-0/+5
| | | | | | | | | | * python/decorators.py, python/service.py: Add a new argument to the dbus.service.method decorator called sender_keyword, which if set, specifies the name of an argument which will be provided the bus name of the method caller. * test/python/test-client.py, test/python/test-service.py: Add a method and test to check the sender_keyword functionality.
* 2005-11-07 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-071-13/+33
| | | | | | | | | | | | | | | | | | | | * python/decorators.py: Change emit_signal function to use the signature annotation of the signal when marhsalling the arguments from the service. Fix a bug where the code checking signature length against argument length referenced the wrong variable. * python/introspect_parser.py: Avoid adding the type signature of signal arguments to any methods which occur after them in the introspection data (!) by making the parser a little more careful about its current state. * python/service.py: Remove debug prints from last commit (again :D). * test/python/test-client.py, test/python/test-service.py: Add test signals with signature decorators to test the strict marshalling code gives errors at the right time. Could do with checking the signals actually get emitted too, given that the test does nothing with signals at the moment...
* 2005-11-07 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-071-0/+60
| | | | | | | | | | | | | | | | | | | | | | | | * python/_dbus.py: Add WeakReferenceDictionary cache of dbus.Bus instances to stop madness of creating new instances representing the same bus connection all the time, rendering any tracking of match rules and bus names quite meaningless. Caught a bug where the private argument to SessionBus() and friends was being passed in as use_default_mainloop by mistake. Still some problems with multiple dbus_binding.Connection instances representing the same low-level connection (eg when you use both SessionBus() and StarterBus() in same process), but it's a lot better now than it was. * python/dbus_bindings.pyx: Add constants with the return values for bus_request_name(). * python/service.py: Store bus name instances in a per-dbus.Bus cache and retrieve the same instances for the same name, so deletion can be done with refcounting. Also now throws some kind of error if you don't actually get the name you requested, unlike previously... * test/python/test-client.py: Add tests for instance caching of buses and bus name objects.
* 2005-11-04 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-041-0/+16
| | | | | | | | | | | | | | | | | | | | | | | * python/dbus_bindings.pyx, test/python/test-client.py: Fix marshalling of boolean values. Add some booleans to the values in the test client. * python/decorators.py, python/service.py: Add an 'async_callbacks' argument to the dbus.service.method decorator, which allows you to name arguments to take two callback functions for replying with return values or an exception. * test/python/test-client.py, test/python/test-service.py: Add test case using asynchronous method reply functions, both return values and errors, and from within both the function itself and from a mainloop callback. * python/decorators.py, python/service.py: Perform checking that the number of method/signal arguments matches the number of types in the signature at class loading time, not when you first introspect the class. * python/service.py: Remove debug print left by the last commit.
* 2005-11-03 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-031-4/+7
| | | | | | | | | | | | | | | | | | * python/service.py: Heavy refactoring of method invocation, with hopefully no effect on functionality. Nuked _dispatch_dbus_method_call in favour of a new _message_cb that uses seperate functions for looking up the method to call, marshalling the return values, and sending exceptions as errors, and is easier to follow as a consequence. Fixes some corner cases about returning things that don't match your declared out_signature, allows exceptions to define _dbus_error_name and have it be sent over the bus as the error name, and paves the way for cool stuff like heeding the message no reply flag, asynchronous method implementations, informing the method of the sender, and including backtraces in the error messages. * test/python/test-client.py: Catch and print exceptions thrown in the async callback tests, rather than passing them to the low-level bindings to be ignored in a noisy and frustrating manner.
* 2005-11-03 Robert McQueen <robot101@debian.org>Robert McQueen2005-11-031-1/+1
| | | | | | | | * python/_dbus.py, python/proxies.py, python/service.py: Add __repr__ functions to dbus.Bus, dbus.service.BusName and dbus.service.Object, tweak others to be consistent. * test/python/test-client.py: Tweak output of testInheritance.
* 2005-10-29 Robert McQueen <robot101@debian.org>Robert McQueen2005-10-291-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * python/service.py: Major changes to allow multiple inheritance from classes that define D-Bus interfaces: 1. Create a new Interface class which is the parent class of Object, and make the ObjectType metaclass into InterfaceType. 2. Patch written with Rob Taylor to replace use of method_vtable with code that walks the class's __MRO__ (method resolution order) to behave like Python does when invoking methods and allow overriding as you'd expect. Code is quite tricky because we have to find two methods, the one to invoke which has the right name and isn't decorated with the /wrong/ interface, and the one to pick up the signatures from which is decorated with the right interface. The same caveats apply as to normal multiple inheritance - this has undefined behaviour if you try and inherit from two classes that define a method with the same name but are decorated with different interfaces. You should decorate your overriding method with the interface you want. 3. Replace grungy introspection XML generation code in the metaclass with dictionaries that cope correctly with multiple inheritance and the overriding of methods. This also uses the signature decorations to provide correct introspection data, including the debut appearance of the types of your return values. :D * test/python/test-client.py, test/python/test-service.py: Add a test case to try invoking an method that overrides one inherited from a D-Bus interface class.
* 2005-10-29 Robert McQueen <robot101@debian.org>Robert McQueen2005-10-291-1/+40
| | | | | | | | | | | | | | | | | | | | | | | * python/decorators.py: Add optional arguments to the method and signal decorators to allow you to specify the signature of arguments and return values. Preserve the doc strings of signal functions in the decorated version, for pydoc and friends. * python/dbus_bindings.pyx, python/proxies.py: Replace the parse_signature_block function with an iterable dbus.Signature() type. Fix a bug in MessageIter.append_strict where you could append anything by claiming it was a string. * python/service.py: Use the out_signature decoration on methods to marshal return values, meaning you no longer require dbus.Array() or dbus.Dictionary() to indicate the type when returning empty arrays or dictionaries. Fix a bug where exceptions which are defined in __main__ are not turned into error replies. * test/python/test-client.py, test/python/test-service.py: Add test for correct marshalling of return values according to out_signature. Fix a bug in the async call test where the error_handler is missing a self argument.
* 2005-10-24 Robert McQueen <robot101@debian.org>Robert McQueen2005-10-241-0/+2
| | | | | | | | | | | | | | * python/dbus_bindings.pyx (String, MessageIter): make D-Bus strings derive from unicode instead of str, and encode/decode UTF-8 when marshalling/unmarshalling bus messages * python/introspect_parser.py: encode introspection data as UTF-8 before passing the buffer into libxml2 * test/python/test-client.py: add unicode test strings * test/data/valid-service-files/.cvsignore, test/python/.cvsignore: ignore generated python test files
* * glib/dbus-gvalue-utils.c (hash_free_from_gtype): handle gdoubleJohn (J5) Palmieri2005-10-181-8/+3
| | | | | | | | | | | | | | | | | | | | | | | | | and G_TYPE_VALUE_ARRAY (DBUS_TYPE_STRUCT) (gvalue_from_hash_value, hash_value_from_gvalue): handle gdouble * glib/dbus-gvalue.c (dbus_gvalue_to_signature): add missing DBUS_STRUCT_BEGIN_CHAR and DBUS_STRUCT_END_CHAR charaters when constructing struct signatures * python/_dbus.py (Bus): handle private connections using the private keyword in the constructor. defaults to private=False (Bus::close): new method to close a connection to the bus * python/dbus_bindings.pyx (Connection::close): renamed method was previously called disconnect (bus_get): now supports getting a private connection * python/proxies.py (ProxyMethod::__call__): check if ignore_reply keyword is set to True. if it is, execute the method without waiting for a reply (ProxyObject::_introspect_execute_queue): new method for executing all the pending methods that were waiting for the introspect to finish. this is called when introspect either succeeds or fails (ProxyObject::_introspect_error_handler): call queued methods
* * python/dbus_bindings.pyx (MessageIter::append_strict): check forJohn (J5) Palmieri2005-10-141-2/+12
| | | | | | | | | | | | | | | | STRUCT_BEGIN not TYPE_STRUCT in indicate we are marshalling a struct * python/service.py (Object::_message_cb): handle exceptions correctly by sending them over the wire to the calling app. This makes sure the client returns immediately instead of waiting the 15 seconds to timeout. * test/python/test-client.py (TestDBusBindings::testBenchmarkIntrospect): Add a test to benchmark how long it takes to introspect a service and call a method which returns a large element (pretty fast) * test/python/test-service.py (TestObject::GetComplexArray): new test method which pushes a lot of data
* * glib/dbus-gvalue.c (marshal_variant): call _dbus_gvalue_marshalJohn (J5) Palmieri2005-10-051-11/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | instead of marshal basic so we can handle recursive types in a variant * test/glib/test-dbus-glib.c: Add test for marshaling recurive types in variants * test/glib/test-service-glib.c, test-service-glib.xml (my_object_echo_variant [EchoVariant], my_object_process_variant_of_array_of_ints123 [ProcessVariantOfArrayOfInts123]): Add two test methods * python/introspect_parser.py: New module for parsing introspect data. * python/dbus_bindings.pyx: (various places): when throwing errors fix to use errormsg instead of message local variable because Pyrex can get confused with other message variables (initial patch by Robert McQueen <robert.mcqueen at collabora.co.uk>) (MessageIter::parse_signature_block): new method for getting the next block in a signiture. (MessageIter::append_strict): new method for appending values strictly using the passed in signature instead of guessing at the type (MessageItter:: append_dict, append_struct, append_array): use signatures to marshal children if the signature is available * python/exceptions.py (IntrospectionParserException): new exception * python/proxies.py (ProxyMethod::__call__): Marshal args with introspected signatures if available, else we fall back to the old way of doing things. (ProxyObject::_introspect_reply_handler ): parse introspection data * python/service.py (ObjectType::_reflect_on_method): Properly terminate <method> if there are no args in the reflection data * test/python/test-client.py: add tests for talking with the GLib test server. This gives us better coverage for introspection since python to python will always generate arguments as variants. It also allows us to test the robustness of the GLib bindings and interlanguage communications.
* * python/Makefile.am: Break on pyrexc errors instead of ignoring themJohn (J5) Palmieri2005-09-011-30/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * python/dbus_bindings.pyx: Memory management foo (global): remove hacky _user_data_references global list (GIL_safe_cunregister_function_handler): userdata now stuffed into tuples. Unref user_data (GIL_safe_cmessage_function_handler): userdata now stuffed into tuples (Connection::__del__): Remove and replace with __dealloc__ method (Connection::add_filter): Stuff user_data into a tuple. Use Py_INCREF to keep tuple from being deallocated instead of the global var hack (Connection::register_object_path): Stuff user_data into a tuple. Use Py_INCREF to keep tuple from being deallocated instead of the global var hack (Connection::register_fallback): Stuff user_data into a tuple. Use Py_INCREF to keep tuple from being deallocated instead of the global var hack (GIL_safe_pending_call_notification): Don't unref the message because it gets unreffed when going out of scope. Py_XDECREF the user_data (PendingCall::__del__): Remove and replace with __dealloc__ method (PendingCall::set_notify): ref the pending call because we will need it to stick around for when the notify callback gets called (Message::__del__): Remove and replace with __dealloc__ method * python/dbus_glib_bindings.pyx (init_gthreads): Changed to gthreads_init to match up with the dbus call * python/glib.py (init_threads): Changed to threads_init to match up with gobject.threads_init(). init_threads is kept for backwards compat but will most likely be deprecated in the future * test/python/test-client.py: - revamp to use Python's unittest functionality - add async call tests - setup threads in glib and dbus so we make sure locks are working
* * s/Message(_create=0)/EmptyMessage everywhere elseJohn (J5) Palmieri2005-08-261-0/+2
| | | | | | * test/python/test-{server|client}.py: add the python/.libs directory to the lookup path so dbus_bindings and dbus_glib_bindings don't get picked up from the system
* * test/python: Add python regression testJohn (J5) Palmieri2005-08-251-0/+52
* configure.in: Add test/python/Makefile * test/Makefile.am: Add the python directory to SUBDIRS