Skip to content

Commit ee827b3

Browse files
committed
Add support for _missing_ and _goto_ target in iptc.easy module
1 parent 5339990 commit ee827b3

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

iptc/easy.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,8 @@ def encode_iptc_rule(rule_d, ipv6=False):
295295
# Basic rule attributes
296296
rule_attr = ('src', 'dst', 'protocol', 'in-interface', 'out-interface', 'fragment')
297297
iptc_rule = Rule6() if ipv6 else Rule()
298+
# Set default target
299+
rule_d.setdefault('target', '')
298300
# Avoid issues with matches that require basic parameters to be configured first
299301
for name in rule_attr:
300302
if name in rule_d:
@@ -347,7 +349,10 @@ def decode_iptc_rule(iptc_rule, ipv6=False):
347349
name = iptc_rule.target.name.replace('-', '_')
348350
d['target'] = {name:iptc_rule.target.get_all_parameters()}
349351
elif iptc_rule.target and iptc_rule.target.name:
350-
d['target'] = iptc_rule.target.name
352+
if iptc_rule.target.goto:
353+
d['target'] = {'goto':iptc_rule.target.name}
354+
else:
355+
d['target'] = iptc_rule.target.name
351356
# Return a filtered dictionary
352357
return _filter_empty_field(d)
353358

@@ -412,10 +417,12 @@ def _iptc_setmatch(iptc_rule, name, value):
412417
def _iptc_settarget(iptc_rule, value):
413418
# Target is dictionary - Use only 1 pair key/value
414419
if isinstance(value, dict):
415-
for k, v in value.items():
416-
iptc_target = iptc_rule.create_target(k)
417-
_iptc_setattr_d(iptc_target, v)
418-
return
420+
t_name, t_value = next(iter(value.items()))
421+
if t_name == 'goto':
422+
iptc_target = iptc_rule.create_target(t_value, goto=True)
423+
else:
424+
iptc_target = iptc_rule.create_target(t_name)
425+
_iptc_setattr_d(iptc_target, t_value)
419426
# Simple target
420427
else:
421428
iptc_target = iptc_rule.create_target(value)

0 commit comments

Comments
 (0)