Esempio n. 1
0
class FiasFactory:
    def __init__(self):
        self.db = DBImpl(psycopg2, DatabaseConfig)
        self.searcher = SphinxSearch(self.db)
        self.expand_templ = template('aore/templates/postgre/expand_query.sql', aoid="//aoid")
        self.normalize_templ = template('aore/templates/postgre/normalize_query.sql', aoid="//aoid")
        self.gettext_templ = template('aore/templates/postgre/gettext_query.sql', aoid="//aoid")

    # Проверка, что строка является действительым UUID v4
    @staticmethod
    def __check_uuid(guid):
        try:
            UUID(guid)
        except ValueError:
            return False

        return True

    # Проверяет входящий параметр на соотвествие
    # param - сам параметр
    # rule - "boolean", "uuid", "text"
    def __check_param(self, param, rule):
        if rule == "boolean":
            assert isinstance(param, bool), "Invalid parameter type"
        if rule == "uuid":
            assert (isinstance(param, str) or isinstance(param, unicode)) and self.__check_uuid(
                param), "Invalid parameter value"
            if rule == "text":
                assert isinstance(param, str) or isinstance(param, unicode), "Invalid parameter type"
                assert len(param) > 3, "Text too short"
                pattern = re.compile(r"[A-za-zА-Яа-я \-,.#№]+")
                assert pattern.match(param), "Invalid parameter value"

                # text - строка поиска
                # strong - строгий поиск (True) или "мягкий" (False) (с допущением ошибок, опечаток)
                # Строгий используется при импорте из внешних систем (автоматически), где ошибка критична

    def find(self, text, strong=False):
        try:
            text = urllib.unquote(text).decode('utf8')
            self.__check_param(text, "text")
            self.__check_param(strong, "boolean")

            results = self.searcher.find(text, strong)
        except Exception, err:
            if BasicConfig.logging:
                logging.error(traceback.format_exc(err))
            return dict(error=err.args[0])

        return results
Esempio n. 2
0
 def __init__(self):
     self.db = DBImpl(psycopg2, DatabaseConfig)
     self.searcher = SphinxSearch(self.db)
     self.expand_templ = template('aore/templates/postgre/expand_query.sql', aoid="//aoid")
     self.normalize_templ = template('aore/templates/postgre/normalize_query.sql', aoid="//aoid")
     self.gettext_templ = template('aore/templates/postgre/gettext_query.sql', aoid="//aoid")