Skip to content

Instantly share code, notes, and snippets.

@Hammer2900
Created June 18, 2019 21:29
Show Gist options
  • Save Hammer2900/07a6bd31375c10356d95a43d17282772 to your computer and use it in GitHub Desktop.
Save Hammer2900/07a6bd31375c10356d95a43d17282772 to your computer and use it in GitHub Desktop.
json to class string
class GenerateTextFromRules:
class_header = 'class {name}:\n'
method = ' def __init__(self, {vars}):\n'
var = ' self.{name} = {value}\n'
def __init__(self, name, *args, **kwargs):
print(''.join([
self.make_class_header(name),
self.make_method(self.combine_var(args)),
self.make_var(args)
]))
def make_class_header(self, name):
return self.class_header.format(name=name)
def make_method(self, vars):
return self.method.format(vars=vars)
def make_var(self, *args):
return ''.join([self.var.format(name=x[0], value=x[0]) for x in args[0]])
def combine_var(self, *args):
return ', '.join([x[0] for x in args[0]])
class GenerateTextFromKwRules:
class_header = 'class {name}:\n'
method = ' def __init__(self, **kw):\n'
var = ' self.{name} = kw.get("{value}")\n'
repre = '\n def __repr__(self, **kw):\n return f"{name}: {vars}"\n'
def __init__(self, name, *args, **kwargs):
print(''.join([
self.make_class_header(name),
self.make_method(self.combine_var(args)),
self.make_var(args),
self.make_repr(name, args)
]))
def make_class_header(self, name):
return self.class_header.format(name=name)
def make_method(self, vars):
return self.method.format(vars=vars)
def make_var(self, *args):
return ''.join([self.var.format(name=x[0], value=x[0]) for x in args[0]])
def make_repr(self, name, *args):
return self.repre.format(
name=name,
vars=', '.join([f'self.{x[0]}' for x in args[0]])
)
def combine_var(self, *args):
return ', '.join([x[0] for x in args[0]])
LIST_NAMES = ['Super', 'Norest', 'Fill']
def gen_name():
first_part = random.choice(LIST_NAMES)
midle_part = random.randint(1, 50)
return f'{first_part}{midle_part}Class'
xxx = json.loads(a)
class DataClassGenerator:
def __init__(self, data: dict):
self.data=data
self.res = []
self.create()
def create(self):
self.res.append(gen_name())
for lines in self.data.items():
if lines.__len__() == 2:
if isinstance(lines[1], dict):
self.res.append((lines[0], {}))
elif isinstance(lines[1], list):
self.res.append((lines[0], []))
else:
self.res.append((lines[0], lines[1]))
GenerateTextFromKwRules(*self.res)
DataClassGenerator(xxx)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment