コード例 #1
0
ファイル: parser.py プロジェクト: skybldev/szurubooru
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r"\s+", (query_text or "").lower()):
         if not chunk:
             continue
         negated = False
         if chunk[0] == "-":
             chunk = chunk[1:]
             negated = True
         if not chunk:
             raise errors.SearchError("Empty negated token.")
         match = re.match(r"^(.*?)(?<!\\):(.*)$", chunk)
         if match:
             key, value = list(match.groups())
             key = util.unescape(key)
             if key == "sort":
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == "special":
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query
コード例 #2
0
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r'\s+', (query_text or '').lower()):
         if not chunk:
             continue
         negated = False
         if chunk[0] == '-':
             chunk = chunk[1:]
             negated = True
         if not chunk:
             raise errors.SearchError('비어있는 부정 토큰.')
         match = re.match(r'^(.*?)(?<!\\):(.*)$', chunk)
         if match:
             key, value = list(match.groups())
             key = util.unescape(key)
             if key == 'sort':
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == 'special':
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query
コード例 #3
0
 def on_search_query_parsed(self, search_query: SearchQuery) -> SaQuery:
     new_special_tokens = []
     for token in search_query.special_tokens:
         if token.value in ('fav', 'liked', 'disliked'):
             assert self.user
             if self.user.rank == 'anonymous':
                 raise errors.SearchError('이 기능을 사용하기 위해서는 로그인해야 합니다.')
             criterion = criteria.PlainCriterion(
                 original_text=self.user.name, value=self.user.name)
             setattr(criterion, 'internal', True)
             search_query.named_tokens.append(
                 tokens.NamedToken(name=token.value,
                                   criterion=criterion,
                                   negated=token.negated))
         else:
             new_special_tokens.append(token)
     search_query.special_tokens = new_special_tokens
コード例 #4
0
 def on_search_query_parsed(self, search_query: SearchQuery) -> SaQuery:
     new_special_tokens = []
     for token in search_query.special_tokens:
         if token.value in ("fav", "liked", "disliked"):
             assert self.user
             if self.user.rank == "anonymous":
                 raise errors.SearchError(
                     "Must be logged in to use this feature.")
             criterion = criteria.PlainCriterion(
                 original_text=self.user.name, value=self.user.name)
             setattr(criterion, "internal", True)
             search_query.named_tokens.append(
                 tokens.NamedToken(
                     name=token.value,
                     criterion=criterion,
                     negated=token.negated,
                 ))
         else:
             new_special_tokens.append(token)
     search_query.special_tokens = new_special_tokens
コード例 #5
0
ファイル: post_search_config.py プロジェクト: rr-/szurubooru
 def on_search_query_parsed(self, search_query: SearchQuery) -> SaQuery:
     new_special_tokens = []
     for token in search_query.special_tokens:
         if token.value in ('fav', 'liked', 'disliked'):
             assert self.user
             if self.user.rank == 'anonymous':
                 raise errors.SearchError(
                     'Must be logged in to use this feature.')
             criterion = criteria.PlainCriterion(
                 original_text=self.user.name,
                 value=self.user.name)
             setattr(criterion, 'internal', True)
             search_query.named_tokens.append(
                 tokens.NamedToken(
                     name=token.value,
                     criterion=criterion,
                     negated=token.negated))
         else:
             new_special_tokens.append(token)
     search_query.special_tokens = new_special_tokens
コード例 #6
0
 def parse(self, query_text: str) -> SearchQuery:
     query = SearchQuery()
     for chunk in re.split(r'\s+', (query_text or '').lower()):
         if not chunk:
             continue
         negated = False
         while chunk[0] == '-':
             chunk = chunk[1:]
             negated = not negated
         match = re.match('([a-z_-]+):(.*)', chunk)
         if match:
             key, value = list(match.groups())
             if key == 'sort':
                 query.sort_tokens.append(_parse_sort(value, negated))
             elif key == 'special':
                 query.special_tokens.append(_parse_special(value, negated))
             else:
                 query.named_tokens.append(_parse_named(
                     key, value, negated))
         else:
             query.anonymous_tokens.append(_parse_anonymous(chunk, negated))
     return query