MrDraw/docs/api/fileops.rst

509 lines
19 KiB
ReStructuredText
Raw Permalink Normal View History

.. _sec-api-fileops:
***************
File operations
***************
2013-12-21 12:01:18 +00:00
.. contents::
2013-12-16 00:47:06 +00:00
.. _sec-api-fileops-retrieveall:
Retrieve all files
==================
2013-12-16 00:47:06 +00:00
.. http:get:: /api/files
2013-12-16 00:47:06 +00:00
Retrieve information regarding all files currently available and regarding the disk space still available
locally in the system.
Returns a :ref:`Retrieve response <sec-api-fileops-datamodel-retrieveresponse>`.
**Example**:
.. sourcecode:: http
2013-12-16 00:47:06 +00:00
GET /api/files HTTP/1.1
Host: example.com
X-Api-Key: abcdef...
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: application/json
{
"files": [
{
"name": "whistle_v2.gcode",
"size": 1468987,
"date": 1378847754,
2013-12-16 00:47:06 +00:00
"origin": "local",
2013-12-21 12:01:18 +00:00
"refs": {
"resource": "http://example.com/api/files/local/whistle_v2.gcode",
"download": "http://example.com/downloads/files/local/whistle_v2.gcode"
},
"gcodeAnalysis": {
"estimatedPrintTime": 1188,
"filament": {
"length": 810,
"volume": 5.36
}
},
"print": {
"failure": 4,
"success": 23,
"last": {
"date": 1387144346,
"success": true
}
}
},
{
"name": "whistle_.gco",
2013-12-21 12:01:18 +00:00
"origin": "sdcard",
"refs": {
"resource": "http://example.com/api/files/sdcard/whistle_.gco"
}
}
],
"free": "3.2GB"
}
:statuscode 200: No error
.. _sec-api-fileops-retrievelocation:
2013-12-21 12:01:18 +00:00
Retrieve files from specific location
=====================================
2013-12-21 12:01:18 +00:00
.. http:get:: /api/files/(string:location)
2013-12-21 12:01:18 +00:00
Retrieve information regarding the files currently available on the selected `location` and -- if targeting
the ``local`` location -- regarding the disk space still available locally in the system.
Returns a :ref:`Retrieve response <sec-api-fileops-datamodel-retrieveresponse>`.
**Example**:
.. sourcecode:: http
2013-12-16 00:47:06 +00:00
GET /api/files/local HTTP/1.1
Host: example.com
X-Api-Key: abcdef...
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: application/json
{
"files": [
{
"name": "whistle_v2.gcode",
"size": 1468987,
"date": 1378847754,
2013-12-16 00:47:06 +00:00
"origin": "local",
2013-12-21 12:01:18 +00:00
"refs": {
"resource": "http://example.com/api/files/local/whistle_v2.gcode",
"download": "http://example.com/downloads/files/local/whistle_v2.gcode"
},
"gcodeAnalysis": {
"estimatedPrintTime": 1188,
"filament": {
"length": 810,
"volume": 5.36
}
},
"print": {
"failure": 4,
"success": 23,
"last": {
"date": 1387144346,
"success": true
}
}
}
],
"free": "3.2GB"
}
2013-12-21 12:01:18 +00:00
:param location: The origin location from which to retrieve the files. Currently only ``local`` and ``sdcard`` are
supported, with ``local`` referring to files stored in OctoPrint's ``uploads`` folder and ``sdcard``
referring to files stored on the printer's SD card (if available).
:statuscode 200: No error
2013-12-21 12:01:18 +00:00
:statuscode 404: If `location` is neither ``local`` nor ``sdcard``
2013-12-16 00:47:06 +00:00
.. _sec-api-fileops-uploadfile:
Upload file
===========
2013-12-21 12:01:18 +00:00
.. http:post:: /api/files/(string:location)
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
Upload a file to the selected `location`.
2013-12-16 00:47:06 +00:00
Other than most of the other requests on OctoPrint's API which are expected as JSON, this request is expected as
``Content-Type: multipart/form-data`` due to the included file upload.
2013-12-21 12:01:18 +00:00
Returns a :http:statuscode:`201` response with a ``Location`` header set to the management URL of the uploaded
file and an :ref:`Upload Response <sec-api-fileops-datamodel-uploadresponse>` as the body upon successful completion.
2013-12-16 00:47:06 +00:00
**Example**
2013-12-16 00:47:06 +00:00
.. sourcecode:: http
2013-12-21 12:01:18 +00:00
POST /api/files/sdcard HTTP/1.1
2013-12-16 00:47:06 +00:00
Host: example.com
X-Api-Key: abcdef...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDeC2E3iWbTv1PwMC
------WebKitFormBoundaryDeC2E3iWbTv1PwMC
Content-Disposition: form-data; name="file"; filename="whistle_v2.gcode"
Content-Type: application/octet-stream
;Generated with Cura_SteamEngine 13.11.2
M109 T0 S220.000000
T0
;Sliced at: Wed 11-12-2013 16:53:12
;Basic settings: Layer height: 0.2 Walls: 0.8 Fill: 20
;Print time: #P_TIME#
;Filament used: #F_AMNT#m #F_WGHT#g
;Filament cost: #F_COST#
;M190 S70 ;Uncomment to add your own bed temperature line
;M109 S220 ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
...
------WebKitFormBoundaryDeC2E3iWbTv1PwMC
Content-Disposition: form-data; name="select"
true
------WebKitFormBoundaryDeC2E3iWbTv1PwMC
Content-Disposition: form-data; name="print"
true
------WebKitFormBoundaryDeC2E3iWbTv1PwMC--
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: application/json
Location: http://example.com/api/files/sdcard/whistle_.gcode
2013-12-16 00:47:06 +00:00
{
2013-12-21 12:01:18 +00:00
"files": {
"local": {
2013-12-16 00:47:06 +00:00
"name": "whistle_v2.gcode",
2013-12-21 12:01:18 +00:00
"origin": "local",
"refs": {
"resource": "http://example.com/api/files/local/whistle_v2.gcode",
"download": "http://example.com/downloads/files/local/whistle_v2.gcode"
}
2013-12-16 00:47:06 +00:00
},
2013-12-21 12:01:18 +00:00
"sdcard": {
"name": "whistle_.gco",
"origin": "sdcard",
"refs": {
"resource": "http://example.com/api/files/sdcard/whistle_.gco"
}
}
},
"done": true
2013-12-16 00:47:06 +00:00
}
2013-12-21 12:01:18 +00:00
:param location: The target location to which to upload the file. Currently only ``local`` and ``sdcard`` are supported
here, with ``local`` referring to OctoPrint's ``uploads`` folder and ``sdcard`` referring to
the printer's SD card. If an upload targets the SD card, it will also be stored locally first.
:form file: The file to upload, including a valid ``filename``.
:form select: Whether to select the file directly after upload (``true``) or not (``false``). Optional, defaults
to ``false``.
:form print: Whether to start printing the file directly after upload (``true``) or not (``false``). If set, `select`
is implicitely ``true`` as well. Optional, defaults to ``false``.
:form userdata: [Optional] An optional string that if specified will be interpreted as JSON and then saved along
with the file as metadata (metadata key ``userdata``)
2013-12-21 12:01:18 +00:00
:statuscode 201: No error
:statuscode 400: If no `file` is included in the request, `userdata` was provided but could not be parsed as JSON
or the request is otherwise invalid.
2013-12-21 12:01:18 +00:00
:statuscode 404: If `location` is neither ``local`` nor ``sdcard`` or trying to upload to SD card and SD card support
is disabled
:statuscode 409: If the upload of the file would override the file that is currently being printed or if an upload
to SD card was requested and the printer is either not operational or currently busy with a print job.
:statuscode 415: If the file is neither a ``gcode`` nor an ``stl`` file (or it is an ``stl`` file but slicing support
is disabled)
2013-12-16 00:47:06 +00:00
:statuscode 500: If the upload failed internally
2013-12-21 12:01:18 +00:00
.. _sec-api-fileops-retrievefileinfo:
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
Retrieve a specific file's information
======================================
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
.. http:get:: /api/files/(string:location)/(path:filename)
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
Retrieves the selected file's information.
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
If the file is unknown, a :http:statuscode:`404` is returned.
On success, a :http:statuscode:`200` is returned, with a :ref:`file information item <sec-api-datamodel-files-file>`
2013-12-21 12:01:18 +00:00
as the response body.
2013-12-16 00:47:06 +00:00
**Example**
2013-12-16 00:47:06 +00:00
.. sourcecode:: http
GET /api/files/local/whistle_v2.gcode HTTP/1.1
Host: example.com
X-Api-Key: abcdef...
2013-12-16 00:47:06 +00:00
.. sourcecode:: http
HTTP/1.1 200 OK
2013-12-21 12:01:18 +00:00
Content-Type: application/json
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
{
"name": "whistle_v2.gcode",
"size": 1468987,
"date": 1378847754,
2013-12-21 12:01:18 +00:00
"origin": "local",
"refs": {
"resource": "http://example.com/api/files/local/whistle_v2.gcode",
"download": "http://example.com/downloads/files/local/whistle_v2.gcode"
},
"gcodeAnalysis": {
"estimatedPrintTime": 1188,
"filament": {
"length": 810,
"volume": 5.36
}
2013-12-21 12:01:18 +00:00
},
"print": {
"failure": 4,
"success": 23,
"last": {
"date": 1387144346,
2013-12-21 12:01:18 +00:00
"success": true
}
}
}
2013-12-16 00:47:06 +00:00
2013-12-21 12:01:18 +00:00
:param location: The location of the file for which to retrieve the information, either ``local`` or ``sdcard``.
:param filename: The filename of the file for which to retrieve the information
:statuscode 200: No error
:statuscode 404: If `target` is neither ``local`` nor ``sdcard``, ``sdcard`` but SD card support is disabled or the
requested file was not found
2013-12-16 00:47:06 +00:00
.. _sec-api-fileops-filecommand:
Issue a file command
====================
.. http:post:: /api/files/(string:target)/(path:filename)
Issue a file command to an existing file. Currently supported commands are:
2013-12-21 12:01:18 +00:00
select
2013-12-16 00:47:06 +00:00
Selects a file for printing. Additional parameters are:
2013-12-21 12:01:18 +00:00
* ``print``: Optional, if set to ``true`` the file will start printing directly after selection. If the printer
is not operational when this parameter is present and set to ``true``, the request will fail with a response
of ``409 Conflict``.
2013-12-16 00:47:06 +00:00
slice
Slices an STL file into GCODE. Note that this is an asynchronous operation that will take place in the background
after the response has been sent back to the client. Additional parameters are:
* ``slicer``: The slicing engine to use, defaults to ``cura`` if not set, which is also the only supported slicer right now.
* ``gcode``: Name of the GCODE file to generated, in the same location as the STL file. Defaults to the STL file name
with extension ``.gco`` if not set.
* ``position``: Position of the object-to-slice's center on the print bed. A dictionary containing both ``x`` and ``y``
coordinate in mm is expected
* ``printerProfile``: Name of the printer profile to use, if not set the default printer profile will be used.
* ``profile``: Name of the slicing profile to use, if not set the default slicing profile of the slicer will be used.
* ``profile.*``: Override parameters, the ``profile.`` prefix will be stripped and the matching profile key will
be overridden with the supplied value. Use this if you want to specify things that change often like a different
temperature, filament diameter or infill percentage. Profile keys are slicer specific.
* ``select``: Optional, if set to ``true`` the file be selected for printing right after the slicing has finished. If the
printer is not operational or already printing when this parameter is present and set to ``true``, the request will
fail with a response of ``409 Conflict``
* ``print``: Optional, if set to ``true`` the file be selected and start printing right after the slicing has finished.
If the printer is not operational or already printing when this parameter is present and set to ``true``, the request
will fail with a response of ``409 Conflict``. Note that if this parameter is set, the parameter ``select`` does not
need to be set, it is automatically assumed to be ``true`` too, otherwise no printing would be possible.
If consecutive slicing calls are made targeting the same GCODE filename (that also holds true if the default is used),
the slicing job already running in the background will be cancelled before the new one is started. Note that this will
also mean that if it was supposed to be directly selected and start printing after the slicing finished, this will not
take place anymore and whether this will happen with the new sliced file depends entirely on the new request!
Upon success, a status code of :http:statuscode:`204` and an empty body is returned, unless specified otherwise.
2013-12-21 12:01:18 +00:00
**Example Select Request**
2013-12-16 00:47:06 +00:00
.. sourcecode:: http
POST /api/files/local/whistle_v2.gcode HTTP/1.1
Host: example.com
Content-Type: application/json
X-Api-Key: abcdef...
{
2013-12-21 12:01:18 +00:00
"command": "select",
2013-12-16 00:47:06 +00:00
"print": true
}
.. sourcecode:: http
HTTP/1.1 204 No Content
**Example Slice Request**
.. sourcecode:: http
POST /api/files/local/some_model.stl HTTP/1.1
Host: example.com
Content-Type: application/json
X-Api-Key: abcdef...
{
"command": "slice",
"slicer": "cura",
"gcode": "some_model.first_try.gcode",
"printerProfile": "my_custom_reprap",
"profile": "high_quality",
"profile.infill": 75,
"profile.fill_density": 15,
"position": {"x": 100, "y": 100},
"print": true
}
.. sourcecode:: http
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"origin": "local",
"name": "some_model.first_try.gcode",
"refs": {
"download": "http://example.com/downloads/files/local/some_model.first_try.gcode",
"resource": "http://example.com/api/files/local/some_model.first_try.gcode"
}
}
:param target: The target location on which to delete the file, either ``local`` (for OctoPrint's ``uploads``
folder) or ``sdcard`` for the printer's SD card (if available)
:param filename: The filename of the file for which to issue the command
:json string command: The command to issue for the file, currently only ``select`` is supported
:json boolean print: ``select`` and ``slice`` command: Optional, whether to start printing the file directly after selection
or slicing, defaults to ``false``.
:json string slicer: ``slice`` command: The slicer to use, defaults to the default slicer.
:json string gcode: ``slice`` command: The name of the gcode file to create, defaults to the targeted stl's file name
with its extension changed to ``.gco`` (e.g. "test.stl" will be sliced to "test.gco" if not specified
otherwise)
:json string profile: ``slice`` command: The slicing profile to use, defaults to the selected slicer's default profile.
:json string profile.*: ``slice`` command: Overrides for the selected slicing profile, e.g. to specify a different temperature
or filament diameter.
:json string printerProfile: ``slice`` command: The printer profile to use, defaults to the default printer profile.
:json boolean select: ``slice`` command: Optional, whether to select the file for printing directly after slicing,
defaults to ``false``
:statuscode 200: No error for a ``select`` command.
:statuscode 202: No error for a ``slice`` command.
:statuscode 400: If the ``command`` is unknown or the request is otherwise invalid
:statuscode 415: If a ``slice`` command was issued against something other than an STL file.
:statuscode 404: If `target` is neither ``local`` nor ``sdcard`` or the requested file was not found
:statuscode 409: If a selected file is supposed to start printing directly but the printer is not operational or
if a file to be sliced is supposed to be selected or start printing directly but the printer
is not operational or already printing.
2013-12-16 00:47:06 +00:00
.. _sec-api-fileops-delete:
Delete file
===========
.. http:delete:: /api/files/(string:target)/(path:filename)
2013-12-16 00:47:06 +00:00
Delete the selected `filename` on the selected `target`.
2013-12-21 12:01:18 +00:00
If the file to be deleted is currently being printed, a :http:statuscode:`409` will be returned.
Returns a :http:statuscode:`204` after successful deletion.
2013-12-16 00:47:06 +00:00
**Example Request**
.. sourcecode:: http
DELETE /api/files/local/whistle_v2.gcode HTTP/1.1
Host: example.com
X-Api-Key: abcdef...
:param target: The target location on which to delete the file, either ``local`` (for OctoPrint's ``uploads``
folder) or ``sdcard`` for the printer's SD card (if available)
:param filename: The filename of the file to delete
2013-12-21 12:01:18 +00:00
:statuscode 204: No error
:statuscode 404: If `target` is neither ``local`` nor ``sdcard`` or the requested file was not found
:statuscode 409: If the file to be deleted is currently being printed
.. _sec-api-fileops-datamodel:
Datamodel
=========
.. _sec-api-fileops-datamodel-retrieveresponse:
Retrieve response
-----------------
.. list-table::
:widths: 15 5 10 30
:header-rows: 1
* - Name
- Multiplicity
- Type
- Description
* - ``files``
- 0..*
- Array of :ref:`File information items <sec-api-datamodel-files-file>`
- The list of requested files. Might be an empty list if no files are available
* - ``free``
2013-12-21 12:01:18 +00:00
- 0..1
- String
- The amount of disk space in bytes available in the local disk space (refers to OctoPrint's ``uploads`` folder). Only
2013-12-21 12:01:18 +00:00
returned if file list was requested for origin ``local`` or all origins.
2013-12-16 00:47:06 +00:00
.. _sec-api-fileops-datamodel-uploadresponse:
Upload response
---------------
.. list-table::
:widths: 15 5 10 30
:header-rows: 1
* - Name
- Multiplicity
- Type
- Description
* - ``files``
2013-12-21 12:01:18 +00:00
- 1
- Object
- Abridged information regarding the file that was just uploaded. If only uploaded to ``local`` this will only
contain the ``local`` property. If uploaded to SD card, this will contain both ``local`` and ``sdcard`` properties.
* - ``files.local``
- 1
- :ref:`sec-api-datamodel-files-file`
2013-12-21 12:01:18 +00:00
- The information regarding the file that was just uploaded to the local storage (only the fields ``name``,
``origin`` and ``refs`` will be set).
* - ``files.sdcard``
- 0..1
- :ref:`sec-api-datamodel-files-file`
2013-12-21 12:01:18 +00:00
- The information regarding the file that was just uploaded to the printer's SD card (only the fields ``name``,
``origin`` and ``refs`` will be set).
2013-12-16 00:47:06 +00:00
* - ``done``
- 1
- Boolean
2013-12-21 12:01:18 +00:00
- Whether the file processing after upload has already finished (``true``) or not, e.g. due to first needing
to perform a slicing step (``false``). Clients may use this information to direct progress displays related to
the upload.
2013-12-16 00:47:06 +00:00