feat: methods to get/put an HTTP resource (#63)

This commit is contained in:
Julien Fontanet 2017-05-22 15:51:41 +02:00 committed by GitHub
parent 26f630d9d6
commit 643ea9e523
3 changed files with 81 additions and 8 deletions

View File

@ -37,7 +37,7 @@
"debug": "^2.6.6", "debug": "^2.6.6",
"event-to-promise": "^0.8.0", "event-to-promise": "^0.8.0",
"exec-promise": "^0.6.1", "exec-promise": "^0.6.1",
"http-request-plus": "^0.1.1", "http-request-plus": "^0.1.4",
"json-rpc-protocol": "^0.11.2", "json-rpc-protocol": "^0.11.2",
"kindof": "^2.0.0", "kindof": "^2.0.0",
"lodash": "^4.17.4", "lodash": "^4.17.4",
@ -53,6 +53,7 @@
"babel-cli": "^6.24.1", "babel-cli": "^6.24.1",
"babel-eslint": "^7.2.3", "babel-eslint": "^7.2.3",
"babel-plugin-lodash": "^3.2.11", "babel-plugin-lodash": "^3.2.11",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-preset-env": "^1.4.0", "babel-preset-env": "^1.4.0",
"babel-preset-stage-0": "^6.24.1", "babel-preset-stage-0": "^6.24.1",
"cross-env": "^4.0.0", "cross-env": "^4.0.0",
@ -76,7 +77,8 @@
}, },
"babel": { "babel": {
"plugins": [ "plugins": [
"lodash" "lodash",
"transform-decorators-legacy"
], ],
"presets": [ "presets": [
[ [

View File

@ -2,10 +2,13 @@ import Collection from 'xo-collection'
import createDebug from 'debug' import createDebug from 'debug'
import kindOf from 'kindof' import kindOf from 'kindof'
import ms from 'ms' import ms from 'ms'
import httpRequest from 'http-request-plus'
import { BaseError } from 'make-error' import { BaseError } from 'make-error'
import { EventEmitter } from 'events' import { EventEmitter } from 'events'
import { filter, forEach, isArray, isObject, map, startsWith } from 'lodash' import { filter, forEach, isArray, isObject, map, startsWith } from 'lodash'
import { import {
cancelable,
CancelToken,
catchPlus as pCatch, catchPlus as pCatch,
delay as pDelay delay as pDelay
} from 'promise-toolbox' } from 'promise-toolbox'
@ -309,6 +312,66 @@ export class Xapi extends EventEmitter {
throw new Error('there is no object with the UUID ' + uuid) throw new Error('there is no object with the UUID ' + uuid)
} }
@cancelable
getResource ($cancelToken, pathname, { host, query }) {
return httpRequest(
$cancelToken,
this._url,
host && {
hostname: this.getObject(host).address
},
{
path: pathname,
query: {
...query,
session_id: this.sessionId
},
rejectUnauthorized: !this._allowUnauthorized
}
)
}
@cancelable
putResource ($cancelToken, stream, pathname, {
host,
query
} = {}) {
const headers = {}
// Xen API does not support chunk encoding.
const { length } = stream
if (length === undefined) {
// add a fake huge content length (1 PiB)
headers['content-length'] = '1125899906842624'
const { cancel, token } = CancelToken.source()
$cancelToken = CancelToken.race([ $cancelToken, token ])
// when the data has been emitted, close the connection
stream.on('end', () => {
setTimeout(cancel, 1e3)
})
}
return httpRequest.put(
$cancelToken,
this._url,
host && {
hostname: this.getObject(host).address
},
{
body: stream,
headers,
path: pathname,
query: {
...query,
session_id: this.sessionId
},
rejectUnauthorized: !this._allowUnauthorized
}
)
}
get pool () { get pool () {
return this._pool return this._pool
} }

View File

@ -430,7 +430,7 @@ babel-plugin-syntax-class-properties@^6.8.0:
version "6.13.0" version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
babel-plugin-syntax-decorators@^6.13.0: babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0:
version "6.13.0" version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
@ -495,6 +495,14 @@ babel-plugin-transform-class-properties@^6.24.1:
babel-runtime "^6.22.0" babel-runtime "^6.22.0"
babel-template "^6.24.1" babel-template "^6.24.1"
babel-plugin-transform-decorators-legacy@^1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925"
dependencies:
babel-plugin-syntax-decorators "^6.1.18"
babel-runtime "^6.2.0"
babel-template "^6.3.0"
babel-plugin-transform-decorators@^6.24.1: babel-plugin-transform-decorators@^6.24.1:
version "6.24.1" version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
@ -817,14 +825,14 @@ babel-register@^6.24.1:
mkdirp "^0.5.1" mkdirp "^0.5.1"
source-map-support "^0.4.2" source-map-support "^0.4.2"
babel-runtime@^6.18.0, babel-runtime@^6.22.0: babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0:
version "6.23.0" version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
dependencies: dependencies:
core-js "^2.4.0" core-js "^2.4.0"
regenerator-runtime "^0.10.0" regenerator-runtime "^0.10.0"
babel-template@^6.16.0, babel-template@^6.24.1: babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0:
version "6.24.1" version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333"
dependencies: dependencies:
@ -1888,9 +1896,9 @@ html-encoding-sniffer@^1.0.1:
dependencies: dependencies:
whatwg-encoding "^1.0.1" whatwg-encoding "^1.0.1"
http-request-plus@^0.1.1: http-request-plus@^0.1.4:
version "0.1.1" version "0.1.4"
resolved "https://registry.yarnpkg.com/http-request-plus/-/http-request-plus-0.1.1.tgz#f12e5f00d4808d5863145e9dde7b3e3274bb5e0c" resolved "https://registry.yarnpkg.com/http-request-plus/-/http-request-plus-0.1.4.tgz#c99cd36366e96c13f92da5954b3a2fd2ce2c531e"
dependencies: dependencies:
is-redirect "^1.0.0" is-redirect "^1.0.0"
lodash "^4.17.4" lodash "^4.17.4"