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. * limitations under the License.
*/ */
option version = "3.1.0"; option version = "4.0.0";
import "vnet/ip/ip_types.api"; import "vnet/ip/ip_types.api";
@ -281,19 +281,19 @@ autoreply define map_param_set_security_check
/** \brief Set MAP traffic class parameters /** \brief Set MAP traffic class parameters
@param client_index - opaque cookie to identify the sender @param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request @param context - sender context, to match reply w/ request
@param copy - 1 = copy packet class/TOS field, 0 = use class instead @param copy - 1 = copy packet class/TOS field, 0 = use tc_class instead
@param class - class field value when copy == 0 @param tc_class - class field value when copy == 0
*/ */
autoreply define map_param_set_traffic_class autoreply define map_param_set_traffic_class
{ {
u32 client_index; u32 client_index;
u32 context; u32 context;
bool copy; 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 client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request @param context - sender context, to match reply w/ request
@parma tcp_mss - TCP MSS clamping value @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; vl_api_map_param_set_traffic_class_reply_t *rmp;
int rv; 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); 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 ply.yacc as yacc
import sys import sys
import argparse import argparse
import keyword
import logging import logging
import binascii import binascii
import os import os
@ -293,6 +294,9 @@ class Field():
def __init__(self, fieldtype, name, limit=None): def __init__(self, fieldtype, name, limit=None):
self.type = 'Field' self.type = 'Field'
self.fieldtype = fieldtype 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.fieldname = name
self.limit = limit self.limit = limit