TLV_IE_Collection: use snake-style names during from_dict()

The TLV_IE_Collection, just like the individual TLV classes, do
use their snake-style names when converting from binary to dict
using the to_dict() method.  It is inconsistent (and a bug) to
expect the CamelCase names during encoding (from_dict).  After all,
we want the output of to_dict() to be used as input to from_dict().

Change-Id: Iabd1ad98c3878659d123eef919c22ca824886f8a
This commit is contained in:
Harald Welte 2023-07-09 21:25:14 +02:00
parent f818acd5eb
commit 30de9fd8ab
3 changed files with 13 additions and 14 deletions

View File

@ -349,28 +349,28 @@ class ADF_ARAM(CardADF):
# REF # REF
ref_do_content = [] ref_do_content = []
if opts.aid: if opts.aid:
ref_do_content += [{'AidRefDO': opts.aid}] ref_do_content += [{'aid_ref_do': opts.aid}]
elif opts.aid_empty: elif opts.aid_empty:
ref_do_content += [{'AidRefEmptyDO': None}] ref_do_content += [{'aid_ref_empty_do': None}]
ref_do_content += [{'DevAppIdRefDO': opts.device_app_id}] ref_do_content += [{'dev_app_id_ref_do': opts.device_app_id}]
if opts.pkg_ref: if opts.pkg_ref:
ref_do_content += [{'PkgRefDO': opts.pkg_ref}] ref_do_content += [{'pkg_ref_do': opts.pkg_ref}]
# AR # AR
ar_do_content = [] ar_do_content = []
if opts.apdu_never: if opts.apdu_never:
ar_do_content += [{'ApduArDO': {'generic_access_rule': 'never'}}] ar_do_content += [{'apdu_ar_od': {'generic_access_rule': 'never'}}]
elif opts.apdu_always: elif opts.apdu_always:
ar_do_content += [{'ApduArDO': {'generic_access_rule': 'always'}}] ar_do_content += [{'apdu_ar_do': {'generic_access_rule': 'always'}}]
elif opts.apdu_filter: elif opts.apdu_filter:
# TODO: multiple filters # TODO: multiple filters
ar_do_content += [{'ApduArDO': {'apdu_filter': [opts.apdu_filter]}}] ar_do_content += [{'apdu_ar_do': {'apdu_filter': [opts.apdu_filter]}}]
if opts.nfc_always: if opts.nfc_always:
ar_do_content += [{'NfcArDO': {'nfc_event_access_rule': 'always'}}] ar_do_content += [{'nfc_ar_do': {'nfc_event_access_rule': 'always'}}]
elif opts.nfc_never: elif opts.nfc_never:
ar_do_content += [{'NfcArDO': {'nfc_event_access_rule': 'never'}}] ar_do_content += [{'nfc_ar_do': {'nfc_event_access_rule': 'never'}}]
if opts.android_permissions: if opts.android_permissions:
ar_do_content += [{'PermArDO': {'permissions': opts.android_permissions}}] ar_do_content += [{'perm_ar_do': {'permissions': opts.android_permissions}}]
d = [{'RefArDO': [{'RefDO': ref_do_content}, {'ArDO': ar_do_content}]}] d = [{'ref_ar_do': [{'ref_do': ref_do_content}, {'ar_do': ar_do_content}]}]
csrado = CommandStoreRefArDO() csrado = CommandStoreRefArDO()
csrado.from_dict(d) csrado.from_dict(d)
res_do = ADF_ARAM.store_data(self._cmd.card._scc._tp, csrado) res_do = ADF_ARAM.store_data(self._cmd.card._scc._tp, csrado)

View File

@ -232,8 +232,7 @@ class ADF_SD(CardADF):
self._cmd.poutput_json(ie.to_dict()) self._cmd.poutput_json(ie.to_dict())
def complete_get_data(self, text, line, begidx, endidx) -> List[str]: def complete_get_data(self, text, line, begidx, endidx) -> List[str]:
#data_dict = {camel_to_snake(str(x.__name__)): x for x in DataCollection.possible_nested} data_dict = {camel_to_snake(str(x.__name__)): x for x in DataCollection.possible_nested}
data_dict = {str(x.__name__): x for x in DataCollection.possible_nested}
index_dict = {1: data_dict} index_dict = {1: data_dict}
return self._cmd.index_based_complete(text, line, begidx, endidx, index_dict=index_dict) return self._cmd.index_based_complete(text, line, begidx, endidx, index_dict=index_dict)

View File

@ -318,7 +318,7 @@ class TLV_IE_Collection(metaclass=TlvCollectionMeta):
self.members_by_tag = {} self.members_by_tag = {}
self.members_by_name = {} self.members_by_name = {}
self.members_by_tag = {m.tag: m for m in self.members} self.members_by_tag = {m.tag: m for m in self.members}
self.members_by_name = {m.__name__: m for m in self.members} self.members_by_name = {camel_to_snake(m.__name__): m for m in self.members}
# if we are a constructed IE, [ordered] list of actual child-IE instances # if we are a constructed IE, [ordered] list of actual child-IE instances
self.children = kwargs.get('children', []) self.children = kwargs.get('children', [])
self.encoded = None self.encoded = None