def __init__(self): try: self.handler = MongoService() except errors.AutoReconnect: logging.error("Can't connect to MongoDB server (", settings.MONGODB_SERVER['HOST'], ' ', settings.MONGODB_SERVER['PORT'], " )") raise BackendConnectionError("Can't connect to the backend server") """
class BackendMongoImpl: def __init__(self): try: self.handler = MongoService() except errors.AutoReconnect: logging.error("Can't connect to MongoDB server (", settings.MONGODB_SERVER['HOST'], ' ', settings.MONGODB_SERVER['PORT'], " )") raise BackendConnectionError("Can't connect to the backend server") """ Get User values from his UID attribute. §Used for ACLs We do not get deleted values. """ def getUserUIDForObject(self, lbeObjectTemplate, UID): searchResult = self.handler.searchDocuments(lbeObjectTemplate.name, {'attributes.uid': UID, 'status': {'$nin': [OBJECT_STATE_DELETED]}}) if searchResult.count() > 0: return searchResult[0] return None """ Get User values from his _id attribute. """ def getUserForObject(self, lbeObjectTemplate, uniqueName): searchResult = self.handler.searchDocuments(lbeObjectTemplate.name, {'_id': uniqueName}) if searchResult.count() > 0: return searchResult[0] return None def createObject(self, lbeObjectTemplate, lbeObjectInstance, Import=False): if not Import: if lbeObjectTemplate.approval: awaiting = OBJECT_STATE_AWAITING_APPROVAL else: awaiting = OBJECT_STATE_AWAITING_SYNC else: awaiting = OBJECT_STATE_IMPORTED return self.handler.createDocument(awaiting, lbeObjectTemplate.name, lbeObjectInstance.toDict()) def modifyGroup(self, lbeGroupInstanceHelper, oldObjectTemplate, oldNameObjectTemplate): return self.handler.modifyGroup(lbeGroupInstanceHelper, oldObjectTemplate, oldNameObjectTemplate) """ Used in Reconciliation: """ def updateObject(self, lbeObjectTemplate, lbeObjectInstance, changes): # Changes is already a dict with key = newvalue, no need to transform it return self.handler.updateDocument(lbeObjectTemplate.name, lbeObjectInstance, {'_id': lbeObjectInstance.name.__str__()}, {'$set': changes}) def update_id(self, lbeObjectTemplate, lbeObjectInstance, new_id): return self.handler.update_id(lbeObjectTemplate.name, lbeObjectInstance, new_id) def modifyDisplayName(self, lbeObjectTemplate, ID, DN): return self.handler.modifyDNDocument(lbeObjectTemplate.name, ID, DN) def modifyObject(self, lbeObjectTemplate, ID, values, displayName): if lbeObjectTemplate.approval: awaiting = OBJECT_STATE_AWAITING_APPROVAL else: awaiting = OBJECT_STATE_AWAITING_SYNC return self.handler.modifyDocument(awaiting, lbeObjectTemplate.name, ID, values, displayName) def updateStatus(self, lbeObjectTemplate, ID): return self.handler.updateStatus(lbeObjectTemplate.name, ID) def getStatus(self,lbeObjectTemplate, ID): return self.handler.searchDocuments(lbeObjectTemplate.name, {'_id': ID}, 0, 0)[0]['status'] def removeObject(self, lbeObjectTemplate, ID): if lbeObjectTemplate.approval: awaiting = OBJECT_STATE_AWAITING_APPROVAL else: awaiting = OBJECT_STATE_AWAITING_SYNC return self.handler.removeDocument(awaiting, lbeObjectTemplate.name, ID) def deleteObject(self, lbeObjectTemplate, ID): return self.handler.deleteDocument(lbeObjectTemplate.name, ID) def removeAttributeObject(self, lbeObjectTemplate, attribute_name): return self.handler.removeAttributeDocument(lbeObjectTemplate, attribute_name) def approvalObject(self, lbeObjectTemplate, ID): return self.handler.approvalDocument(lbeObjectTemplate.name, ID) def lengthObjects(self, lbeObjectTemplate): return self.handler.sizeDocuments(lbeObjectTemplate.name, {'status': {'$gt': OBJECT_STATE_INVALID}}) def positionObject(self, lbeObjectTemplate, ID): return self.handler.posDocument(lbeObjectTemplate, ID) def searchObjects(self, lbeObjectTemplate, index=0, size=0): return DocumentsToLBEObjectInstance(lbeObjectTemplate, self.handler.searchDocuments(lbeObjectTemplate.name, { 'status': {'$gt': OBJECT_STATE_INVALID}}, index, size)) def searchObjectsByPattern(self, lbeObjectTemplate, pattern): value = {} if pattern != '': _id = {'_id': {'$regex': pattern, '$options': 'i'}} _valid = {'status': {'$gt': OBJECT_STATE_INVALID}} value['$and'] = [] value['$and'].insert(0, _id) value['$and'].insert(1, _valid) else: value['status'] = {} value['status']['$gt'] = OBJECT_STATE_INVALID return DocumentsToLBEObjectInstance(lbeObjectTemplate, self.handler.searchDocuments(lbeObjectTemplate.name, value, 0, 0)) def searchObjectsBy(self, lbeObjectTemplate, attributeName, pattern): value = {} _valid = {'status': {'$gt': OBJECT_STATE_INVALID}} _search = {'attributes.' + attributeName: {'$regex': pattern}} value['$and'] = [] value['$and'].insert(0, _search) value['$and'].insert(1, _valid) return DocumentsToLBEObjectInstance(lbeObjectTemplate, self.handler.searchDocuments(lbeObjectTemplate.name, value, 0, 0)) # Search objects with synced_at <= lbeObjectTemplate.synced_at def searchObjectsToUpdate(self, lbeObjectTemplate, index=0, size=0): if isinstance(lbeObjectTemplate, LBEGroup): search = {'status': OBJECT_STATE_AWAITING_SYNC, '_id': lbeObjectTemplate.displayName} else: search = {'$or':[{'status': OBJECT_STATE_AWAITING_SYNC}, {'status': OBJECT_STATE_AWAITING_RECONCILIATION}]} return DocumentsToLBEObjectInstance(lbeObjectTemplate, self.handler.searchDocuments(lbeObjectTemplate.name, search, index, size))