Hi guys,
I'm trying to build a simple web app where you can upload a file into
MongoDB (using GridFS) and then get the file with one-click.
This is my model:
Model: mongo.py
---------------
from pymongo import Connection
from gridfs import GridFS
class MongoInterface:
"""Initialize MongoDB connection."""
def __init__(self):
global fs
connection = Connection('localhost', 27017)
db = connection.mydb
db.authenticate("myuser","mypasswd")
fs = GridFS(db)
def uploadFile(self,filename,data):
b = fs.put(data, filename=filename)
out = fs.get(b)
return out
def getFile(self,filename):
b = fs.get_last_version(filename)
return b
def getList(self):
out = fs.list()
return out
and in default controller, i wrote my methods:
Controller: default.py
----------------------
...
def upload():
"""global mongoId"""
mongoId = MongoInterface()
session.myid = mongoId
"""Get file name"""
c = request.vars.uploadFile.filename
"""Get binary file"""
file=request.vars.uploadFile.file
"""Upload file into GridFS"""
file_id = mongoId.uploadFile(c,file)
file_name = file_id.filename
file_name = mongoId.getList()
return dict(message=file_name)
def getmongofile():
"""global mongoId"""
c = request.args
mongoId = session.myid
file = mongoId.getMongoFile(c)
...
Now what happen? Upload files works as well as getting a list of all
uploaded files but when I try to get one of the files, I got this
error:
file = mongoId.getMongoFile(c)
AttributeError: 'NoneType' object has no attribute 'getMongoFile'
I see that here I have some problems with "global" variable because it
seems that it doesn't recognize mongoId descriptor. What I paste here
is only the last of a long list of tests that I've done (using global
doesn't work I read somewhere in the Web...). How can I maintain my
connection id through different http request in order to instantiate
my MongoDB just one time?
Many thanks in advance for every suggestions,
marcovic