text: import re
  import random
  
  TEMPLATE_RE = re.compile(r"\{(.+?)\}")
  
  
  class TextGenerator(object):
      def __init__(self, templates, parts, default_templates=None, variables=None):
          self.templates = templates
          self.default_templates = default_templates
          self.parts = parts
          self.variables = variables
  
      def generate_string(self, template=None):
          """
          Generates one string using the specified templates.
          If no templates are specified, use a random template from the default_templates list.
          """
          # this is bad
          if self.default_templates:
              text = self.templates[template or random.choice(self.default_templates)]
          else:
              text = random.choice(self.templates)
  
          # replace static variables in the template with provided values
          if self.variables:
              for key, value in self.variables.items():
                  text = text.replace("{%s}" % key, value)
  
          # get a list of all text parts we need
          required_parts = TEMPLATE_RE.findall(text)
  
          for required_part in required_parts:
              ppart = self.parts[required_part]
              # check if the part is a single string or a list
              if not isinstance(ppart, basestring):
                  part = random.choice(self.parts[required_part])
              else:
                  part = self.parts[required_part]
              text = text.replace("{%s}" % required_part, part)
  
          return text
  
      def generate_strings(self, amount, template=None):
          strings = []
          for i in xrange(amount):
              strings.append(self.generate_string())
          return strings
  
      def get_template(self, template):
          return self.templates[template]
  