Github user juliengreard commented on a diff in the pull request:

    https://github.com/apache/thrift/pull/1293#discussion_r125757570
  
    --- Diff: compiler/cpp/src/thrift/generate/t_py_generator.cc ---
    @@ -634,6 +659,49 @@ void t_py_generator::generate_py_struct(t_struct* 
tstruct, bool is_exception) {
       generate_py_struct_definition(f_types_, tstruct, is_exception);
     }
     
    +
    +/**
    + * Generate the thrift_spec for a struct
    + * e.g. (4, TType.LIST, 'struct_list', (TType.STRUCT, (RandomStuff, None), 
False), None, ),  # 4
    + */
    +void t_py_generator::generate_py_thrift_spec(ofstream& out,
    +                                             t_struct* tstruct,
    +                                             bool /*is_exception*/) {
    +  const vector<t_field*>& sorted_members = tstruct->get_sorted_members();
    +  vector<t_field*>::const_iterator m_iter;
    +
    +  // Add struct definition to list so thrift_spec can be fixed for 
recursive structures.
    +  indent(out) << "all_structs.append(" << tstruct->get_name() << ")" << 
endl;
    +
    +  if (sorted_members.empty() || (sorted_members[0]->get_key() >= 0)) {
    +    indent(out) << tstruct->get_name() << ".thrift_spec = (" << endl;
    +    indent_up();
    +
    +    int sorted_keys_pos = 0;
    +    for (m_iter = sorted_members.begin(); m_iter != sorted_members.end(); 
++m_iter) {
    +
    +      for (; sorted_keys_pos != (*m_iter)->get_key(); sorted_keys_pos++) {
    +        indent(out) << "None,  # " << sorted_keys_pos << endl;
    +      }
    +
    +      indent(out) << "(" << (*m_iter)->get_key() << ", " << 
type_to_enum((*m_iter)->get_type())
    --- End diff --
    
    a comment showing an example of the python code generated from this peace 
of code would be a plus


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to