def deleteFromInnerColl(self, coll, parentId, field, objid): """ In coll object with parentId search array field and remove objid. """ # get parent object parentObj = mongodb.selectOne(coll, {'id': parentId}) # get coll fields parentFields = self.meta.getCollType(coll.split('.')) # get inner coll fields innerFields = self.meta.getStruct(parentFields[field]['type']) # get field arr = parentObj[field] # from arr remove objid element index = -1 for i, item in enumerate(arr): if item['id'] == objid: index = i break # if index not found just return if index == -1: return # remove images from item item = arr[index] for name, params in innerFields.items(): if 'imageSizes' in params: filename = item[name] self.deleteImage(filename, params) # remove element from arr arr.pop(index) # update parentObj mongodb.update(coll, {field: arr}, {'id': parentId})
def updateRaw(self, coll, values, wh): names = self.collToNames(coll) if not names: return None dotcoll = '.'.join(names) mongodb.update(dotcoll, values, wh)
def updateListValue(self, coll, seq, lastList): pices = coll.split('.') val = lastList['child'] if len(pices) == 1: values = {val['name']: val['value']} elif len(pices) == 2: coll = pices[0] values = {pices[1] + '.$.' + val['name']: val['value']} else: raise Exception('updateListValue: collection inner gt 2') slugs = self.updateSlug(coll.split('.'), val['name'], val['value']) if slugs: if len(pices) == 1: values[slugs[0]] = slugs[1] elif len(pices) == 2: values[pices[1] + '.$.' + slugs[0]] = slugs[1] if len(pices) == 1: where = {'id': val['parentid']} elif len(pices) == 2: where = {pices[1] + '.id': val['parentid']} # print ('updateLastList') # print coll # print repr(values) # print val['parentid'] mongodb.update(coll, values, where)
def appendInnerColl(self, coll, parentId, field, obj): """ In coll object with parentId search array field and append obj. """ # print coll # print parentId # print field # print repr(obj) # get parent object parentObj = mongodb.selectOne(coll, {'id': parentId}) # get field arr = parentObj[field] # to arr add obj arr.append(obj) # update parentObj mongodb.update(coll, {field: arr}, {'id': parentId})
def deleteRefLink(self, names, objid, parentid): if not parentid: raise Exception('delete from ref, link must provide parent id') parentNames = names[:-1] if len(parentNames) == 1: parentColl = parentNames[0] else: parentColl = self.getSrcColl(parentNames) fieldName = names[len(names) - 1] # get parent object parentObj = mongodb.selectOne(parentColl, {'id': parentid}) # get ids field idsField = parentObj[fieldName] # remove id from idsField if objid in idsField: idsField.remove(objid) # update ids field mongodb.update(parentColl, {fieldName: idsField}, {'id': parentid})
def appendIdToRefLink(self, collNames, objid, parentid): if not parentid: raise Exception('append to ref, link must provide parent id') parentNames = collNames[:-1] if len(parentNames) == 1: parentColl = parentNames[0] else: parentColl = self.getSrcColl(parentNames) fieldName = collNames[len(collNames) - 1] # get parent object parentObj = mongodb.selectOne(parentColl, {'id': parentid}) # get ids field idsField = parentObj[fieldName] # add id to ids field if not (objid in idsField): idsField.append(objid) # update ids field mongodb.update(parentColl, {fieldName: idsField}, {'id': parentid})
def insertBeforeToRefLink(self, names, objid, parentid, beforeid): if not parentid: raise Exception('insert to ref, link must provide parent id') parentNames = names[:-1] if len(parentNames) == 1: parentColl = parentNames[0] else: parentColl = self.getSrcColl(parentNames) fieldName = names[len(names) - 1] # get parent object parent = mongodb.selectOne(parentColl, {'id': parentid}) # get ids field idsField = parent[fieldName] # add id before beforeid if (beforeid in idsField): beforeIndex = idsField.index(beforeid) # insert in index position (before) idsField.insert(beforeIndex, objid) # update ids field mongodb.update(parentColl, {fieldName: idsField}, {'id': parentid})
def update(self, coll, values, where): names = self.collToNames(coll) if not names: return None return mongodb.update(coll, values, where)
def setValue(self, seq): # parse sequences # print 'orm.setValue, seq:' # print repr(seq) # get last list lastList = self.getLastList(seq) # global update if not lastList: # print 'global update' names = self.seqToNames(seq) value = self.getSeqValue(seq) coll = names[0] field = names[1] # update slugs slugs = self.updateSlug([coll], field, value['value']) values = {field: value['value']} if slugs: values[slugs[0]] = slugs[1] # get value params fieldnames = coll + '.' + field params = self.meta.getValueParams(fieldnames) # if imageSizes in params - remove old image value if 'imageSizes' in params: # get object with field obj = mongodb.selectOne(coll, {'id': value['parentid']}) filename = obj[field] self.deleteImage(filename, params) mongodb.update(coll, values, {'id': value['parentid']}) # list update else: listNames = self.getLastListNames(seq, lastList) coll = '.'.join(listNames) # search src list and update # search src in refs if coll in self.meta.refToColl: # print 'update ref value:' # print coll src = self.meta.refToColl[coll] # print src self.updateListValue(src, seq, lastList) # search src in links elif coll in self.meta.linkToColl: # print 'update link value:' # print coll src = self.meta.linkToColl[coll] # print src self.updateListValue(src, seq, lastList) # search src in colls elif coll in self.meta.colls: # print 'update list value:' # print coll # print repr(lastList) self.updateListValue(coll, seq, lastList) else: raise Exception('unknown list type "%s"' % str(coll))