python-requests.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { isJSONContentType } from "~/helpers/utils/contenttypes"
  2. const printHeaders = (headers) => {
  3. if (headers.length) {
  4. return [`headers = {\n`, ` ${headers.join(",\n ")}\n`, `}\n`]
  5. }
  6. return []
  7. }
  8. export const PythonRequestsCodegen = {
  9. id: "python-requests",
  10. name: "Python Requests",
  11. generator: ({
  12. url,
  13. pathName,
  14. queryString,
  15. auth,
  16. httpUser,
  17. httpPassword,
  18. bearerToken,
  19. method,
  20. rawInput,
  21. rawParams,
  22. rawRequestBody,
  23. contentType,
  24. headers,
  25. }) => {
  26. const requestString = []
  27. let genHeaders = []
  28. requestString.push(`import requests\n\n`)
  29. requestString.push(`url = '${url}${pathName}${queryString}'\n`)
  30. // auth headers
  31. if (auth === "Basic Auth") {
  32. const basic = `${httpUser}:${httpPassword}`
  33. genHeaders.push(
  34. `'Authorization': 'Basic ${window.btoa(unescape(encodeURIComponent(basic)))}'`
  35. )
  36. } else if (auth === "Bearer Token" || auth === "OAuth 2.0") {
  37. genHeaders.push(`'Authorization': 'Bearer ${bearerToken}'`)
  38. }
  39. // custom headers
  40. if (headers.length) {
  41. headers.forEach(({ key, value }) => {
  42. if (key) genHeaders.push(`'${key}': '${value}'`)
  43. })
  44. }
  45. // initial request setup
  46. let requestBody = rawInput ? rawParams : rawRequestBody
  47. if (method == "GET") {
  48. requestString.push(...printHeaders(genHeaders))
  49. requestString.push(`response = requests.request(\n`)
  50. requestString.push(` '${method}',\n`)
  51. requestString.push(` '${url}${pathName}${queryString}',\n`)
  52. }
  53. if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) {
  54. genHeaders.push(`'Content-Type': '${contentType}'`)
  55. requestString.push(...printHeaders(genHeaders))
  56. if (isJSONContentType(contentType)) {
  57. requestBody = JSON.stringify(requestBody)
  58. requestString.push(`data = ${requestBody}\n`)
  59. } else if (contentType.includes("x-www-form-urlencoded")) {
  60. const formData = []
  61. if (requestBody.includes("=")) {
  62. requestBody.split("&").forEach((rq) => {
  63. const [key, val] = rq.split("=")
  64. formData.push(`('${key}', '${val}')`)
  65. })
  66. }
  67. if (formData.length) {
  68. requestString.push(`data = [${formData.join(",\n ")}]\n`)
  69. }
  70. } else {
  71. requestString.push(`data = '''${requestBody}'''\n`)
  72. }
  73. requestString.push(`response = requests.request(\n`)
  74. requestString.push(` '${method}',\n`)
  75. requestString.push(` '${url}${pathName}${queryString}',\n`)
  76. requestString.push(` data=data,\n`)
  77. }
  78. if (genHeaders.length) {
  79. requestString.push(` headers=headers,\n`)
  80. }
  81. requestString.push(`)\n\n`)
  82. requestString.push(`print(response)`)
  83. return requestString.join("")
  84. },
  85. }