Example #1
0
    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)
Example #2
0
 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']))
Example #3
0
 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']))
Example #4
0
 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']))
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 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)
Example #8
0
 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']))
Example #9
0
 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)
Example #10
0
 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)
Example #11
0
 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']))
Example #12
0
 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
Example #13
0
 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)
Example #14
0
 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)
Example #15
0
 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)
Example #16
0
 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)
Example #17
0
 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
Example #18
0
 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
Example #19
0
            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
Example #20
0
 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']))
Example #21
0
        _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:
Example #22
0
 def getServerTime(self):
     try:
         result = self.client.service.getServerTime()
     except WebFault, e:
         print e
         logger.error(e, extra=dict(tags=['getServerTime', 'nsi']))