def link_collection(self, collection_code, origin_field, linked_field): dict_name = DictionaryNames() origin_collection = dict_name.get_by_code(self.code) linked_collection = dict_name.get_by_code(collection_code) if not origin_collection: logger.error(u'Не найден документ ({0}) в dict_names'.format( self.code), extra=dict(tags=['worker'])) return False if not linked_collection: logger.error( u'Не найден привязываемая коллекция ({0}) в dict_names'.format( collection_code), extra=dict(tags=['worker'])) return False version = linked_collection.pop('version') origin_collection.update({ 'linked': { 'collection': linked_collection, 'origin_field': origin_field, 'linked_field': linked_field } }) dict_name.update(origin_collection.pop('_id'), origin_collection) if origin_field and linked_field: self.__link_documents(collection_code, origin_field, linked_field)
def getVersionList(self, code): try: result = self.client.service.getVersionList(userKey5=self.user_key, refbookCode4=code) except WebFault, e: print e logger.error(e, extra=dict(tags=['getVersionList', 'nsi']))
def getRefbookParts(self, code, version): try: result = self.client.service.getRefbookParts( userKey3=self.user_key, refbookCode2=code, version2=version) except WebFault, e: print e logger.error(e, extra=dict(tags=['getRefbookParts', 'nsi']))
def getRefbook(self, code, version): try: result = self.client.service.getRefbook(userKey=self.user_key, refbookCode=str(code), version=str(version)) except WebFault, e: print e logger.error(e, extra=dict(tags=['getRefbook', 'nsi']))
def delete(self, _id): if not _id: return False try: self.collection.remove(ObjectId(_id)) except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def get_document(self, find): if '_id' in find: find['_id'] = ObjectId(find['_id']) try: result = self.collection.find_one(find) except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def count(self, find=None): try: if find is not None: result = self.collection.find(find).count() else: result = self.collection.find().count() except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def getRefbookPartial(self, code, version, part_number): try: result = self.client.service.getRefbookPartial( userKey2=self.user_key, refbookCode1=code, version1=version, partNumber=part_number) except WebFault, e: print e logger.error(e, extra=dict(tags=['getRefbookPartial', 'nsi']))
def remove(self, find=None): if find is None: find = {} if '_id' in find: find['_id'] = ObjectId(find['_id']) try: self.collection.remove(find) except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def ensure_index(self, field_name, index_type): if index_type not in (ASCENDING, DESCENDING, TEXT): error = u'Неверный тип индекса ({0})'.format(index_type) logger.error(error) raise TypeError(error) try: self.collection.ensure_index(field_name, index_type) except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def getRefbookUpdate(self, code, user_version=None, new_version=None): try: parameters = dict(userKey4=self.user_key, refbookCode3=code) if user_version is not None: parameters['userVersion'] = user_version if new_version is not None: parameters['newVersion'] = new_version result = self.client.service.getRefbookUpdate(**parameters) except WebFault, e: print e logger.error(e, extra=dict(tags=['getRefbookUpdate', 'nsi']))
def unset_attr(self, _id, attr): if _id is not None: _id = ObjectId(_id) try: #TODO: use SONManipulator for ids in different clients? self.collection.update({'_id': _id}, {'$unset': {attr: ""}}) except TypeError, e: error = u'Некорректные входные параметры ({0}): {1}'.format(e, attr) logger.error(error) raise TypeError(error) else: result = _id
def get_list(self, find=None, sort=None, limit=None, skip=None): if not self.collection.name in self.db.collection_names(): error = u'Коллекция не существует ({0})'.format(self.collection.name) logger.error(error) raise ValueError(error) if find is not None and isinstance(find, dict): try: cursor = self.collection.find(find) except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def exists(self, find=None): try: if find is not None: if '_id' in find: find['_id'] = ObjectId(find['_id']) result = self.collection.find(find).count() else: result = self.collection.find().count() except TypeError, e: error = u'Неверный тип параметров ({0})'.format(e) logger.error(error) raise TypeError(error)
def delete(self, code): self.db.drop_collection(code) db_error = self.db.error() if db_error is not None: error = u'Возникла ошибка при удалении справочника {1} ({1})'.format(code, db_error) logger.error(error) raise RuntimeError(error) try: document = self.get_by_code(code) except TypeError, e: error = u'Некорректные входные параметры ({0})'.format(e) logger.error(error) raise TypeError(error)
def add_document(self, data): if data is not None and isinstance(data, dict): # Добавляем запись о справочнике в коллекцию dict_names if not self.dict_name_exists: self.__add_dictionary_name(self.code) _id = data.pop('_id', None) if _id is not None: _id = ObjectId(_id) try: #TODO: use SONManipulator for ids in different clients? self.collection.update({'_id': _id}, {'$set': data}) except TypeError, e: error = u'Некорректные входные параметры ({0}): {1}'.format(e, data) logger.error(error) raise TypeError(error) else: result = _id else: result = self.collection.insert(data)
def __add_data(self, table, data): code = table.name obj = Dictionary(code) for row in data: document = self.__prepare_document(row, table) existdocument = None if not document: continue if 'id' in document: existdocument = obj.get_document(dict(id=document['id'])) if existdocument: document.update(dict(_id=existdocument['_id'])) # self.msg.append(u'Обновляем документ ({0})'.format(self.__doc_info(document))) try: result = obj.add_document(document) except AttributeError, e: logger.error( self.msg.append(u'Ошибка импорта документа ({0}): {1}'.format(self.__doc_info(document), e)), extra=dict(tags=['lpu', 'import error'])) return False
def __add_document(self, code, data): obj = Dictionary(code) document = self.__prepare_dictionary(data) exist_document = None if not document: return False if 'code' in document: exist_document = obj.get_document(dict(code=document['code'])) elif 'id' in document: exist_document = obj.get_document(dict(id=document['id'])) if exist_document: document.update(dict(_id=exist_document['_id'])) # self.msg.append(u'Обновляем документ ({0})'.format(self.__doc_info(document))) try: result = obj.add_document(document) except AttributeError, e: logger.error(u'Ошибка импорта документа ({0}): {1}'.format( self.__doc_info(document), e), extra=dict(tags=['nsi', 'import error'])) return False
if _id is not None: _id = ObjectId(_id) try: #TODO: use SONManipulator for ids in different clients? self.collection.update({'_id': _id}, {'$set': data}) except TypeError, e: error = u'Некорректные входные параметры ({0}): {1}'.format(e, data) logger.error(error) raise TypeError(error) else: result = _id else: result = self.collection.insert(data) else: error = u'Некорректные входные параметры: {0}'.format(data) logger.error(error) raise AttributeError(error) return result def unset_attr(self, _id, attr): if _id is not None: _id = ObjectId(_id) try: #TODO: use SONManipulator for ids in different clients? self.collection.update({'_id': _id}, {'$unset': {attr: ""}}) except TypeError, e: error = u'Некорректные входные параметры ({0}): {1}'.format(e, attr) logger.error(error) raise TypeError(error) else: result = _id
def getRefbookList(self): try: result = self.client.service.getRefbookList(userKey1=self.user_key) except WebFault, e: print e logger.error(e, extra=dict(tags=['getRefbookList', 'nsi']))
_versions = list() for version in nsi_dict_versions: _versions.append(self.__prepare_dictionary(version)) try: latest_version = _versions[len(_versions) - 1] except IndexError, e: self.msg.append(e) latest_version = None else: try: latest_version['date'] = datetime.strptime( latest_version['date'], '%d.%m.%Y') except ValueError, e: self.msg.append(e) logger.error(u'Ошибка получения версии ({0}): {1}'.format( dictionary['code'], e), extra=dict(tags=['nsi', 'import error'])) return latest_version def __update_version(self, dictionary, version): obj = DictionaryNames() obj.update_by_code(dictionary['code'], dict(version=version)) self.msg.append(u'Обновляем версию справочника ({0}): {1}'.format( dictionary['code'], version)) def import_nsi_dictionaries(self, exclude=None, overwrite=False): nsi_dicts = self.__get_dictionaries() if nsi_dicts: for dict_data in nsi_dicts: nsi_dict = self.__prepare_dictionary(dict_data) if isinstance(exclude, list) and nsi_dict['code'] in exclude:
def getServerTime(self): try: result = self.client.service.getServerTime() except WebFault, e: print e logger.error(e, extra=dict(tags=['getServerTime', 'nsi']))