Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.50 KB | None | 0 0
  1. import pymongo
  2. from django.conf import settings
  3.  
  4. #Checks to make
  5. #    - If database name is valid
  6. # and a lot more. Its in pre-pre-pre-alpha working condition though.
  7.  
  8. ## NEED TO FIND A BETTER WAY TO DISCONNECT
  9. ## A user can assign an id to an object and potentially delete data, need to find workaround for this
  10.  
  11. class MongoConnector:
  12.     '''Takes an optional name parameter, which is the key from the MONGO dictionary in the settings file, for the database to use.'''
  13.  
  14.     def __init__(self, name='mongo'):
  15.         self.host = settings.MONGO[name]['HOST']
  16.         try:
  17.             self.port = int(settings.MONGO[name]['PORT'])
  18.         except ValueError:
  19.             self.port = 27017
  20.         self.dbname = settings.MONGO[name]['NAME']
  21.         if settings.MONGO[name]['USER']:
  22.             self.user = settings.MONGO[name]['USER']
  23.         else:
  24.             self.user = None
  25.         if settings.MONGO[name]['PASSWORD']:
  26.             self.password = settings.MONGO[name]['PASSWORD']
  27.         else:
  28.             self.password = None
  29.  
  30.     def connect(self):
  31.         '''returns a connection object to the selected database'''
  32.         return pymongo.connection.Connection(self.host, self.port)
  33.  
  34. class Mongo:
  35.     '''Methods for using a mongo database. Takes a collection name to initialise and optional parameters for document and name of the key from the MONGO dictionary in the settings file to select the database to use'''
  36.  
  37. #    objects = MongoManager()
  38.  
  39.     def __init__(self, collection, document=None, name='mongo'):
  40.         self.document = document
  41.         self.dbname = settings.MONGO[name]['NAME']
  42.         self.multidbname = name
  43.         self.collection = collection
  44.         self.id = None
  45.  
  46.     def save(self):
  47.         conn = MongoConnector(self.multidbname).connect()
  48.         coll = conn[self.dbname][self.collection]
  49.         if self.id is None:
  50.             objId = coll.insert(self.document)
  51.             self.id = objId
  52.             if '_id' in self.document:
  53.                 pass
  54.             else:
  55.                 self.document['_id'] = objId
  56.         else:
  57.             coll.update({'_id': self.id}, self.document)
  58.         conn.disconnect()
  59.         return self.id
  60.  
  61.     def delete(self):
  62.         conn = MongoConnector(self.multidbname).connect()
  63.         coll = conn[self.dbname][self.collection]
  64.         coll.remove({'_id': self.id})
  65.         conn.disconnect()
  66.  
  67. #class MongoManager:
  68. #    def __init__(self):
  69. #        self = Mongo()
  70.  
  71.     def get(self, query=None):
  72.         conn = MongoConnector(self.multidbname).connect()
  73.         coll = conn[self.dbname][self.collection]
  74.         result = coll.find_one(query)
  75.         obj = Mongo(self.collection, result)
  76.         obj.id = result['_id']
  77.         conn.disconnect()
  78.         return obj
  79.  
  80.     def filter(self, query=None):
  81.         conn = MongoConnector(self.multidbname).connect()
  82.         coll = conn[self.dbname][self.collection]
  83.         results = []
  84.         for result in coll.find(query):
  85.             obj = Mongo(self.collection, result)
  86.             obj.id = result['_id']
  87.             results.append(obj)
  88.         conn.disconnect()
  89.         return results
  90.  
  91.     def remove(self, query):
  92.         if query is None:
  93.             raise Exception('remove query cannot be None')
  94.         else:
  95.             conn = MongoConnector(self.multidbname).connect()
  96.             coll = conn[self.dbname][self.collection]
  97.             coll.remove(query)
  98.             conn.disconnect()
  99.  
  100.     def remove_all(self):
  101.         conn = MongoConnector(self.multidbname).connect()
  102.         coll = conn[self.dbname][self.collection]
  103.         coll.remove()
  104.         conn.disconnect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement