any_srv (async server for whatever you want --default metakit)

J

john

Any_srv is a simple rpc library that is based off of async_chat. It
grew out of the desire to make metakit available to other processes
without have to manually expose all of it and to keep in sync with
future library changes.

To do this the client is 100% stupid. It has no knowledge about the
library and the server knows nothing except for importing it. This
means it could just as easily "serve" the string library as well as a
metakit database.

How it is managed is by using __getattr__ to capture requests in the
client process and remote them to the server. Anything that is
pickelable is sent back to the client. Otherwise effectively a
reference is sent back that the client can refer to. Iteratorable
libraries are also supported. So if you make a database request (like
in metakit), you can iterate through it's rows and get the data back
in chunks.

Start the server with:
python any_srv.py

Here is example client code:
String library exposed:

mclient=any_srv.Client()
print mclient.split('fred barney wilma')
['fred', 'barney', 'wilma']
print mclient.join(['betty','bambam','dino'])
betty bambam dino

And just as easily Metakit exposed:

mclient=any_server.Client()
#Create a database:
db = mclient.storage("datafile.mk",1)

print 'Create a view'
vw = db.getas("people[first:S,last:S,bowling:I]")

print 'Add a couple of rows'
vw.append(first='Fred',last='Flint',bowl=250)
vw.append(first='Barney',last='Rubble',bowl=150)

print 'Commit the changes to file:'
db.commit()

print 'Show a list of all people:'
for r in vw: print r.first(), r.last(),r.bowl()

mclient.any_server_clean()

2 things to think about:

1)Need to explicity kill (perhaps with a try: finally: block) the
object references. You can do that with: mclient.any_server_clean()

2)Currently, attributes as well as methods end in (), since everything
is remoted to the server.

The code is at version .01 a bit rough and needs to have more
features/documentation (like specifying a port and library to expose
at runtime)
but it seems to work well.

It is at:

http://savannah.nongnu.org/download/pytunnel/any_srv.py
http://savannah.nongnu.org/download/pytunnel/meta_client.py

john
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top