Skip to content

Commit

Permalink
base_api.py: Implement operators and document them in cli help
Browse files Browse the repository at this point in the history
Right now for operators we are using "magic" suffix such as
__gt, __lt and so on, which is not documented and a bit non-intuitive.
We can make cli tool more intuitive with this patch, where it will
hide from user this magic, until we find better mechanism to handle
operators as mentioned in kernelci/kernelci-api#356

Signed-off-by: Denys Fedoryshchenko <[email protected]>
  • Loading branch information
nuclearcat committed Sep 18, 2023
1 parent 77c16d9 commit 5c8b797
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions kernelci/cli/base_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import abc
import json
import re

import kernelci.api
from .base import Command, Args, catch_http_error
Expand Down Expand Up @@ -63,12 +64,36 @@ class AttributesCommand(APICommand):
{
'name': 'attributes',
'nargs': '*',
'help': "Attributes in name=value format",
'help': "Attributes in 'name=value' format, where = is "
"OPERATOR and can be one of: >, <, >=, <=, =",
},
]

@classmethod
def _split_attributes(cls, attributes):
return dict(
tuple(attr.split('=')) for attr in attributes
) if attributes else {}
rval = {}
if not attributes:
return rval
for attribute in attributes:
pattern = r'^([\S]+)([!=<>]+)([\S]+)$'
match = re.match(pattern, attribute)
if match:
attribute, operator, value = match.groups()
# if operator is >= then append to attribute '__gte' suffix
# and so on
switch = {
'>': '__gt',
'<': '__lt',
'>=': '__gte',
'<=': '__lte',
}
if operator in switch:
attribute += switch[operator]
elif operator != '=':
# raise error
raise ValueError(f"Invalid operator {operator}")
rval[attribute] = value
else:
raise ValueError(f"Invalid attribute {attribute}")

return rval

0 comments on commit 5c8b797

Please sign in to comment.