docs: function createPythonClass (className, baseClass, body, methods, async = false) {
  
      const pythonStandardLibraries = {
          'base64': 'base64',
          'hashlib': 'hashlib',
          'math': 'math',
          'json.loads': 'json',
      }
  
      async = async ? 'async_support.' : ''
  
      const importFrom = (baseClass == 'Exchange') ?
          ('ccxt.' + async + 'base.exchange') :
          ('ccxt.' + async + baseClass)
  
      let bodyAsString = body.join ("\n")
  
      let header = [
          "# -*- coding: utf-8 -*-\n",
          "# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:",
          "# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n",
          'from ' + importFrom + ' import ' + baseClass,
          ... (bodyAsString.match (/basestring/) ? [
              "\n# -----------------------------------------------------------------------------\n",
              "try:",
              "    basestring  # Python 3",
              "except NameError:",
              "    basestring = str  # Python 2",
          ] : [])
      ]
  
      const libraries = []
  
      for (let library in pythonStandardLibraries) {
          const regex = new RegExp ("[^\\']" + library + "[^\\'a-zA-Z]")
          if (bodyAsString.match (regex))
              libraries.push ('import ' + pythonStandardLibraries[library])
      }
  
      const errorImports = []
  
      for (let error in errors) {
          const regex = new RegExp ("[^\\'\"]" + error + "[^\\'\"]")
          if (bodyAsString.match (regex))
              errorImports.push ('from ccxt.base.errors import ' + error)
      }
  
      const precisionImports = []
  
      for (let constant in precisionConstants) {
          if (bodyAsString.indexOf (constant) >= 0) {
              precisionImports.push ('from ccxt.base.decimal_to_precision import ' + constant)
          }
      }
  
      header = header.concat (libraries, errorImports, precisionImports)
  
      for (let method of methods) {
          const regex = new RegExp ('self\\.(' + method + ')\\s*\\(', 'g')
          bodyAsString = bodyAsString.replace (regex,
              (match, p1) => ('self.' + unCamelCase (p1) + '('))
      }
  
      header.push ("\n\nclass " + className + ' (' + baseClass + '):')
  
      const footer = [
          '', // footer (last empty line)
      ]
  
      const result = header.join ("\n") + "\n" + bodyAsString + "\n" + footer.join ('\n')
      return result
  }