Tom Plunket wrote:
> I have some code to autogenerate some boilerplate code so that I don't
> need to do the tedious setup stuff when I want to create a new module.
>
> So, my script prompts the user for the module name, then opens two
> files and those files each get the contents of one of these functions:
>
> def GetPyContents(module):
>       boilerplate = \
> """
> class %s:
>       pass
>
> if __name__ == '__main__':
>       import unittest
>       unittest.main('%s_t')
> """
>
>       return boilerplate % ((module,) * 2)
>
> def GetTestContents(module):
>       boilerplate = \
> """from %s import *
> import unittest
>
> class Test%s(unittest.TestCase):
>       def testConstruction(self):
>               self.failUnless(%s())
>
>       def testWriteMoreTests(self):
>               self.fail('This test should fail.')
>
> if __name__ == '__main__':
>       unittest.main()
> """
>
>       return boilerplate % ((module,) * 3)
>
> My question is, I don't like hardcoding the number of times that the
> module name should be repeated in the two return functions.  Is there
> an straight forward (inline-appropriate) way to count the number of
> '%s'es in the 'boilerplate' strings?  ...or maybe a different and more
> Pythonic way to do this?  (Maybe I could somehow use generators?)
>
> thx.
> -tom!


strings have a count() method.

Since you know that you won't have things like '%%s' in your
boilerplate, it's perfectly reasonable to use:

return boilerplate % ((module,) * boilerplate.count('%s'))

in your code.

Peace,
~Simon

return boilerplate % ((module,) * 3)

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to