Python: Added support for file_identifiers (#5123)

* Python: Added support for file_identifiers

* Added tests. Fixed file_identifier code.

* Python: Fixed excessive padding of file_identifier. Repaired tests.

* Python: Made code compatible with python2.7

* Python: Typo fix in @endcond

* whitespace normaalization

* Stylistic change from if(not X is None) to if(X is not None). Added comment to type string.

* Python: Added support for automatic code generation of file_identifiers. Added tests for said code generation.

* converted sprintf to snprintf

* Bugfix, added snprint deffinition for MSVC

* changed snprint deffinition for MSVC to sprint_s

* changed scanf to IntToStringHex. Renamed HasFileIdentifier to GenHasFileIdentifier.

* Added updated genereated code to commit

* Python bugix: flatc no longer produces HasFileIdentfier for shcemas with no file identifier

* Added tests to verify `MonsterBufferHasIdentifier` returns false on no Identifier

* Python: added tests for GetBufferIdentifier and BufferHasIdentifier
Python: removed unessasary parenethesis in if statements
Minor format changes.

* Python : correceted instances of keyword arguments being called as positional arguments

* fixed typos and grammer in comments

* Minor style fixes

* Indentation fix

* Equals style changes

* Python: Fixed Alignment Issues. Changed test code to test against atual output

* Ran make(forgot to run make last commit)

* Python: Style changes

* Style changes

* indentation and style

* readded CONTRIBUTING.md

* Formatting tweak

Mostly to make CI run again

* More formatting fixes

* More formatting fixes

* More formatting fixes

* More formatting fixes

* Formatting fix

* More formatting fixes

* Formatting

* ran generate_code.sh
This commit is contained in:
Joseph Pyott
2019-07-26 14:06:25 -04:00
committed by Wouter van Oortmerssen
parent a5ca8bee4d
commit 9fa8245e81
15 changed files with 115 additions and 19 deletions

View File

@@ -612,6 +612,30 @@ class PythonGenerator : public BaseGenerator {
GetEndOffsetOnTable(struct_def, code_ptr);
}
// Generate function to check for proper file identifier
void GenHasFileIdentifier(const StructDef &struct_def,
std::string *code_ptr) {
std::string &code = *code_ptr;
std::string escapedID;
// In the event any of file_identifier characters are special(NULL, \, etc),
// problems occur. To prevent this, convert all chars to their hex-escaped
// equivalent.
for (auto it = parser_.file_identifier_.begin();
it != parser_.file_identifier_.end(); ++it) {
escapedID += "\\x" + IntToStringHex(*it, 2);
}
code += Indent + "@classmethod\n";
code += Indent + "def " + NormalizedName(struct_def);
code += "BufferHasIdentifier(cls, buf, offset, size_prefixed=False):";
code += "\n";
code += Indent + Indent;
code += "return flatbuffers.util.BufferHasIdentifier(buf, offset, b\"";
code += escapedID;
code += "\", size_prefixed=size_prefixed)\n";
code += "\n";
}
// Generate struct or table methods.
void GenStruct(const StructDef &struct_def, std::string *code_ptr) {
if (struct_def.generated) return;
@@ -622,6 +646,10 @@ class PythonGenerator : public BaseGenerator {
// Generate a special accessor for the table that has been declared as
// the root type.
NewRootTypeFromBuffer(struct_def, code_ptr);
if (parser_.file_identifier_.length()){
// Generate a special function to test file_identifier
GenHasFileIdentifier(struct_def, code_ptr);
}
}
// Generate the Init method that sets the field in a pre-existing
// accessor object. This is to allow object reuse.