How to store uScopy data in MondoDB: Difference between revisions
(→Demo) |
No edit summary |
||
Line 1: | Line 1: | ||
Server side code | |||
Python code | |||
<source lang="python"> | |||
login as: dj | |||
dj@amber11's password: | |||
Last login: Fri Jan 14 21:44:16 2011 from 10.9.0.3 | |||
[dj@amber11 ~]$ ls | |||
Connectome mod_wsgi-3.3 pymongo www | |||
Connectome-build mod_wsgi-3.3.tar.gz python | |||
downloads mongo-cxx-driver-nightly VTK | |||
libmongoclient.a mongodb-linux-x86_64-static-legacy-1.7.4 VTK-build | |||
[dj@amber11 ~]$ cd /var/www-dj/ | |||
[dj@amber11 www-dj]$ ls | |||
index.py test1.py test4.py test6.pyc tiles3.py | |||
mongo.py test2.py test5.py test7.py tiles.py | |||
mongo.pyc test3.py test6.py tiles2.py www.tgz | |||
[dj@amber11 www-dj]$ ls -la | |||
total 72 | |||
drwxrwxr-x 2 root dj 4096 Jan 3 13:16 . | |||
drwxr-xr-x 25 root root 4096 Dec 22 17:01 .. | |||
-rw-r--r-- 1 dj dj 2844 Dec 28 16:10 index.py | |||
-rw-r--r-- 1 dj dj 200 Dec 28 16:07 mongo.py | |||
-rw-r--r-- 1 dj dj 586 Jan 3 12:32 mongo.pyc | |||
-rw-r--r-- 1 dj dj 559 Dec 16 13:11 test1.py | |||
-rw-r--r-- 1 dj dj 2844 Dec 9 19:53 test2.py | |||
-rw-r--r-- 1 dj dj 1752 Dec 9 20:33 test3.py | |||
-rw-r--r-- 1 dj dj 1752 Dec 16 14:40 test4.py | |||
-rw-r--r-- 1 dj dj 1752 Dec 16 14:40 test5.py | |||
-rw-r--r-- 1 dj dj 70 Dec 16 16:58 test6.py | |||
-rw-r--r-- 1 dj dj 202 Dec 28 15:54 test6.pyc | |||
-rw-r--r-- 1 dj dj 1295 Dec 28 15:48 test7.py | |||
-rw-r--r-- 1 dj dj 1717 Dec 16 19:34 tiles2.py | |||
-rw-r--r-- 1 dj dj 1819 Jan 3 12:37 tiles3.py | |||
-rw-r--r-- 1 dj dj 1694 Dec 26 21:40 tiles.py | |||
-rw-rw-r-- 1 dj dj 3505 Dec 28 16:09 www.tgz | |||
[dj@amber11 www-dj]$ ls | |||
index.py test1.py test4.py test6.pyc tiles3.py | |||
mongo.py test2.py test5.py test7.py tiles.py | |||
mongo.pyc test3.py test6.py tiles2.py www.tgz | |||
[dj@amber11 www-dj]$ vim tiles3.py | |||
""" | |||
Decodes the path info and fetches the corresponding tile from pymongo | |||
""" | |||
import pymongo | |||
import sys | |||
sys.path.append('/var/www-dj/') | |||
from mongo import m | |||
def application(environ, start_response): | |||
""" The WSGI test application """ | |||
def error(error_msg): | |||
status = "200 OK" | |||
response_headers = [('Content-type', 'text/plain'), | |||
('Content-Length', str(len(error_msg)))] | |||
start_response(status, response_headers) | |||
return [error_msg] | |||
# emit status / headers | |||
db = m.conn['clay1'] | |||
#print 'starting request ..' | |||
try: | |||
str2 = environ['PATH_INFO'] | |||
except: | |||
str2 = '/tiles3.py/n1/t.jpg' | |||
path = str2.split('/') | |||
if len(path) != 3: | |||
#incorrect syntax | |||
return error(str(path)) | |||
col = db[path[1]] | |||
res = col.find_one({"name" : path[2]}) | |||
m.conn.end_request() | |||
if res == None: | |||
return error('Item not found in database ..') | |||
# Create the response headers | |||
status = "200 OK" | |||
response_headers = [('Content-type', 'image/jpeg'), | |||
('Content-Length', str(len(res['file'])))] | |||
start_response(status, response_headers) | |||
#print 'Started response' | |||
return [str(res['file'])] | |||
#except: | |||
if __name__ == '__main__': | |||
# this runs when script is started directly from commandline | |||
try: | |||
# create a simple WSGI server and run the application | |||
from wsgiref import simple_server | |||
print "Running test application - point your browser at http://localhost:8000/ ..." | |||
httpd = simple_server.WSGIServer(('', 8000), simple_server.WSGIRequestHandler) | |||
httpd.set_app(application) | |||
httpd.serve_forever() | |||
except ImportError: | |||
# wsgiref not installed, just output html to stdout | |||
1,1 Top | |||
</source> | |||
Mongo module manages connection pool internally. | |||
Another simple script is used to recreate indexes after data has been added. | |||
==Demo== | ==Demo== | ||
* [http://dash1old/connectome/index2.php?image=z3459 From Kitware network] | * [http://dash1old/connectome/index2.php?image=z3459 From Kitware network] | ||
* [http://tripoint.kitware.com/connectome/index2.php?image=z3459 From outside] | * [http://tripoint.kitware.com/connectome/index2.php?image=z3459 From outside] |
Revision as of 20:07, 18 January 2011
Server side code
Python code <source lang="python">
login as: dj dj@amber11's password: Last login: Fri Jan 14 21:44:16 2011 from 10.9.0.3 [dj@amber11 ~]$ ls Connectome mod_wsgi-3.3 pymongo www Connectome-build mod_wsgi-3.3.tar.gz python downloads mongo-cxx-driver-nightly VTK libmongoclient.a mongodb-linux-x86_64-static-legacy-1.7.4 VTK-build [dj@amber11 ~]$ cd /var/www-dj/ [dj@amber11 www-dj]$ ls index.py test1.py test4.py test6.pyc tiles3.py mongo.py test2.py test5.py test7.py tiles.py mongo.pyc test3.py test6.py tiles2.py www.tgz [dj@amber11 www-dj]$ ls -la total 72 drwxrwxr-x 2 root dj 4096 Jan 3 13:16 . drwxr-xr-x 25 root root 4096 Dec 22 17:01 .. -rw-r--r-- 1 dj dj 2844 Dec 28 16:10 index.py -rw-r--r-- 1 dj dj 200 Dec 28 16:07 mongo.py -rw-r--r-- 1 dj dj 586 Jan 3 12:32 mongo.pyc -rw-r--r-- 1 dj dj 559 Dec 16 13:11 test1.py -rw-r--r-- 1 dj dj 2844 Dec 9 19:53 test2.py -rw-r--r-- 1 dj dj 1752 Dec 9 20:33 test3.py -rw-r--r-- 1 dj dj 1752 Dec 16 14:40 test4.py -rw-r--r-- 1 dj dj 1752 Dec 16 14:40 test5.py -rw-r--r-- 1 dj dj 70 Dec 16 16:58 test6.py -rw-r--r-- 1 dj dj 202 Dec 28 15:54 test6.pyc -rw-r--r-- 1 dj dj 1295 Dec 28 15:48 test7.py -rw-r--r-- 1 dj dj 1717 Dec 16 19:34 tiles2.py -rw-r--r-- 1 dj dj 1819 Jan 3 12:37 tiles3.py -rw-r--r-- 1 dj dj 1694 Dec 26 21:40 tiles.py -rw-rw-r-- 1 dj dj 3505 Dec 28 16:09 www.tgz [dj@amber11 www-dj]$ ls index.py test1.py test4.py test6.pyc tiles3.py mongo.py test2.py test5.py test7.py tiles.py mongo.pyc test3.py test6.py tiles2.py www.tgz [dj@amber11 www-dj]$ vim tiles3.py """
Decodes the path info and fetches the corresponding tile from pymongo
""" import pymongo import sys
sys.path.append('/var/www-dj/')
from mongo import m
def application(environ, start_response):
""" The WSGI test application """ def error(error_msg): status = "200 OK" response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(error_msg)))] start_response(status, response_headers) return [error_msg]
# emit status / headers db = m.conn['clay1']
#print 'starting request ..' try: str2 = environ['PATH_INFO'] except: str2 = '/tiles3.py/n1/t.jpg'
path = str2.split('/') if len(path) != 3: #incorrect syntax return error(str(path))
col = db[path[1]] res = col.find_one({"name" : path[2]}) m.conn.end_request() if res == None: return error('Item not found in database ..')
# Create the response headers status = "200 OK" response_headers = [('Content-type', 'image/jpeg'), ('Content-Length', str(len(res['file'])))] start_response(status, response_headers) #print 'Started response' return [str(res['file'])]
#except:
if __name__ == '__main__':
# this runs when script is started directly from commandline try: # create a simple WSGI server and run the application from wsgiref import simple_server print "Running test application - point your browser at http://localhost:8000/ ..." httpd = simple_server.WSGIServer((, 8000), simple_server.WSGIRequestHandler) httpd.set_app(application) httpd.serve_forever() except ImportError: # wsgiref not installed, just output html to stdout 1,1 Top
</source>
Mongo module manages connection pool internally. Another simple script is used to recreate indexes after data has been added.