docs: def _get_base(self, path):
          """
          Get project blueprint
          """
          base = None
  
          # Slightly ugly DRY violation for backwards compatibility with old
          # "_base" convention
          if os.path.isdir(os.path.join(path, "_blueprint")):
              base_dir = os.path.join(path, "_blueprint/")
              # Get the blueprint template and register it as a blueprint
              if os.path.exists(os.path.join(base_dir, "blueprint.py")):
                  filename, pathname, description = imp.find_module('blueprint', [base_dir])
                  base = imp.load_module('blueprint', filename, pathname, description)
                  self.blueprint_name = "_blueprint"
              else:
                  puts("No _blueprint/blueprint.py file found")
          elif os.path.isdir(os.path.join(path, "_base")):
              puts("Using old '_base' convention")
              base_dir = os.path.join(path, "_base/")
              if os.path.exists(os.path.join(base_dir, "base.py")):
                  filename, pathname, description = imp.find_module('base', [base_dir])
                  base = imp.load_module('base', filename, pathname, description)
                  self.blueprint_name = "_base"
              else:
                  puts("No _base/base.py file found")
  
          if base:
              base.base_dir = base_dir
  
          if hasattr(base, 'blueprint') and isinstance(base.blueprint, Blueprint):
              self.app.register_blueprint(base.blueprint, site=self)
  
          return base