mirror of
https://github.com/thatmattlove/hyperglass.git
synced 2026-01-17 00:38:06 +00:00
Fix bug: Directives will be error on deserialize rules and field with None type
This commit is contained in:
parent
c68b00423a
commit
8f690adb5c
3 changed files with 26 additions and 17 deletions
|
|
@ -19,7 +19,7 @@ from .main import MultiModel, HyperglassModel, HyperglassUniqueModel
|
|||
from .fields import Action
|
||||
|
||||
StringOrArray = t.Union[str, t.List[str]]
|
||||
Condition = t.Union[IPvAnyNetwork, str]
|
||||
Condition = t.Union[str, None]
|
||||
RuleValidation = t.Union[t.Literal["ipv4", "ipv6", "pattern"], None]
|
||||
PassedValidation = t.Union[bool, None]
|
||||
IPFamily = t.Literal["ipv4", "ipv6"]
|
||||
|
|
@ -264,7 +264,7 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
id: str
|
||||
name: str
|
||||
rules: t.List[RuleType] = [RuleWithoutValidation()]
|
||||
field: t.Union[Text, Select]
|
||||
field: t.Union[Text, Select, None]
|
||||
info: t.Optional[FilePath] = None
|
||||
plugins: t.List[str] = []
|
||||
table_output: t.Optional[str] = None
|
||||
|
|
@ -282,6 +282,7 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
condition = rule.get("condition")
|
||||
if condition is None:
|
||||
out_rules.append(RuleWithoutValidation(**rule))
|
||||
else:
|
||||
try:
|
||||
condition_net = ip_network(condition)
|
||||
if condition_net.version == 4:
|
||||
|
|
@ -290,7 +291,7 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
out_rules.append(RuleWithIPv6(**rule))
|
||||
except ValueError:
|
||||
out_rules.append(RuleWithPattern(**rule))
|
||||
if isinstance(rule, Rule):
|
||||
elif isinstance(rule, Rule):
|
||||
out_rules.append(rule)
|
||||
return out_rules
|
||||
|
||||
|
|
@ -306,7 +307,8 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
@property
|
||||
def field_type(self) -> t.Literal["text", "select", None]:
|
||||
"""Get the linked field type."""
|
||||
|
||||
if self.field is None:
|
||||
return None
|
||||
if self.field.is_select:
|
||||
return "select"
|
||||
if self.field.is_text or self.field.is_ip:
|
||||
|
|
@ -337,7 +339,7 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
"name": self.name,
|
||||
"field_type": self.field_type,
|
||||
"groups": self.groups,
|
||||
"description": self.field.description,
|
||||
"description": self.field.description if self.field is not None else '',
|
||||
"info": None,
|
||||
}
|
||||
|
||||
|
|
@ -345,7 +347,7 @@ class Directive(HyperglassUniqueModel, unique_by=("id", "table_output")):
|
|||
with self.info.open() as md:
|
||||
value["info"] = md.read()
|
||||
|
||||
if self.field.is_select:
|
||||
if self.field is not None and self.field.is_select:
|
||||
value["options"] = [o.export_dict() for o in self.field.options if o is not None]
|
||||
|
||||
return value
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class UIDirective(HyperglassModel):
|
|||
|
||||
id: str
|
||||
name: str
|
||||
field_type: str
|
||||
field_type: t.Union[str, None]
|
||||
groups: t.List[str]
|
||||
description: str
|
||||
info: t.Optional[str] = None
|
||||
|
|
|
|||
|
|
@ -79,7 +79,14 @@ export const LookingGlassForm = (): JSX.Element => {
|
|||
);
|
||||
|
||||
const directive = useMemo<Directive | null>(
|
||||
() => getDirective(),
|
||||
() => {
|
||||
const tmp = getDirective();
|
||||
if (tmp !== null && tmp.fieldType === null) {
|
||||
setFormValue('queryTarget', ['null']);
|
||||
setValue('queryTarget', ['null']);
|
||||
}
|
||||
return tmp;
|
||||
},
|
||||
[form.queryType, form.queryLocation, getDirective],
|
||||
);
|
||||
|
||||
|
|
@ -200,7 +207,7 @@ export const LookingGlassForm = (): JSX.Element => {
|
|||
<QueryType onChange={handleChange} label={web.text.queryType} />
|
||||
</FormField>
|
||||
</SlideFade>
|
||||
<SlideFade offsetX={100} in={directive !== null} unmountOnExit>
|
||||
<SlideFade offsetX={100} in={directive !== null && directive.fieldType !== null} unmountOnExit>
|
||||
{directive !== null && (
|
||||
<FormField name="queryTarget" label={web.text.queryTarget}>
|
||||
<QueryTarget
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue