Skip to content

Commit c3246a6

Browse files
committed
add python client codec templates
apart from that, a few cleanups are applied to the code generator
1 parent 59b5259 commit c3246a6

File tree

6 files changed

+575
-23
lines changed

6 files changed

+575
-23
lines changed

binary/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
'EntryList_String_String',
8585
'EntryList_String_byteArray',
8686
'EntryList_String_EntryList_Integer_Long',
87-
'EntryList_UUID_List_Integer',
8887
'EntryList_Data_Data',
8988
'EntryList_Data_List_Data',
9089
]
@@ -114,6 +113,8 @@
114113
'List_MCEvent',
115114
'List_SqlColumnMetadata',
116115
'List_CPMember'
116+
'ListCN_Data',
117+
'List_List_Data',
117118
]
118119

119120
AllTypes = FixedLengthTypes + VarLengthTypes + FixedEntryListTypes + FixedMapTypes + FixedListTypes \

generator.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,7 @@
111111
print("Hazelcast Client Binary Protocol version %s" % (protocol_versions[-1]))
112112
env = create_environment(lang, namespace_arg)
113113

114-
if lang is not SupportedLanguages.CPP:
115-
template_filename = env.get_template("codec-template.%s.j2" % lang_str_arg)
116-
else:
117-
template_filename = env.get_template("codec-template.cpp.j2")
114+
template_filename = env.get_template("codec-template.%s.j2" % lang_str_arg)
118115

119116
codec_template = env.get_template(template_filename)
120117
generate_codecs(protocol_defs, codec_template, codec_output_dir, lang, env)
@@ -124,7 +121,7 @@
124121
custom_codec_template = env.get_template("custom-codec-template.%s.j2" % lang_str_arg)
125122
relative_custom_codec_output_dir = out_dir_arg if out_dir_arg is not None else custom_codec_output_directories[lang]
126123
custom_codec_output_dir = os.path.join(root_dir, relative_custom_codec_output_dir)
127-
generate_custom_codecs(custom_protocol_defs, custom_codec_template, custom_codec_output_dir, file_extensions[lang], env)
124+
generate_custom_codecs(custom_protocol_defs, custom_codec_template, custom_codec_output_dir, lang, env)
128125
print('Generated custom codecs are at \'%s\'' % custom_codec_output_dir)
129126

130127
if not no_binary_arg:

py/__init__.py

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
import keyword
2+
import re
3+
4+
5+
def py_types_encode_decode(t):
6+
if t not in _py_types:
7+
raise NotImplementedError("Missing type Mapping")
8+
9+
10+
_pattern1 = re.compile("(.)([A-Z][a-z]+)")
11+
_pattern2 = re.compile("([a-z0-9])([A-Z])")
12+
13+
14+
def py_param_name(type_name):
15+
type_name = _pattern1.sub(r"\1_\2", type_name)
16+
type_name = _pattern2.sub(r"\1_\2", type_name).lower()
17+
if keyword.iskeyword(type_name):
18+
return "_%s" % type_name
19+
return type_name
20+
21+
22+
def py_get_import_path_holders(param_type):
23+
return import_paths.get(param_type, [])
24+
25+
26+
py_ignore_service_list = [7, 9, 10, 11, 12, 19, 20, 22, 24, 25, 26, 27, 30, 31, 32, 33, 34]
27+
28+
29+
class ImportPathHolder:
30+
def __init__(self, name, path):
31+
self.name = name
32+
self.path = path
33+
34+
def get_import_statement(self):
35+
return "from hazelcast.%s import %s" % (self.path, self.name)
36+
37+
38+
class PathHolders:
39+
DataCodec = ImportPathHolder("DataCodec", "protocol.builtin")
40+
ByteArrayCodec = ImportPathHolder("ByteArrayCodec", "protocol.builtin")
41+
LongArrayCodec = ImportPathHolder("LongArrayCodec", "protocol.builtin")
42+
Address = ImportPathHolder("Address", "core")
43+
AddressCodec = ImportPathHolder("AddressCodec", "protocol.codec.custom.address_codec")
44+
ErrorHolder = ImportPathHolder("ErrorHolder", "protocol")
45+
ErrorHolderCodec = ImportPathHolder("ErrorHolderCodec", "protocol.codec.custom.error_holder_codec")
46+
StackTraceElement = ImportPathHolder("StackTraceElement", "protocol")
47+
StackTraceElementCodec = ImportPathHolder("StackTraceElementCodec", "protocol.codec.custom.stack_trace_element_codec")
48+
SimpleEntryView = ImportPathHolder("SimpleEntryView", "core")
49+
SimpleEntryViewCodec = ImportPathHolder("SimpleEntryViewCodec", "protocol.codec.custom.simple_entry_view_codec")
50+
DistributedObjectInfo = ImportPathHolder("DistributedObjectInfo", "core")
51+
DistributedObjectInfoCodec = ImportPathHolder("DistributedObjectInfoCodec", "protocol.codec.custom.distributed_object_info_codec")
52+
MemberInfo = ImportPathHolder("MemberInfo", "core")
53+
MemberInfoCodec = ImportPathHolder("MemberInfoCodec", "protocol.codec.custom.member_info_codec")
54+
MemberVersion = ImportPathHolder("MemberVersion", "core")
55+
MemberVersionCodec = ImportPathHolder("MemberVersionCodec", "protocol.codec.custom.member_version_codec")
56+
StringCodec = ImportPathHolder("StringCodec", "protocol.builtin",)
57+
ListLongCodec = ImportPathHolder("ListLongCodec", "protocol.builtin")
58+
ListIntegerCodec = ImportPathHolder("ListIntegerCodec", "protocol.builtin")
59+
ListUUIDCodec = ImportPathHolder("ListUUIDCodec", "protocol.builtin")
60+
ListDataCodec = ImportPathHolder("ListDataCodec", "protocol.builtin")
61+
ListMultiFrameCodec = ImportPathHolder("ListMultiFrameCodec", "protocol.builtin")
62+
EntryListCodec = ImportPathHolder("EntryListCodec", "protocol.builtin")
63+
EntryListLongByteArrayCodec = ImportPathHolder("EntryListLongByteArrayCodec", "protocol.builtin")
64+
EntryListIntegerUUIDCodec = ImportPathHolder("EntryListIntegerUUIDCodec", "protocol.builtin")
65+
EntryListIntegerLongCodec = ImportPathHolder("EntryListIntegerLongCodec", "protocol.builtin")
66+
EntryListIntegerIntegerCodec = ImportPathHolder("EntryListIntegerIntegerCodec", "protocol.builtin")
67+
EntryListUUIDLongCodec = ImportPathHolder("EntryListUUIDLongCodec", "protocol.builtin")
68+
EntryListUUIDUUIDCodec = ImportPathHolder("EntryListUUIDUUIDCodec", "protocol.builtin")
69+
EntryListUUIDListIntegerCodec = ImportPathHolder("EntryListUUIDListIntegerCodec", "protocol.builtin")
70+
MapCodec = ImportPathHolder("MapCodec", "protocol.builtin")
71+
CodecUtil = ImportPathHolder("CodecUtil", "protocol.builtin")
72+
IndexConfig = ImportPathHolder("IndexConfig", "config")
73+
IndexConfigCodec = ImportPathHolder("IndexConfigCodec", "protocol.codec.custom.index_config_codec")
74+
BitmapIndexOptions = ImportPathHolder("BitmapIndexOptions", "config")
75+
BitmapIndexOptionsCodec = ImportPathHolder("BitmapIndexOptionsCodec", "protocol.codec.custom.bitmap_index_options_codec")
76+
PagingPredicateHolder = ImportPathHolder("PagingPredicateHolder", "protocol")
77+
PagingPredicateHolderCodec = ImportPathHolder("PagingPredicateHolderCodec", "protocol.codec.custom.paging_predicate_holder_codec")
78+
AnchorDataListHolder = ImportPathHolder("AnchorDataListHolder", "protocol")
79+
AnchorDataListHolderCodec = ImportPathHolder("AnchorDataListHolderCodec", "protocol.codec.custom.anchor_data_list_holder_codec")
80+
EndpointQualifier = ImportPathHolder("EndpointQualifier", "protocol")
81+
EndpointQualifierCodec = ImportPathHolder("EndpointQualifierCodec", "protocol.codec.custom.endpoint_qualifier_codec")
82+
83+
84+
import_paths = {
85+
"CodecUtil": PathHolders.CodecUtil,
86+
"longArray": [PathHolders.LongArrayCodec],
87+
"byteArray": [PathHolders.ByteArrayCodec],
88+
"String": [PathHolders.StringCodec],
89+
"Data": [PathHolders.DataCodec],
90+
"Address": [PathHolders.Address, PathHolders.AddressCodec],
91+
"ErrorHolder": [PathHolders.ErrorHolder, PathHolders.ErrorHolderCodec],
92+
"StackTraceElement": [PathHolders.StackTraceElement, PathHolders.StackTraceElementCodec],
93+
"SimpleEntryView": [PathHolders.SimpleEntryView, PathHolders.SimpleEntryViewCodec],
94+
"DistributedObjectInfo": [PathHolders.DistributedObjectInfo, PathHolders.DistributedObjectInfoCodec],
95+
"MemberInfo": [PathHolders.MemberInfo, PathHolders.MemberInfoCodec],
96+
"MemberVersion": [PathHolders.MemberVersion, PathHolders.MemberVersionCodec],
97+
"List_Long": [PathHolders.ListLongCodec],
98+
"List_Integer": [PathHolders.ListIntegerCodec],
99+
"List_UUID": [PathHolders.ListUUIDCodec],
100+
"List_String": [PathHolders.ListMultiFrameCodec, PathHolders.StringCodec],
101+
"List_Data": [PathHolders.ListMultiFrameCodec, PathHolders.DataCodec],
102+
"ListCN_Data": [PathHolders.ListMultiFrameCodec, PathHolders.DataCodec],
103+
"List_MemberInfo": [PathHolders.ListMultiFrameCodec, PathHolders.MemberInfoCodec],
104+
"List_DistributedObjectInfo": [PathHolders.ListMultiFrameCodec, PathHolders.DistributedObjectInfoCodec],
105+
"List_StackTraceElement": [PathHolders.ListMultiFrameCodec, PathHolders.StackTraceElementCodec],
106+
"EntryList_String_String": [PathHolders.EntryListCodec, PathHolders.StringCodec],
107+
"EntryList_String_byteArray": [PathHolders.EntryListCodec, PathHolders.StringCodec, PathHolders.ByteArrayCodec],
108+
"EntryList_Long_byteArray": [PathHolders.EntryListLongByteArrayCodec],
109+
"EntryList_Integer_UUID": [PathHolders.EntryListIntegerUUIDCodec],
110+
"EntryList_Integer_Long": [PathHolders.EntryListIntegerLongCodec],
111+
"EntryList_Integer_Integer": [PathHolders.EntryListIntegerIntegerCodec],
112+
"EntryList_UUID_Long": [PathHolders.EntryListUUIDLongCodec],
113+
"EntryList_String_EntryList_Integer_Long": [PathHolders.EntryListCodec, PathHolders.StringCodec,
114+
PathHolders.EntryListIntegerLongCodec],
115+
"EntryList_UUID_UUID": [PathHolders.EntryListUUIDUUIDCodec],
116+
"EntryList_UUID_List_Integer": [PathHolders.EntryListUUIDListIntegerCodec],
117+
"EntryList_Data_Data": [PathHolders.EntryListCodec, PathHolders.DataCodec],
118+
"EntryList_Data_List_Data": [PathHolders.EntryListCodec, PathHolders.DataCodec, PathHolders.ListDataCodec],
119+
"Map_String_String": [PathHolders.MapCodec, PathHolders.StringCodec],
120+
"IndexConfig": [PathHolders.IndexConfig, PathHolders.IndexConfigCodec],
121+
"ListIndexConfig": [PathHolders.IndexConfigCodec, PathHolders.ListMultiFrameCodec],
122+
"BitmapIndexOptions": [PathHolders.BitmapIndexOptions, PathHolders.BitmapIndexOptionsCodec],
123+
"AnchorDataListHolder": [PathHolders.AnchorDataListHolder, PathHolders.AnchorDataListHolderCodec],
124+
"PagingPredicateHolder": [PathHolders.PagingPredicateHolder, PathHolders.PagingPredicateHolderCodec],
125+
"EndpointQualifier": [PathHolders.EndpointQualifier, PathHolders.EndpointQualifierCodec],
126+
"Map_EndpointQualifier_Address": [PathHolders.MapCodec, PathHolders.EndpointQualifierCodec,
127+
PathHolders.AddressCodec]
128+
}
129+
130+
131+
_py_types = {
132+
"boolean",
133+
"byte",
134+
"int",
135+
"long",
136+
"UUID",
137+
138+
"byteArray",
139+
"longArray",
140+
"String",
141+
"Data",
142+
143+
"Address",
144+
"DistributedObjectInfo",
145+
"SimpleEntryView",
146+
"ErrorHolder",
147+
"StackTraceElement",
148+
"MemberInfo",
149+
"MemberVersion",
150+
"EndpointQualifier",
151+
152+
"IndexConfig",
153+
"BitmapIndexOptions",
154+
155+
"List_Integer",
156+
"List_Long",
157+
"List_UUID",
158+
159+
"List_byteArray",
160+
"List_Data",
161+
"List_DistributedObjectInfo",
162+
"List_MemberInfo",
163+
"List_String",
164+
"List_StackTraceElement",
165+
"ListCN_Data",
166+
167+
"EntryList_UUID_Long",
168+
169+
"EntryList_String_String",
170+
"EntryList_UUID_List_Integer",
171+
"EntryList_Data_Data",
172+
173+
"Map_String_String",
174+
"Map_EndpointQualifier_Address",
175+
}
176+
177+
178+
def py_escape_keyword(value):
179+
if value in keyword.kwlist:
180+
return "%s_" % value
181+
else:
182+
return value

0 commit comments

Comments
 (0)