Skip to content

Instantly share code, notes, and snippets.

@bencharb
Last active October 2, 2015 17:15
Show Gist options
  • Select an option

  • Save bencharb/be667a0532f97e57b84e to your computer and use it in GitHub Desktop.

Select an option

Save bencharb/be667a0532f97e57b84e to your computer and use it in GitHub Desktop.
class boilerplate template
class BoilClass(object):
'''
Print out class definition code. Does not create a class, just writes the code for you to edit.
'''
INDENT = ' '*4
def __init__(self, classname, *attrs, **kwargs):
bases=kwargs.get('bases') or ('object',)
if kwargs.get('init_newlines'):
kwargs['init_sep'] = ',\n'
self.init_sep = kwargs.get('init_sep') or ', '
self.classname = classname
self.bases = bases
self.attrs = attrs
@property
def init_sep_full(self):
if '\n' in self.init_sep:
return self.init_sep + ' '*17 # 17 spaces to indent "def __init__("
return self.init_sep
def initlines(self):
sep = '=None'+self.init_sep_full
line = sep.join(self.attrs)
if line is not '':
line = line+'=None'
return line
def selflines(self):
return ['self.%s = %s' % (attr,attr,) for attr in self.attrs]
def indent(self, line, times=1):
return self.INDENT*times+line
def init_line(self):
initline = self.initlines()
if initline is not '':
initline = 'self%s%s' % (self.init_sep_full, initline,)
return 'def __init__(%s):' % initline
def superline(self):
return 'super(%s, self).__init__()' % self.classname
def classline(self):
bases = self.bases or ('object',)
return 'class %s(%s):' % (self.classname, ', '.join(self.bases),)
def boilclass_val(self):
class_line = self.classline()
init_line = self.init_line()
super_line = self.superline()
self_lines = self.selflines()
init_line = self.indent(init_line, 1)
super_line = self.indent(super_line, 2)
self_sep = '\n'
self_lines = self_sep.join([self.indent(line, 2) for line in self_lines])
return '\n'.join([class_line, '', init_line, super_line, self_lines])
def prettyprint(self):
print self.boilclass_val()
def boilclass(classname, *attrs, **kwargs):
'''
IN [01]: boilclass('TestClass', 'at', 'at2', bases=('object', 'AMixinClass',))
OUT[01]:
class TestClass(object, AMixinClass):
def __init__(self, at=None, at2=None):
super(TestClass, self).__init__()
self.at=at
self.at2=at2
'''
boiler = BoilClass(classname, *attrs, **kwargs)
boiler.prettyprint()
def test_boilclass():
import hashlib
boiler = BoilClass('TestClass', 'at', 'at2', bases=('object', 'AMixinClass',))
val = boiler.boilclass_val()
expected_hash = '2d9e53ef03755d8eb19c68543874d4f0'
try:
assert hashlib.md5(val).hexdigest() == expected_hash
except AssertionError:
print 'test failed'
raise
else:
print 'test passed'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment