Looks interesting, you might want to consider running your code through some of the existing Python checkers such as flake8 and pylint. If you want this to be generally available in repos, best to follow the language conventions For example flake8 noticed: $ flake8 --max-line-length=120 ./tools/net/ynl/samples/ynl.py ./tools/net/ynl/samples/ynl.py:251:55: F821 undefined name 'file_name' And pylint has more warnings tools/net/ynl/samples/ynl.py:1:0: C0114: Missing module docstring (missing-module-docstring) tools/net/ynl/samples/ynl.py:4:0: E0401: Unable to import 'jsonschema' (import-error) tools/net/ynl/samples/ynl.py:16:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:16:0: R0903: Too few public methods (0/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:49:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:57:4: C0116: Missing function or method docstring (missing-function-docstring) tools/net/ynl/samples/ynl.py:60:4: C0116: Missing function or method docstring (missing-function-docstring) tools/net/ynl/samples/ynl.py:63:4: C0116: Missing function or method docstring (missing-function-docstring) tools/net/ynl/samples/ynl.py:70:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:70:0: R0903: Too few public methods (1/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:84:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:84:0: R0902: Too many instance attributes (9/7) (too-many-instance-attributes) tools/net/ynl/samples/ynl.py:84:0: R0903: Too few public methods (1/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:109:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:109:0: R0903: Too few public methods (1/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:123:0: C0103: Constant name "genl_family_name_to_id" doesn't conform to UPPER_CASE naming style (invalid-name) tools/net/ynl/samples/ynl.py:147:8: W0603: Using the global statement (global-statement) tools/net/ynl/samples/ynl.py:147:8: C0103: Constant name "genl_family_name_to_id" doesn't conform to UPPER_CASE naming style (invalid-name) tools/net/ynl/samples/ynl.py:148:33: R1735: Consider using {} instead of dict() (use-dict-literal) tools/net/ynl/samples/ynl.py:160:16: C0103: Variable name "gm" doesn't conform to snake_case naming style (invalid-name) tools/net/ynl/samples/ynl.py:174:8: C0103: Attribute name "nl" doesn't conform to snake_case naming style (invalid-name) tools/net/ynl/samples/ynl.py:172:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:186:12: C0103: Variable name "a" doesn't conform to snake_case naming style (invalid-name) tools/net/ynl/samples/ynl.py:172:0: R0903: Too few public methods (1/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:191:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:195:8: W0602: Using global for 'genl_family_name_to_id' but no assignment is done (global-variable-not-assigned) tools/net/ynl/samples/ynl.py:195:8: C0103: Constant name "genl_family_name_to_id" doesn't conform to UPPER_CASE naming style (invalid-name) tools/net/ynl/samples/ynl.py:191:0: R0903: Too few public methods (0/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:206:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:207:31: W0621: Redefining name 'yaml' from outer scope (line 8) (redefined-outer-name) tools/net/ynl/samples/ynl.py:210:21: R1735: Consider using {} instead of dict() (use-dict-literal) tools/net/ynl/samples/ynl.py:207:23: W0613: Unused argument 'family' (unused-argument) tools/net/ynl/samples/ynl.py:241:4: C0116: Missing function or method docstring (missing-function-docstring) tools/net/ynl/samples/ynl.py:245:0: C0115: Missing class docstring (missing-class-docstring) tools/net/ynl/samples/ynl.py:247:13: W1514: Using open without explicitly specifying an encoding (unspecified-encoding) tools/net/ynl/samples/ynl.py:251:17: W1514: Using open without explicitly specifying an encoding (unspecified-encoding) tools/net/ynl/samples/ynl.py:251:54: E0602: Undefined variable 'file_name' (undefined-variable) tools/net/ynl/samples/ynl.py:259:20: R1735: Consider using {} instead of dict() (use-dict-literal) tools/net/ynl/samples/ynl.py:260:23: R1735: Consider using {} instead of dict() (use-dict-literal) tools/net/ynl/samples/ynl.py:302:14: R1735: Consider using {} instead of dict() (use-dict-literal) tools/net/ynl/samples/ynl.py:317:8: C0103: Variable name "op" doesn't conform to snake_case naming style (invalid-name) tools/net/ynl/samples/ynl.py:340:16: C0103: Variable name "gm" doesn't conform to snake_case naming style (invalid-name) tools/net/ynl/samples/ynl.py:316:4: R1710: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements) tools/net/ynl/samples/ynl.py:245:0: R0903: Too few public methods (0/2) (too-few-public-methods) tools/net/ynl/samples/ynl.py:5:0: C0411: standard import "import random" should be placed before "import jsonschema" (wrong-import-order) tools/net/ynl/samples/ynl.py:6:0: C0411: standard import "import socket" should be placed before "import jsonschema" (wrong-import-order) tools/net/ynl/samples/ynl.py:7:0: C0411: standard import "import struct" should be placed before "import jsonschema" (wrong-import-order) tools/net/ynl/samples/ynl.py:9:0: C0411: standard import "import os" should be placed before "import jsonschema" (wrong-import-order) ------------------------------------------------------------------ Your code has been rated at 7.64/10 (previous run: 7.64/10, +0.00)