Metadata-Version: 1.1
Name: rabbitrpc
Version: 0.5.1
Summary: RabbitMQ/AMQP-based RPC Client/Server Library
Home-page: https://github.com/nwhalen/rabbitrpc
Author: Nick Whalen
Author-email: nickw@mindstorm-networks.net
License: Apache License 2.0
Download-URL: https://github.com/nwhalen/rabbitrpc/tarball/master
Description: =========
        RabbitRPC
        =========
        :Author: Nick Whalen <nickw@mindstorm-networks.net>
        
        RabbitRPC is an RPC over AMQP framework.  It allows the user to worry less about how he's doing remote method calls and
        more about her/his actual code.  It was written to scratch an itch that developed during the development of a much
        larger software project which needed a highly scalable internal API.
        
        The framework is currently a work in progress.  The basic client and server have been written/tested, but lack anything
        that make the framework 'feel' more like the method calls we're used to.  The next goal is to provide an additional
        layer on top of the existing client/server that will actually provide a dynamic interface which would allow you to
        do something like this on the client side::
        
            import rpcclient
        
            foo_class = rpcclient.RPCClient('remote_api_module_name', '/path/to/config/file')
            return_value = foo_class.remote_api_method()
        
        This will happen via server-side method registration.  The RPC server will keep track of all public methods and, at
        the request of the RPC client, provide a list of these methods and their parameters.  The RPC client will them use
        this list to dynamically build a stubbed out class.  The stubs will call a translation method which will translate and
        pickle the method call and send it to the RPC request queue.  A RPC worker can then take the API request package,
        process it, and return the results via the RPC server library.
        
        Future plans also include the ability for the RPC workers to be versioned.  This means you can spin up separate worker
        hives for varying implementations of your API.
        
        
        Example
        =======
        **RPC Server**::
        
            from rabbitrpc import rpcserver
        
            def rpc_callback(method_info):
                # Based on the data in method_info, select which method to call
                # Call it
                # Return the results
        
            self.rpc_server = rpcserver.RPCServer(rpc_callback, 'RPCRequestQueue')
        
            try:
                self.rpc_server.run()
            finally:
                self.rpc_server.stop()
        
        **RPC Client**::
        
            from rabbitrpc import rpcclient
        
            rpc_client = rpcclient.RPCClient('RPCRequestQueue', reply_timeout=3000)
        
            request = # API call definition, any pickleable structure
        
            reply = rpc_client.send(request)
        
            print 'API REPLY: %s' % reply
        
        
        Dependencies
        ============
        
        * `pika`: http://pypi.python.org/pypi/pika
        
        **Tests Only:**
        
        * `pytest`: http://pypi.python.org/pypi/pytest
        * `mock`: http://pypi.python.org/pypi/mock
        
        
        License
        =======
        Licensed under the Apache License, Version 2.0 (the "License");
        you may not use this file except in compliance with the License.
        You may obtain a copy of the License at
        
        http://www.apache.org/licenses/LICENSE-2.0
        
        Unless required by applicable law or agreed to in writing, software
        distributed under the License is distributed on an "AS IS" BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        See the License for the specific language governing permissions and
        limitations under the License.
        
Keywords: rabbitmq rpc amqp
Platform: Any
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires: pika (>=0.9.8)
Provides: rabbitrpcclient
Provides: rabbitrpcserver
