Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. def legal_check(obj):
  2. if isinstance(obj, list):
  3. for i in obj:
  4. if i in keyword.kwlist:
  5. raise SyntaxError("%s is an invalid name (Found in Keyword List)".format(i))
  6. elif not re.match("^[a-zA-Z][a-zA-Z0-9_=]*$", str(i)):
  7. raise SyntaxError("%s is an invalid name (Invalid characters used)".format(i))
  8. elif isinstance(obj, str):
  9. obj = obj.replace(',', ' ')
  10. obj = obj.split()
  11. for i in obj:
  12. if i in keyword.kwlist:
  13. raise SyntaxError("%s is an invalid name (Found in Keyword List)".format(i))
  14. elif not re.match("^[a-zA-Z][a-zA-Z0-9_=]*$", str(i)):
  15. raise SyntaxError("%s is an invalid name (Invalid characters used)".format(i))
  16.  
  17. legal_check(type_name)
  18. legal_check(field_names)
  19.  
  20.  
  21. for i in defaults:
  22. if i not in field_names:
  23. raise SyntaxError('Dictionary Key not in field_names')
  24.  
  25. def gen_init(f_names):
  26.  
  27. init_string = """
  28. def __init__(self, """
  29.  
  30. if isinstance(f_names, str):
  31. f_names = f_names.replace(', ', ' ')
  32. f_names = f_names.replace(',', ' ')
  33. f_names = f_names.split(' ')
  34.  
  35. if defaults:
  36. for k,v in defaults:
  37. init_string += "%s=%s" % (k,v)
  38. else:
  39. for idx, i in enumerate(f_names):
  40. if idx != len(f_names) - 1:
  41. init_string += "%s, " % i
  42. else:
  43. init_string += "%s):" % i
  44.  
  45.  
  46. for i in f_names:
  47. init_string += "\n self.%s = %s" % (i, i)
  48. return init_string
  49.  
  50.  
  51.  
  52. class_header = """
  53. class {type_name}:
  54. _fields = {field_names}
  55. _mutable = {mutable}
  56. """.format(type_name = str(type_name), field_names = str(field_names), mutable = str(mutable))
  57.  
  58.  
  59.  
  60. class_definition = class_header + gen_init(field_names)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement