vppapigen map: raise ValueError when fieldname is python keyword

When working on the lb api, one of the field names was chosen as 'as'
(application server). Since 'as' is a python keyword, the field was
renamed to _1 in vpp_papi.

This changeset instead fails early with a descriptive message,
hopefully saving others time troubleshooting the issue.

    ValueError: Fieldname 'as' is a python keyword and
    is not accessible via the python API.

Type: feature
Change-Id: Ib048d97de0e392645540092e356cf8989848c947
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
This commit is contained in:
Paul Vinciguerra
2019-08-06 19:58:24 -04:00
committed by Dave Wallace
parent c458f5c09a
commit ff47fb6456
3 changed files with 10 additions and 6 deletions

View File

@ -13,7 +13,7 @@
* limitations under the License.
*/
option version = "3.1.0";
option version = "4.0.0";
import "vnet/ip/ip_types.api";
@ -281,19 +281,19 @@ autoreply define map_param_set_security_check
/** \brief Set MAP traffic class parameters
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@param copy - 1 = copy packet class/TOS field, 0 = use class instead
@param class - class field value when copy == 0
@param copy - 1 = copy packet class/TOS field, 0 = use tc_class instead
@param tc_class - class field value when copy == 0
*/
autoreply define map_param_set_traffic_class
{
u32 client_index;
u32 context;
bool copy;
u8 class;
u8 tc_class;
};
/** \brief Set MAP TCP parammeters
/** \brief Set MAP TCP parameters
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@parma tcp_mss - TCP MSS clamping value

View File

@ -523,7 +523,7 @@ static void
vl_api_map_param_set_traffic_class_reply_t *rmp;
int rv;
rv = map_param_set_traffic_class (mp->copy, mp->class);
rv = map_param_set_traffic_class (mp->copy, mp->tc_class);
REPLY_MACRO (VL_API_MAP_PARAM_SET_TRAFFIC_CLASS_REPLY);
}

View File

@ -5,6 +5,7 @@ import ply.lex as lex
import ply.yacc as yacc
import sys
import argparse
import keyword
import logging
import binascii
import os
@ -293,6 +294,9 @@ class Field():
def __init__(self, fieldtype, name, limit=None):
self.type = 'Field'
self.fieldtype = fieldtype
if name in keyword.kwlist:
raise ValueError("Fieldname {!r} is a python keyword and is not "
"accessible via the python API. ".format(name))
self.fieldname = name
self.limit = limit