Skip to content

Commit 4df603d

Browse files
committed
feat: Convert app_support to new model and improve performance
1 parent 96d1497 commit 4df603d

12 files changed

Lines changed: 1751 additions & 160 deletions

File tree

‎src/ndn/app_support/light_versec/binary.py‎

Lines changed: 94 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
# See the License for the specific language governing permissions and
2121
# limitations under the License.
2222
# -----------------------------------------------------------------------------
23-
import ndn.encoding as enc
23+
import dataclasses as dc
24+
from typing import Optional
25+
26+
from ...encoding import BinaryStr
27+
from ...encoding.tlv_model_v2 import tlv_encode, tlv_parse
2428

2529

2630
__all__ = [
@@ -62,63 +66,101 @@ class TypeNumber:
6266
NAMED_PATTERN_NUM = 0x69
6367

6468

65-
class UserFnArg(enc.TlvModel):
69+
@dc.dataclass
70+
class UserFnArg:
6671
# A given component
67-
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)
72+
value: Optional[bytes] = dc.field(
73+
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})
6874
# Referring to a previous matched pattern
69-
tag = enc.UintField(TypeNumber.PATTERN_TAG)
75+
tag: Optional[int] = dc.field(
76+
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
7077

7178

72-
class UserFnCall(enc.TlvModel):
73-
fn_id = enc.BytesField(TypeNumber.USER_FN_ID, is_string=True)
74-
args = enc.RepeatedField(enc.ModelField(TypeNumber.FN_ARGS, UserFnArg))
79+
@dc.dataclass
80+
class UserFnCall:
81+
fn_id: Optional[str] = dc.field(
82+
default=None, metadata={'tlv_type': TypeNumber.USER_FN_ID})
83+
args: list[UserFnArg] = dc.field(
84+
default_factory=list, metadata={'tlv_type': TypeNumber.FN_ARGS})
7585

7686

77-
class ConstraintOption(enc.TlvModel):
87+
@dc.dataclass
88+
class ConstraintOption:
7889
# Equal to a given NameComponent value
79-
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)
90+
value: Optional[bytes] = dc.field(
91+
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})
8092
# Equal to another pattern
81-
tag = enc.UintField(TypeNumber.PATTERN_TAG)
93+
tag: Optional[int] = dc.field(
94+
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
8295
# Decide by a user function call
83-
fn = enc.ModelField(TypeNumber.USER_FN_CALL, UserFnCall)
84-
85-
86-
class PatternConstraint(enc.TlvModel):
87-
options = enc.RepeatedField(
88-
enc.ModelField(TypeNumber.CONS_OPTION, ConstraintOption)
89-
)
90-
91-
92-
class PatternEdge(enc.TlvModel):
93-
dest = enc.UintField(TypeNumber.NODE_ID)
94-
tag = enc.UintField(TypeNumber.PATTERN_TAG)
95-
cons_sets = enc.RepeatedField(
96-
enc.ModelField(TypeNumber.CONSTRAINT, PatternConstraint)
97-
)
98-
99-
100-
class ValueEdge(enc.TlvModel):
101-
dest = enc.UintField(TypeNumber.NODE_ID)
102-
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)
103-
104-
105-
class Node(enc.TlvModel):
106-
id = enc.UintField(TypeNumber.NODE_ID)
107-
parent = enc.UintField(TypeNumber.PARENT_ID)
108-
rule_name = enc.RepeatedField(enc.BytesField(TypeNumber.IDENTIFIER, is_string=True))
109-
v_edges = enc.RepeatedField(enc.ModelField(TypeNumber.VALUE_EDGE, ValueEdge))
110-
p_edges = enc.RepeatedField(enc.ModelField(TypeNumber.PATTERN_EDGE, PatternEdge))
111-
sign_cons = enc.RepeatedField(enc.UintField(TypeNumber.KEY_NODE_ID))
112-
113-
114-
class TagSymbol(enc.TlvModel):
115-
tag = enc.UintField(TypeNumber.PATTERN_TAG)
116-
ident = enc.BytesField(TypeNumber.IDENTIFIER, is_string=True)
117-
118-
119-
class LvsModel(enc.TlvModel):
120-
version = enc.UintField(TypeNumber.VERSION)
121-
start_id = enc.UintField(TypeNumber.NODE_ID)
122-
named_pattern_cnt = enc.UintField(TypeNumber.NAMED_PATTERN_NUM)
123-
nodes = enc.RepeatedField(enc.ModelField(TypeNumber.NODE, Node))
124-
symbols = enc.RepeatedField(enc.ModelField(TypeNumber.TAG_SYMBOL, TagSymbol))
96+
fn: Optional[UserFnCall] = dc.field(
97+
default=None, metadata={'tlv_type': TypeNumber.USER_FN_CALL})
98+
99+
100+
@dc.dataclass
101+
class PatternConstraint:
102+
options: list[ConstraintOption] = dc.field(
103+
default_factory=list, metadata={'tlv_type': TypeNumber.CONS_OPTION})
104+
105+
106+
@dc.dataclass
107+
class PatternEdge:
108+
dest: Optional[int] = dc.field(
109+
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
110+
tag: Optional[int] = dc.field(
111+
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
112+
cons_sets: list[PatternConstraint] = dc.field(
113+
default_factory=list, metadata={'tlv_type': TypeNumber.CONSTRAINT})
114+
115+
116+
@dc.dataclass
117+
class ValueEdge:
118+
dest: Optional[int] = dc.field(
119+
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
120+
value: Optional[bytes] = dc.field(
121+
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})
122+
123+
124+
@dc.dataclass
125+
class Node:
126+
id: Optional[int] = dc.field(
127+
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
128+
parent: Optional[int] = dc.field(
129+
default=None, metadata={'tlv_type': TypeNumber.PARENT_ID})
130+
rule_name: list[str] = dc.field(
131+
default_factory=list, metadata={'tlv_type': TypeNumber.IDENTIFIER})
132+
v_edges: list[ValueEdge] = dc.field(
133+
default_factory=list, metadata={'tlv_type': TypeNumber.VALUE_EDGE})
134+
p_edges: list[PatternEdge] = dc.field(
135+
default_factory=list, metadata={'tlv_type': TypeNumber.PATTERN_EDGE})
136+
sign_cons: list[int] = dc.field(
137+
default_factory=list, metadata={'tlv_type': TypeNumber.KEY_NODE_ID})
138+
139+
140+
@dc.dataclass
141+
class TagSymbol:
142+
tag: Optional[int] = dc.field(
143+
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
144+
ident: Optional[str] = dc.field(
145+
default=None, metadata={'tlv_type': TypeNumber.IDENTIFIER})
146+
147+
148+
@dc.dataclass
149+
class LvsModel:
150+
version: Optional[int] = dc.field(
151+
default=None, metadata={'tlv_type': TypeNumber.VERSION})
152+
start_id: Optional[int] = dc.field(
153+
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
154+
named_pattern_cnt: Optional[int] = dc.field(
155+
default=None, metadata={'tlv_type': TypeNumber.NAMED_PATTERN_NUM})
156+
nodes: list[Node] = dc.field(
157+
default_factory=list, metadata={'tlv_type': TypeNumber.NODE})
158+
symbols: list[TagSymbol] = dc.field(
159+
default_factory=list, metadata={'tlv_type': TypeNumber.TAG_SYMBOL})
160+
161+
def encode(self) -> bytearray:
162+
return tlv_encode(self)
163+
164+
@classmethod
165+
def parse(cls, wire: BinaryStr) -> 'LvsModel':
166+
return tlv_parse(cls, wire)

‎src/ndn/app_support/light_versec/checker.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
from ...encoding import BinaryStr, Component, FormalName, Name, NonStrictName
2828
from ...security import Keychain
29-
from ..security_v2 import parse_certificate
29+
from ..security_v2_2 import parse_certificate
3030
from . import binary as bny
3131
from .compiler import top_order
3232

0 commit comments

Comments
 (0)