diff --git a/projects/octorest/.gitignore b/projects/octorest/.gitignore new file mode 100644 index 0000000..d878cbc --- /dev/null +++ b/projects/octorest/.gitignore @@ -0,0 +1,21 @@ +*.py[cod] +*.sw[po] +*.gcode +*.gco + +# Packages +*.egg +*.egg-info +.eggs +dist +build +sdist + +# Testmon +.testmondata + +# VS Code +.vscode + +# Environments +env/ \ No newline at end of file diff --git a/projects/octorest/BUILD.bazel b/projects/octorest/BUILD.bazel new file mode 100644 index 0000000..a756915 --- /dev/null +++ b/projects/octorest/BUILD.bazel @@ -0,0 +1,11 @@ +package(default_visibility=["//visibility:public"]) + +py_library( + name = "octorest", + imports = ["src"], + srcs = glob(["src/**/*"]), + deps = [ + py_requirement('requests'), + py_requirement('websocket-client'), + ] +) diff --git a/projects/octorest/LICENSE b/projects/octorest/LICENSE new file mode 100644 index 0000000..bd13b59 --- /dev/null +++ b/projects/octorest/LICENSE @@ -0,0 +1,25 @@ +The MIT License (MIT) + +Copyright (c) 2016-2017 Miro Hrončok +Copyright (c) 2017 Jiří Makarius +Copyright (c) 2018 Douglas Brion + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +Provided license texts might have their own copyrights and restrictions + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/projects/octorest/MANIFEST.in b/projects/octorest/MANIFEST.in new file mode 100644 index 0000000..9e7ef82 --- /dev/null +++ b/projects/octorest/MANIFEST.in @@ -0,0 +1,5 @@ +include README.md +include LICENSE +recursive-include tests *.py +recursive-include tests *.json +recursive-include tests *.gcode diff --git a/projects/octorest/README.rst b/projects/octorest/README.rst new file mode 100644 index 0000000..65a90cd --- /dev/null +++ b/projects/octorest/README.rst @@ -0,0 +1,244 @@ +=========================== +OctoRest +=========================== + +.. image:: https://pepy.tech/badge/octorest + :target: https://pepy.tech/project/octorest + :alt: Downloads + +.. image:: https://img.shields.io/pypi/l/ansicolortags.svg + :target: https://pypi.python.org/pypi/ansicolortags/ + :alt: PyPI license + +.. image:: https://badge.fury.io/py/erichek.svg + :target: https://badge.fury.io/py/erichek + :alt: PyPI version + +.. image:: https://img.shields.io/pypi/pyversions/erichek.svg + :target: https://img.shields.io/pypi/pyversions/erichek.svg + :alt: Python version + + +Python client library for OctoPrint REST API + +This is continued work after the great start by Miro Hrončok of covering the +OctoPrint REST API. Nearly all current functionality in the API has been covered (up to OctoPrint 1.3.11), +but as of yet I have not had time to add extensive testing for all aspects of the API. + +Installation +------------ + +The easiest way to install the package is via ``pip``:: + + $ pip install octorest + + +Examples +-------- + +You may want a function which returns an instance of the OctoRest object connected to your printer. + +.. code-block:: python + + def make_client(url, apikey): + """Creates and returns an instance of the OctoRest client. + + Args: + url - the url to the OctoPrint server + apikey - the apikey from the OctoPrint server found in settings + """ + try: + client = OctoRest(url=url, apikey=apikey) + return client + except ConnectionError as ex: + # Handle exception as you wish + print(ex) + +Once we have a client we can do many a cool thing with it! +For example the following retrieves all the G-code file names on your OctoPrint server and adds them to a string which is printed out. + +.. code-block:: python + + def file_names(client): + """Retrieves the G-code file names from the + OctoPrint server and returns a string message listing the + file names. + + Args: + client - the OctoRest client + """ + message = "The GCODE files currently on the printer are:\n\n" + for k in client.files()['files']: + message += k['name'] + "\n" + print(message) + +Maybe you want to stop your print and then subsequently home the printer. This is very simple to do using OctoRest! + +.. code-block:: python + + def toggle_home(client): + """Toggles the current print (if printing it pauses and + if paused it starts printing) and then homes all of + the printers axes. + + Args: + client - the OctoRest client + """ + print("toggling the print!") + client.toggle() + print("Homing your 3d printer...") + client.home() + +Implemented features of OctoPrint REST API +------------------------------------------ + +A check list of the features currently implemented can be seen below. + +* General information + - [ ] Authorization + - [ ] Login + - [ ] Logout +* Version information + - [X] Version information +* Apps + - [ ] Session Keys (Deprecated since version 1.3.11: This functionality will be removed in 1.4.0. Use the Application Keys Plugin workflow instead.) + + - [ ] Obtaining a temporary session key + - [ ] Verifying a temporary session key + - [ ] Application Keys Plugin workflow + + - [X] Probe workflow support + - [X] Start authorization process + - [X] Poll for decision on existing request + - [ ] Decide on existing request + - [ ] Fetch list of existing application keys + - [ ] Issue an application key command +* Connection handling + - [X] Get connection settings + - [X] Issue a connection command + + - [X] Connect + - [X] Disconnect + - [X] Fake_ack +* File operations + - [X] Retrieve all files + - [X] Retrieve files from specific location + - [X] Upload file or create folder + - [X] Retrieve a specific file’s or folder’s information + - [X] Issue a file command + + - [X] Select + - [X] Slice + - [X] Copy + - [X] Move + - [X] Delete file +* Job operations + - [X] Issue a job command + + - [X] Start + - [X] Cancel + - [X] Restart + - [X] Pause + + - [X] Pause + - [X] Resume + - [X] Toggle + - [X] Retrieve information about the current job +* Languages + - [X] Retrieve installed language packs + - [X] Upload a language pack + - [X] Delete a language pack +* Log file management + - [X] Retrieve a list of available log files + - [X] Delete a specific logfile +* Printer operations + - [X] Retrieve the current printer state + - [X] Issue a print head command + + - [X] Jog + - [X] Home + - [X] Feedrate + - [X] Issue a tool command + + - [X] Target + - [X] Offset + - [X] Select + - [X] Extrude + - [X] Flowrate + - [X] Retrieve the current tool state + - [X] Issue a bed command + + - [X] Target + - [X] Offset + - [X] Retrieve the current bed state + - [X] Issue a chamber command + + - [X] Target + - [X] Offset + - [X] Retrieve the current chamber state + - [X] Issue an SD command + + - [X] Init + - [X] Refresh + - [X] Release + - [X] Retrieve the current SD state + - [X] Retrieve custom controls from config.yaml + - [X] Send an arbitrary command to the printer +* Printer profile operations + - [X] Retrieve all printer profiles + - [X] Retrieve specific printer profile + - [ ] Add a new printer profile + - [ ] Update an existing printer profile + - [X] Remove an existing printer profile +* Settings + - [X] Retrieve current settings + - [X] Save settings + - [ ] Regenerate the system wide API key + - [ ] Fetch template data (in beta) +* Slicing + - [X] List All Slicers and Slicing Profiles + - [X] List Slicing Profiles of a Specific Slicer + - [X] Retrieve Specific Profile + - [ ] Add Slicing Profile + - [X] Delete Slicing Profile +* System + - [X] List all registered system commands + - [X] List all registered system commands for a source + - [X] Execute a registered system command +* Timelapse + - [X] Retrieve a list of timelapses and the current config + - [X] Delete a timelapse + - [X] Issue a command for an unrendered timelapse + + - [X] Render + - [X] Delete an unrendered timelapse + - [X] Change current timelapse config +* User + - [X] Retrieve a list of users + - [X] Retrieve a user + - [X] Add a user + - [X] Update a user + - [X] Delete a user + - [X] Reset a user’s password + - [X] Retrieve a user’s settings + - [ ] Update a user’s settings + - [X] Regenerate a user’s personal API key + - [X] Delete a user’s personal API key +* Util + - [X] Test paths or URLs + + - [X] Path + - [X] URL + - [X] Server +* Wizard + - [X] Retrieve additional data about registered wizards + - [X] Finish wizards + +Copyright & License +------------------- + +Copyright (c) 2016-2017 `Miro Hrončok `_. MIT License. + +Copyright (c) 2017 `Jiří Makarius `_. MIT License. + +Copyright (c) 2018-2019, `Douglas Brion `_. MIT License. diff --git a/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py b/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py new file mode 100644 index 0000000..693c452 --- /dev/null +++ b/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py @@ -0,0 +1,34 @@ +from octorest import OctoRest, WorkflowAppKeyRequestResult + +def main(): + url = "http://octopi.local" + user = "user" + + client = None + + try: + client = OctoRest(url=url) + except TypeError: + raise NotImplementedError() # Decide what should happen now + + (result, api_key) = (None, None) + + try: + (result, api_key) = client.try_get_api_key('my-app', user) + except ConnectionError: + raise NotImplementedError() # Decide what should happen now. Suggestion - tell the user the OctoPrint server is unreachable and that he should check the URL entered + + if result == WorkflowAppKeyRequestResult.WORKFLOW_UNSUPPORTED: + raise NotImplementedError() # Decide what should happen now. Suggestion - fall back to asking the user to manually enter a valid API key. + elif result == WorkflowAppKeyRequestResult.TIMED_OUT: # The user took too long to approve the API key request + raise NotImplementedError() # Decide what should happen now + elif result == WorkflowAppKeyRequestResult.NOPE: # The request has been denied + raise NotImplementedError() # Decide what should happen now + elif result == WorkflowAppKeyRequestResult.GRANTED: + client.load_api_key(api_key) # You have to load the API key before sending any requests to the OctoPrint server + pass # At this point you can use the client for whatever you wish + + raise NotImplementedError() # Decide what should happen now + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/projects/octorest/examples/basic/basic.py b/projects/octorest/examples/basic/basic.py new file mode 100644 index 0000000..b2d057c --- /dev/null +++ b/projects/octorest/examples/basic/basic.py @@ -0,0 +1,37 @@ +from octorest import OctoRest + + +def make_client(): + try: + client = OctoRest(url="http://octopi.local", apikey="YouShallNotPass") + return client + except Exception as e: + print(e) + +def get_version(): + client = make_client() + message = "You are using OctoPrint v" + client.version['server'] + "\n" + return message + +def get_printer_info(): + try: + client = OctoRest(url="http://octopi.local", apikey="YouShallNotPass") + message = "" + message += str(client.version) + "\n" + message += str(client.job_info()) + "\n" + printing = client.printer()['state']['flags']['printing'] + if printing: + message += "Currently printing!\n" + else: + message += "Not currently printing...\n" + return message + except Exception as e: + print(e) + +def main(): + c = make_client() + for k in c.files()['files']: + print(k['name']) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/projects/octorest/examples/facebook_chatbot/chatbot.py b/projects/octorest/examples/facebook_chatbot/chatbot.py new file mode 100644 index 0000000..c32e7f0 --- /dev/null +++ b/projects/octorest/examples/facebook_chatbot/chatbot.py @@ -0,0 +1,218 @@ +import random +import os +from flask import Flask, request +from pymessenger2.bot import Bot +from octorest import OctoRest + +class ChatBot(Flask): + + def __init__(self, fb_access_tok='YourFBAccessToken', + fb_verify_tok="YourTokenVerification", + octo_url="http://octopi.local", + octo_apikey="YouShallNotPass"): + """ + Initialisation of the ChatBot for OctoWatch + Parameters: + fb_access_tok - the Facebook messenger access token given + fb_verify_tok - the Facebook messenger verification code set + octo_url - the url of the desired OctoPrint server + octo_apikey - the apikey found in the OctoPrint settings + """ + Flask.__init__(self, __name__) + + self.access_token = fb_access_tok + self.verify_token = fb_verify_tok + self.url = octo_url + self.apikey = octo_apikey + + self.bot = Bot(self.access_token) + + self.recipient = None + + self.client = self.make_client(url=self.url, apikey=self.apikey) + + def make_client(self, url=None, apikey=None): + """ + Creates and returns an instance of the OctoRest client. + Parameters: + url - the url to the octoprint server + apikey - the apikey from the octoprint server found in settings + """ + if url is None: + url = self.url + if apikey is None: + url = self.apikey + try: + client = OctoRest(url=url, apikey=apikey) + return client + except ConnectionError as ex: + print(ex) + + def verify_fb_token(self, token_sent): + """ + Take token sent by Facebook and verify it matches the verify token + If they match, allow the request, else return an error + Parameters: + token_sent - the token received from Facebook + """ + if token_sent == self.verify_token: + return request.args.get("hub.challenge") + return "Invalid verification token" + + def get_message(self): + """ + Returns a random message from a list of strings + """ + sample_responses = ["Your print is okay", "I have spotted an error", "1 hour to go"] + return random.choice(sample_responses) + + def send_message(self, recipient_id, response): + """ + Uses PyMessenger to send response to user + Sends user the text message provided via input response parameter + Parameters + recipient_id - the id of the person receiving + response - the text message to respond with + """ + self.bot.send_text_message(recipient_id, response) + return "success" + + def send_image(self, recipient_id, response): + """ + Uses PyMessenger to send response to user + Sends user an image provided via the image path in the input response parameter + Parameters + recipient_id - the id of the person receiving + response - the image to respond with given as a path + """ + self.bot.send_image(recipient_id, response) + return "success" + + def get_printer_info(self): + """ + Retrieves information about the printer + and returns a chatbot message with its current state + """ + message = str(self.client.version) + "\n" + message += str(self.client.job_info()) + "\n" + printing = self.client.printer()['state']['flags']['printing'] + if printing: + message += "Currently printing!\n" + else: + message += "Not currently printing...\n" + return message + + def get_version(self): + """ + Retrieves the OctoPrint version and returns chatbot message + """ + message = "You are using OctoPrint v" + str(self.client.version['server']) + "\n" + return message + + def get_gcode_file_names(self): + """ + Retrieves the GCODE file names from the + OctoPrint server and returns chatbot message + """ + message = "The GCODE files currently on the printer are:\n\n" + for k in self.client.files()['files']: + message += k['name'] + "\n" + return message + + def home(self): + """ + Homes the 3D printer and returns + message to inform the user + """ + message = "Homing your printer... :)" + self.client.home() + return message + + def toggle(self): + """ + Toggles the current print from paused/printing + states and returns message to inform the user + """ + message = "Toggling your print!" + self.client.pause() + return message + + def receive_message(self): + """ + Method for sending/receiving messages to/from users + on Facebook. Checks if tokens are valid. Depending on + the text received will select the appropriate reply. + Receives JSON from OctoWatch containing information + about the print if there has been an error. + """ + if request.method == 'GET': + """ + Before allowing people to message your bot, Facebook has + implemented a verify token that confirms all requests + that your bot receives came from Facebook. + """ + token_sent = request.args.get("hub.verify_token") + return self.verify_fb_token(token_sent) + # if the request was not get, it must be POST and we can just + # proceed with sending a message back to user + else: + # get whatever message a user sent the bot + output = request.get_json() + # if it was from messenger + if 'object' in output and 'entry' in output: + for event in output['entry']: + messaging = event['messaging'] + for message in messaging: + if message.get('message'): + # Facebook Messenger ID for user so we know where + # to send response back to + recipient_id = message['sender']['id'] + self.recipient = recipient_id + text = message['message'].get('text') + if text == 'status': + self.send_message(recipient_id, self.get_printer_info()) + elif text == 'version': + self.send_message(recipient_id, self.get_version()) + elif text == 'files': + self.send_message(recipient_id, self.get_gcode_file_names()) + elif text == 'home': + self.send_message(recipient_id, self.home()) + elif text == 'toggle': + self.send_message(recipient_id, self.toggle()) + elif text == 'pause': + self.send_message(recipient_id, self.toggle()) + elif text == 'resume': + self.send_message(recipient_id, self.toggle()) + elif text == 'cancel': + self.send_message(recipient_id, self.toggle()) + elif message['message'].get('text'): + response_sent_text = self.get_message() + self.send_message(recipient_id, response_sent_text) + # if user sends us a GIF, photo,video, + # or any other non-text item + if message['message'].get('attachments'): + response_sent_nontext = self.get_message() + self.send_message(recipient_id, response_sent_nontext) + return "Message Processed" + # if not recognised + else: + print("Don't recognise...") + return "failed" + +def main(): + """ + The main function of the program. + Creates a ChatBot instance and runs. + Defines a function for receiving messages + using HTTP GET and POST. + """ + app = ChatBot() + + @app.route("/", methods=['GET', 'POST']) + def receive_message(): + return app.receive_message() + + app.run() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/projects/octorest/requirements.txt b/projects/octorest/requirements.txt new file mode 100644 index 0000000..e89e92d --- /dev/null +++ b/projects/octorest/requirements.txt @@ -0,0 +1,62 @@ +appdirs==1.4.3 +argh==0.26.2 +attrs==19.3.0 +awesome-slugify==1.6.5 +Babel==2.9.1 +betamax==0.8.1 +betamax-serializers==0.2.1 +blinker==1.4 +cachelib==0.1 +certifi==2022.12.7 +chardet==3.0.4 +Click==7.0 +emoji==0.5.4 +feedparser==5.2.1 +filetype==1.0.5 +Flask==0.12.4 +Flask-Assets==0.12 +Flask-Babel==0.12.2 +Flask-Login==0.4.1 +frozendict==1.2 +future==0.18.2 +idna==2.8 +importlib-metadata==1.3.0 +itsdangerous==1.1.0 +Jinja2==2.11.3 +Markdown==3.1.1 +MarkupSafe==1.1.1 +more-itertools==8.0.2 +netaddr==0.7.19 +netifaces==0.10.9 +OctoPrint==1.8.3 +-e git+git@github.com:dougbrion/octorest.git@510b84dbc4ede1c8bbc92239e04a5c7299f1f96c#egg=octorest +packaging==19.2 +pathtools==0.1.2 +pkginfo==1.5.0.1 +pluggy==0.13.1 +psutil==5.6.7 +py==1.10.0 +pyasn1==0.4.8 +pylru==1.2.0 +pyparsing==2.4.5 +pyserial==3.4 +pytest==5.3.2 +pytz==2019.3 +PyYAML==5.4 +regex==2019.12.9 +requests==2.22.0 +rsa==4.7 +sarge==0.1.5.post0 +semantic-version==2.8.3 +sentry-sdk==0.13.2 +six==1.13.0 +tornado==4.5.3 +Unidecode==0.4.21 +urllib3==1.26.5 +watchdog==0.9.0 +wcwidth==0.1.7 +webassets==0.12.1 +websocket-client==0.56.0 +Werkzeug==2.2.3 +wrapt==1.11.2 +zipp==0.6.0 diff --git a/projects/octorest/setup.cfg b/projects/octorest/setup.cfg new file mode 100644 index 0000000..b7e4789 --- /dev/null +++ b/projects/octorest/setup.cfg @@ -0,0 +1,2 @@ +[aliases] +test=pytest diff --git a/projects/octorest/src/octorest/__init__.py b/projects/octorest/src/octorest/__init__.py new file mode 100644 index 0000000..b8f244e --- /dev/null +++ b/projects/octorest/src/octorest/__init__.py @@ -0,0 +1,8 @@ +from .client import OctoRest, AuthorizationRequestPollingResult, WorkflowAppKeyRequestResult +from .xhrstreaminggenerator import XHRStreamingGenerator +from .xhrstreaming import XHRStreamingEventHandler +from .websocket import WebSocketEventHandler + + +__all__ = ['OctoRest', 'AuthorizationRequestPollingResult', 'WorkflowAppKeyRequestResult', + 'XHRStreamingGenerator','XHRStreamingEventHandler', 'WebSocketEventHandler'] diff --git a/projects/octorest/src/octorest/client.py b/projects/octorest/src/octorest/client.py new file mode 100644 index 0000000..d0cda46 --- /dev/null +++ b/projects/octorest/src/octorest/client.py @@ -0,0 +1,1741 @@ +import os +from contextlib import contextmanager +from urllib import parse as urlparse +from typing import Optional, Tuple +from enum import Enum +from time import sleep +from typing import List, Union, Optional +import re + +from requests import Session +from requests.exceptions import ( + ConnectionError, + HTTPError, + Timeout, +) + + +class AuthorizationRequestPollingResult(Enum): + STILL_WAITING = 1 + GRANTED = 2 + NOPE = 3 # Request denied or request timed out by the server + + +class WorkflowAppKeyRequestResult(Enum): + WORKFLOW_UNSUPPORTED = 1 + NOPE = 2 # Request denied or request timed out by the server + GRANTED = 3 + TIMED_OUT = 4 + + +class OctoRest: + """ + Encapsulates communication with one OctoPrint instance + """ + + def __init__( + self, + url: str, + *, + apikey: Optional[str] = None, + session: Session = None, + ): + """ + Initialize the object with URL and API key + + If a session is provided, it will be used (mostly for testing) + """ + if not url: + raise TypeError("Required argument 'url' not found or empty") + + parsed = urlparse.urlparse(url) + if parsed.scheme not in ["http", "https"]: + raise TypeError("Provided URL is not HTTP(S)") + if not parsed.netloc: + raise TypeError("Provided URL is empty") + + self.url = "{}://{}".format(parsed.scheme, parsed.netloc) + + self.session = session or Session() + + if apikey: + self.load_api_key(apikey) + + def load_api_key(self, apikey: str) -> None: + """Use the given API key for all future communication with the OctoPrint server. + + Raises TypeError if 'apikey' is None or empty. + Raises RuntimeError if the API key is rejected by the server. + + """ + if not apikey: + raise TypeError("Required argument 'apikey' not found or empty") + + self.session.headers.update({"X-Api-Key": apikey}) + + # Try a simple request to see if the API key works + # Keep the info, in case we need it later + self.version = self.get_version() + + def _get(self, path, params=None): + """ + Perform HTTP GET on given path with the auth header + + Path shall be the ending part of the URL, + i.e. it should not be full URL + + Raises a RuntimeError when not 20x OK-ish + + Returns JSON decoded data + """ + url = urlparse.urljoin(self.url, path) + response = self.session.get(url, params=params, timeout=(1.0, 1.0)) + self._check_response(response) + + return response.json() + + def _post(self, path, data=None, files=None, json=None, ret=True): + """ + Perform HTTP POST on given path with the auth header + + Path shall be the ending part of the URL, + i.e. it should not be full URL + + Raises a RuntimeError when not 20x OK-ish + + Returns JSON decoded data + """ + url = urlparse.urljoin(self.url, path) + response = self.session.post(url, data=data, files=files, json=json) + self._check_response(response) + + if ret: + return response.json() + + def _delete(self, path): + """ + Perform HTTP DELETE on given path with the auth header + + Path shall be the ending part of the URL, + i.e. it should not be full URL + + Raises a RuntimeError when not 20x OK-ish + + Returns nothing + """ + url = urlparse.urljoin(self.url, path) + response = self.session.delete(url) + self._check_response(response) + + def _put(self, path, data=None, files=None, json=None, ret=True): + """ + Perform HTTP PUT on given path with the auth header + + Path shall be the ending part of the URL, + i.e. it should not be full URL + + Raises a RuntimeError when not 20x OK-ish + + Returns JSON decoded data + """ + url = urlparse.urljoin(self.url, path) + response = self.session.put(url, data=data, files=files, json=json) + self._check_response(response) + + if ret: + return response.json() + + def _patch(self, path, data=None, files=None, json=None, ret=True): + """ + Perform HTTP PATCH on given path with the auth header + + Path shall be the ending part of the URL, + i.e. it should not be full URL + + Raises a RuntimeError when not 20x OK-ish + + Returns JSON decoded data + """ + url = urlparse.urljoin(self.url, path) + response = self.session.patch(url, data=data, files=files, json=json) + self._check_response(response) + + if ret: + return response.json() + + def _check_response(self, response): + """ + Make sure the response status code was 20x, raise otherwise + """ + + response.raise_for_status() + return response + + ########################### + ### VERSION INFORMATION ### + ########################### + + def _version_tuple(self, v): + return tuple(map(int, (v.split(".")))) + + def get_version(self): + """Version information + http://docs.octoprint.org/en/master/api/version.html#version-information + + Retrieve information regarding server and API version + """ + return self._get("/api/version") + + ############## + ### LOGIN ### + ############## + + def current_user(self): + """Current User + https://docs.octoprint.org/en/master/api/general.html#current-user + + Retrieves information about the current user. + """ + return self._get("/api/currentuser") + + ########################### + ### APPS - SESSION KEYS ### + ########################### + + def tmp_session_key(self): + """Obtaining a temporary session key + http://docs.octoprint.org/en/master/api/apps.html#obtaining-a-temporary-session-key + + Retrieve a temporary session key with a minimum validity. + It can only be used as a proper API key after having been verified. + Returns the temporary session key and the timestamp until it’s valid. + + Deprecated since version 1.3.11: This functionality will be removed in 1.4.0. + Use the Application Keys Plugin workflow instead. + """ + return self._get("/apps/auth") + + def verify_tmp_session_key(self): + """Verifying a temporary session key + http://docs.octoprint.org/en/master/api/apps.html#verifying-a-temporary-session-key + + Verify a formerly retrieved temporary session key by providing + credentials and a cryptographic signature over these credentials + and the temporary key. + Returns the now verified session key and the new validity. + + Deprecated since version 1.3.11: This functionality will be removed in 1.4.0. + Use the Application Keys Plugin workflow instead. + """ + return self._post("/apps/auth") + + ############################################### + ### APPS - APPLICATION KEYS PLUGIN WORKFLOW ### + ############################################### + + def probe_app_keys_workflow_support(self) -> bool: + """Check if the Application Keys Plugin workflow is supported + https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#probe-for-workflow-support + + Raises ConnectionError if the OctoPrint server could not be found. + + Returns True if the workflow is supported, otherwise returns False. + """ + url = urlparse.urljoin(self.url, "/plugin/appkeys/probe") + response = self.session.get(url) + + if response.status_code == 204: + return True + + return False + + def start_authorization_process(self, app: str, user: Optional[str] = None) -> str: + """Starts the authorization process + https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#start-authorization-process + + app: This parameter should be a human readable identifier to use for the application requesting access. + It will be displayed to the user. + Internally it will be used case insensitively, so `My App` and `my APP` are considered the same application identifiers. + + user: The optional `user` parameter should be used to limit the authorization process to a specified user. + If the parameter is left unset, any user will be able to complete the authorization process and + grant access to the app with their account. E.g. if a user `me` starts the process in an app, + the app should request that name from the user and use it in the `user` parameter. + OctoPrint will then only display the authorization request on browsers the user `me` is logged in on. + + Raises a RuntimeError when the server response does not indicate that the authorization process started. + + Returns the polling URL. + """ + data = {"app": app} + + if user: + data["user"] = user + + url = urlparse.urljoin(self.url, "/plugin/appkeys/request") + response = self.session.post(url, json=data) + self._check_response(response) + + location = response.headers["Location"] + + return location + + def poll_auth_request_decision( + self, url: str + ) -> Tuple[AuthorizationRequestPollingResult, Optional[str]]: + """Check for an authorization request decision + https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#poll-for-decision-on-existing-request + + url: The polling url received from OctoRest.startAuthorizationProcess() + + Returns a tuple who's first item an enum representing the result type, + and if the result type is GRANTED, the tuple's second item is the API key. + """ + + response = self.session.get(url) + + if response.status_code == 202: + return (AuthorizationRequestPollingResult.STILL_WAITING, None) + elif response.status_code == 404: + return (AuthorizationRequestPollingResult.NOPE, None) + elif response.status_code == 200: + key_response = response.json() + api_key = key_response[ + "api_key" + ] # At the time of writing this, the official documentation in the link above says this key is named 'apikey', but wireshark says differently + return (AuthorizationRequestPollingResult.GRANTED, api_key) + else: + raise Exception("Received response with unexpected status code") + + def try_get_api_key( + self, appName: str, user: Optional[str], timeout: int = 60 + ) -> Tuple[WorkflowAppKeyRequestResult, Optional[str]]: + """Run the Application Keys Plugin Workflow + + app: This parameter should be a human readable identifier to use for the application requesting access. + It will be displayed to the user. + Internally it will be used case insensitively, so `My App` and `my APP` are considered the same application identifiers. + + user: The optional `user` parameter should be used to limit the authorization process to a specified user. + If the parameter is left unset, any user will be able to complete the authorization process and + grant access to the app with their account. E.g. if a user `me` starts the process in an app, + the app should request that name from the user and use it in the `user` parameter. + OctoPrint will then only display the authorization request on browsers the user `me` is logged in on. + + timeout: the amount of time (in seconds) to wait for the user to approve the key request. + + Raises ConnectionError if the OctoPrint server could not be found. + + Returns a tuple who's first item an enum representing the result type, + and if the result type is GRANTED, the tuple's second item is the API key. + """ + workflow_supported = self.probe_app_keys_workflow_support() + + if not workflow_supported: + return (WorkflowAppKeyRequestResult.WORKFLOW_UNSUPPORTED, None) + + polling_url = self.start_authorization_process(appName, user) + + interval = 1 + elapsed = 0 + + while elapsed < timeout: + (polling_result, api_key) = self.poll_auth_request_decision(polling_url) + + if polling_result == AuthorizationRequestPollingResult.NOPE: + return (WorkflowAppKeyRequestResult.NOPE, None) + + if polling_result == AuthorizationRequestPollingResult.GRANTED: + return (WorkflowAppKeyRequestResult.GRANTED, api_key) + + sleep(interval) + elapsed += interval + + return (WorkflowAppKeyRequestResult.TIMED_OUT, None) + + ########################### + ### CONNECTION HANDLING ### + ########################### + + def connection_info(self): + """Get connection settings + http://docs.octoprint.org/en/master/api/connection.html#get-connection-settings + + Retrieve the current connection settings, including information + regarding the available baudrates and serial ports and the + current connection state. + """ + return self._get("/api/connection") + + def state(self): + """ + A shortcut to get the current state. + """ + return self.connection_info()["current"]["state"] + + def connect( + self, + *, + port=None, + baudrate=None, + printer_profile=None, + save=None, + autoconnect=None, + ): + """Issue a connection command + http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command + + Instructs OctoPrint to connect to the printer + + port: Optional, specific port to connect to. If not set the current + portPreference will be used, or if no preference is available auto + detection will be attempted. + + baudrate: Optional, specific baudrate to connect with. If not set + the current baudratePreference will be used, or if no preference + is available auto detection will be attempted. + + printer_profile: Optional, specific printer profile to use for + connection. If not set the current default printer profile + will be used. + + save: Optional, whether to save the request's port and baudrate + settings as new preferences. Defaults to false if not set. + + autoconnect: Optional, whether to automatically connect to the printer + on OctoPrint's startup in the future. If not set no changes will be + made to the current configuration. + """ + data = {"command": "connect"} + if port is not None: + data["port"] = port + if baudrate is not None: + data["baudrate"] = baudrate + if printer_profile is not None: + data["printerProfile"] = printer_profile + if save is not None: + data["save"] = save + if autoconnect is not None: + data["autoconnect"] = autoconnect + self._post("/api/connection", json=data, ret=False) + + def disconnect(self): + """Issue a connection command + http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command + + Instructs OctoPrint to disconnect from the printer + """ + data = {"command": "disconnect"} + self._post("/api/connection", json=data, ret=False) + + def fake_ack(self): + """Issue a connection command + http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command + + Fakes an acknowledgment message for OctoPrint in case one got lost on + the serial line and the communication with the printer since stalled. + This should only be used in "emergencies" (e.g. to save prints), the + reason for the lost acknowledgment should always be properly + investigated and removed instead of depending on this "symptom solver". + """ + data = {"command": "fake_ack"} + self._post("/api/connection", json=data, ret=False) + + ####################### + ### FILE OPERATIONS ### + ####################### + + def _prepend_local(self, location): + if location.split("/")[0] not in ("local", "sdcard"): + return "local/" + location + return location + + def files(self, location=None, recursive=False): + """Retrieve all files + http://docs.octoprint.org/en/master/api/files.html#retrieve-all-files + + Retrieve files from specific location + http://docs.octoprint.org/en/master/api/files.html#retrieve-files-from-specific-location + + Retrieve information regarding all files currently available and + regarding the disk space still available locally in the system + + If location is used, 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 + + If location is a file, retrieves the selected file''s information + + Args: + 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). + recursive: If set to true, return all files and folders recursively. + Otherwise only return items on same level. + + TODO: Recursive appears to always be on + """ + payload = {"recursive": str(recursive).lower()} + if location: + location = self._prepend_local(location) + return self._get("/api/files/{}".format(location), params=payload) + return self._get("/api/files", params=payload) + + @contextmanager + def _file_tuple(self, file): + """ + Yields a tuple with filename and file object + + Expects the same thing or a path as input + """ + mime = "application/octet-stream" + + try: + exists = os.path.exists(file) + except: + exists = False + + if exists: + filename = os.path.basename(file) + with open(file, "rb") as f: + yield (filename, f, mime) + else: + yield file + (mime,) + + def files_info(self, location, filename, recursive=False): + """Retrieve a specific file’s or folder’s information + http://docs.octoprint.org/en/master/api/files.html#retrieve-a-specific-file-s-or-folder-s-information + + Retrieves the selected file’s or folder’s information. + If the file is unknown, a 404 Not Found is returned. + If the targeted path is a folder, by default only its direct children + will be returned. If recursive is provided and set to true, all + sub folders and their children will be returned too. + On success, a 200 OK is returned, with a file information item as + the response body. + """ + try: + payload = {"recursive": str(recursive).lower()} + return self._get( + "/api/files/{}/{}".format(location, filename), + params=payload, + ) + except HTTPError as e: + if e.response.status_code == 404: + return {} + else: + raise e + + def upload( + self, + file, + *, + location="local", + select=False, + print=False, + userdata=None, + path=None, + ): + """Upload file or create folder + http://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder + + Upload a given file + It can be a path or a tuple with a filename and a file-like object + """ + with self._file_tuple(file) as file_tuple: + files = { + "file": file_tuple, + "select": (None, select), + "print": (None, print), + } + if userdata: + files["userdata"] = (None, userdata) + if path: + files["path"] = (None, path) + + return self._post("/api/files/{}".format(location), files=files) + + def new_folder(self, folder_name, location="local"): + """Upload file or create folder + http://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder + + To create a new folder, the request body must at least contain the foldername + form field, specifying the name of the new folder. Note that folder creation + is currently only supported on the local file system. + """ + data = { + "foldername": folder_name, + } + return self._post("/api/files/{}".format(location), data=data) + + def select(self, location, *, print=False): + """Issue a file command + http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command + + Selects a file for printing + + Location is target/filename, defaults to local/filename + If print is True, the selected file starts to print immediately + """ + location = self._prepend_local(location) + data = { + "command": "select", + "print": print, + } + self._post("/api/files/{}".format(location), json=data, ret=False) + + def slice( + self, + location, + slicer="curalegacy", + gcode=None, + position=None, + printer_profile=None, + profile=None, + select=False, + print=False, + ): + """Issue a file command + http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command + + 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. + + TODO: ADD PROFILE.* + """ + location = self._prepend_local(location) + data = { + "command": "slice", + "slicer": slicer, + "select": select, + "print": print, + } + if gcode is not None: + data["gcode"] = gcode + if position is not None: + data["position"] = position + if printer_profile is not None: + data["printerProfile"] = printer_profile + if profile is not None: + data["profile"] = profile + return self._post("/api/files/{}".format(location), json=data, ret=False) + + def copy(self, location, dest): + """Issue a file command + http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command + + Copies the file or folder to a new destination on the same location + """ + location = self._prepend_local(location) + data = { + "command": "copy", + "destination": dest, + } + return self._post("/api/files/{}".format(location), json=data, ret=False) + + def move(self, location, dest): + """Issue a file command + http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command + + Moves the file or folder to a new destination on the same location + """ + location = self._prepend_local(location) + data = { + "command": "move", + "destination": dest, + } + return self._post("/api/files/{}".format(location), json=data, ret=False) + + def delete(self, location): + """Delete file + http://docs.octoprint.org/en/master/api/files.html#delete-file + + Delete the selected filename on the selected target + + Location is target/filename, defaults to local/filename + """ + location = self._prepend_local(location) + self._delete("/api/files/{}".format(location)) + + ###################### + ### JOB OPERATIONS ### + ###################### + + def start(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Starts the print of the currently selected file + + Use select() to select a file + """ + data = {"command": "start"} + self._post("/api/job", json=data, ret=False) + + def cancel(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Cancels the current print job + + There must be an active print job for this to work + """ + data = {"command": "cancel"} + self._post("/api/job", json=data, ret=False) + + def restart(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Restart the print of the currently selected file from the beginning + + There must be an active print job for this to work and the print job + must currently be paused + """ + data = {"command": "restart"} + self._post("/api/job", json=data, ret=False) + + def pause_command(self, action): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Pauses/resumes/toggles the current print job. + Accepts one optional additional parameter action specifying + which action to take. + + In order to stay backwards compatible to earlier iterations of this API, + the default action to take if no action parameter is supplied is to + toggle the print job status. + + Pause: + Pauses the current job if it’s printing, + does nothing if it’s already paused. + Resume: + Resumes the current job if it’s paused, + does nothing if it’s printing. + Toggle: + Toggles the pause state of the job, + pausing it if it’s printing and resuming it + if it’s currently paused. + """ + data = { + "command": "pause", + "action": action, + } + self._post("/api/job", json=data, ret=False) + + def pause(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Pauses the current job if it’s printing, + does nothing if it’s already paused. + """ + self.pause_command(action="pause") + + def resume(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Resumes the current job if it’s paused, + does nothing if it’s printing. + """ + self.pause_command(action="resume") + + def toggle(self): + """Issue a job command + http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command + + Toggles the pause state of the job, + pausing it if it’s printing and resuming it + if it’s currently paused. + """ + self.pause_command(action="toggle") + + def job_info(self): + """Retrieve information about the current job + http://docs.octoprint.org/en/master/api/job.html#retrieve-information-about-the-current-job + + Retrieve information about the current job (if there is one) + """ + return self._get("/api/job") + + ################# + ### LANGUAGES ### + ################# + + def languages(self): + """Retrieve installed language packs + http://docs.octoprint.org/en/master/api/languages.html#retrieve-installed-language-packs + + Retrieves a list of installed language packs. + """ + return self._get("/api/languages") + + def upload_language(self, file): + """Upload a language pack + http://docs.octoprint.org/en/master/api/languages.html#upload-a-language-pack + + Uploads a new language pack to OctoPrint. + 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. + To upload a file, the request body must contain the file form field + with the contents and file name of the file to upload. + Only files with one of the extensions zip, tar.gz, tgz or tar will + be processed, for other file extensions a 400 Bad Request will be returned. + Will return a list of installed language packs upon completion, + as described in Retrieve installed language packs. + + Parameters: + file – The language pack file to upload + """ + with self._file_tuple(file) as file_tuple: + files = {"file": file_tuple} + + return self._post("/api/languages", files=files) + + def delete_language(self, locale, pack): + """Delete a language pack + http://docs.octoprint.org/en/master/api/languages.html#delete-a-language-pack + + Retrieves a list of installed language packs. + """ + return self._delete("/api/languages/{}/{}".format(locale, pack)) + + ########################### + ### LOG FILE MANAGEMENT ### + ########################### + + def logs(self): + """Retrieve a list of available log files + http://docs.octoprint.org/en/master/bundledplugins/logging.html#retrieve-a-list-of-available-log-files + + Log file management (and logging configuration) was moved into + a bundled plugin in OctoPrint 1.3.7. + + Retrieve information regarding all log files currently available + and regarding the disk space still available in the system on the + location the log files are being stored + """ + version = self._version_tuple(self.version["server"]) + if version < self._version_tuple("1.3.7"): + return self._get("/api/logs") + return self._get("/plugin/logging/logs") + + def delete_log(self, filename): + """Delete a specific logfile + http://docs.octoprint.org/en/master/bundledplugins/logging.html#delete-a-specific-logfile + + Log file management (and logging configuration) was moved into + a bundled plugin in OctoPrint 1.3.7. + + Delete the selected log file with name filename + """ + version = self._version_tuple(self.version["server"]) + if version < self._version_tuple("1.3.7"): + self._delete("/api/logs/{}".format(filename)) + self._delete("/plugin/logging/logs/{}".format(filename)) + + ########################## + ### PRINTER OPERATIONS ### + ########################## + + def _hwinfo(self, url, **kwargs): + """ + Helper method for printer(), tool(), bed() and sd() + """ + params = {} + if kwargs.get("exclude"): + params["exclude"] = ",".join(kwargs["exclude"]) + if kwargs.get("history"): + params["history"] = "true" # or 'yes' or 'y' or '1' + if kwargs.get("limit"): + params["limit"] = kwargs["limit"] + return self._get(url, params=params) + + def printer(self, *, exclude=None, history=False, limit=None): + """Retrieve the current printer state + http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-printer-state + + Retrieves the current state of the printer + + Returned information includes: + + * temperature information + * SD state (if available) + * general printer state + + Temperature information can also be made to include the printer's + temperature history by setting the history argument. + The amount of data points to return here can be limited using the limit + argument. + + Clients can specify a list of attributes to not return in the response + (e.g. if they don't need it) via the exclude argument. + """ + return self._hwinfo( + "/api/printer", exclude=exclude, history=history, limit=limit + ) + + def jog(self, x=None, y=None, z=None): + """Issue a print head command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command + + Jogs the print head (relatively) by a defined amount in one or more + axes. Additional parameters are: + + x: Optional. Amount to jog print head on x axis, must be a valid + number corresponding to the distance to travel in mm. + + y: Optional. Amount to jog print head on y axis, must be a valid + number corresponding to the distance to travel in mm. + + z: Optional. Amount to jog print head on z axis, must be a valid + number corresponding to the distance to travel in mm. + """ + data = {"command": "jog"} + if x: + data["x"] = x + if y: + data["y"] = y + if z: + data["z"] = z + self._post("/api/printer/printhead", json=data, ret=False) + + def home(self, axes=None): + """Issue a print head command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command + + Homes the print head in all of the given axes. + Additional parameters are: + + axes: A list of axes which to home, valid values are one or more of + 'x', 'y', 'z'. Defaults to all. + """ + axes = [a.lower()[:1] for a in axes] if axes else ["x", "y", "z"] + data = {"command": "home", "axes": axes} + self._post("/api/printer/printhead", json=data, ret=False) + + def feedrate(self, factor): + """Issue a print head command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command + + Changes the feedrate factor to apply to the movement's of the axes. + + factor: The new factor, percentage as integer or float (percentage + divided by 100) between 50 and 200%. + """ + data = {"command": "feedrate", "factor": factor} + self._post("/api/printer/printhead", json=data, ret=False) + + @classmethod + def _tool_dict(cls, whatever): + if isinstance(whatever, (int, float)): + whatever = (whatever,) + if isinstance(whatever, dict): + ret = whatever + else: + ret = {} + for n, thing in enumerate(whatever): + ret["tool{}".format(n)] = thing + return ret + + def tool_target(self, targets): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Sets the given target temperature on the printer's tools. + Additional parameters: + + targets: Target temperature(s) to set. + Can be one number (for tool0), list of numbers or dict, where keys + must match the format tool{n} with n being the tool's index starting + with 0. + """ + targets = self._tool_dict(targets) + data = {"command": "target", "targets": targets} + self._post("/api/printer/tool", json=data, ret=False) + + def tool_offset(self, offsets): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Sets the given temperature offset on the printer's tools. + Additional parameters: + + offsets: Offset(s) to set. + Can be one number (for tool0), list of numbers or dict, where keys + must match the format tool{n} with n being the tool's index starting + with 0. + """ + offsets = self._tool_dict(offsets) + data = {"command": "offset", "offsets": offsets} + self._post("/api/printer/tool", json=data, ret=False) + + def tool_select(self, tool): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Selects the printer's current tool. + Additional parameters: + + tool: Tool to select, format tool{n} with n being the tool's index + starting with 0. Or integer. + """ + if isinstance(tool, int): + tool = "tool{}".format(tool) + data = {"command": "select", "tool": tool} + self._post("/api/printer/tool", json=data, ret=False) + + def extrude(self, amount): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Extrudes the given amount of filament from the currently selected tool + + Additional parameters: + + amount: The amount of filament to extrude in mm. + May be negative to retract. + """ + data = {"command": "extrude", "amount": amount} + self._post("/api/printer/tool", json=data, ret=False) + + def retract(self, amount): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Retracts the given amount of filament from the currently selected tool + + Additional parameters: + + amount: The amount of filament to retract in mm. + May be negative to extrude. + """ + self.extrude(-amount) + + def flowrate(self, factor): + """Issue a tool command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command + + Changes the flow rate factor to apply to extrusion of the tool. + + factor: The new factor, percentage as integer or float + (percentage divided by 100) between 75 and 125%. + """ + data = {"command": "flowrate", "factor": factor} + self._post("/api/printer/tool", json=data, ret=False) + + def tool(self, history=False, limit=None): + """Retrieve the current tool state + http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-tool-state + + Retrieves the current temperature data (actual, target and offset) plus + optionally a (limited) history (actual, target, timestamp) for all of + the printer's available tools. + + It's also possible to retrieve the temperature history by setting the + history argument. The amount of returned history data points can be + limited using the limit argument. + """ + return self._hwinfo("/api/printer/tool", history=history, limit=limit) + + def bed_target(self, target): + """Issue a bed command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-bed-command + + Sets the given target temperature on the printer's bed. + + target: Target temperature to set. + """ + data = {"command": "target", "target": target} + self._post("/api/printer/bed", json=data, ret=False) + + def bed_offset(self, offset): + """Issue a bed command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-bed-command + + Sets the given temperature offset on the printer's bed. + + offset: Temperature offset to set. + """ + data = {"command": "offset", "offset": offset} + self._post("/api/printer/bed", json=data, ret=False) + + def bed(self, history=False, limit=None): + """Retrieve the current bed state + http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-bed-state + + Retrieves the current temperature data (actual, target and offset) plus + optionally a (limited) history (actual, target, timestamp) for the + printer's heated bed. + + It's also possible to retrieve the temperature history by setting the + history argument. The amount of returned history data points can be + limited using the limit argument. + """ + return self._hwinfo("/api/printer/bed", history=history, limit=limit) + + def chamber_target(self, target): + """Issue a chamber command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-chamber-command + + Sets the given target temperature on the printer's chamber. + + target: Target temperature to set. + """ + data = {"command": "target", "target": target} + self._post("/api/printer/chamber", json=data, ret=False) + + def chamber_offset(self, offset): + """Issue a chamber command + http://docs.octoprint.org/en/master/api/printer.html#issue-a-chamber-command + + Sets the given temperature offset on the printer's chamber. + + offset: Temperature offset to set. + """ + data = {"command": "offset", "offset": offset} + self._post("/api/printer/chamber", json=data, ret=False) + + def chamber(self, history=False, limit=None): + """Retrieve the current chamber state + http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-chamber-state + + Retrieves the current temperature data (actual, target and offset) plus + optionally a (limited) history (actual, target, timestamp) for the + printer's heated chamber. + + It's also possible to retrieve the temperature history by setting the + history argument. The amount of returned history data points can be + limited using the limit argument. + """ + return self._hwinfo("/api/printer/chamber", history=history, limit=limit) + + def sd_init(self): + """Issue an SD command + http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command + + Initializes the printer's SD card, making it available for use. + This also includes an initial retrieval of the list of files currently + stored on the SD card, so after issuing files(location=sd) a retrieval + of the files on SD card will return a successful result. + + If OctoPrint detects the availability of a SD card on the printer + during connection, it will automatically attempt to initialize it. + """ + data = {"command": "init"} + self._post("/api/printer/sd", json=data, ret=False) + + def sd_refresh(self): + """Issue an SD command + http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command + + Refreshes the list of files stored on the printer''s SD card. + Will raise a 409 Conflict if the card has not been initialized yet + with sd_init(). + """ + data = {"command": "refresh"} + self._post("/api/printer/sd", json=data, ret=False) + + def sd_release(self): + """Issue an SD command + http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command + + Releases the SD card from the printer. The reverse operation to init. + After issuing this command, the SD card won't be available anymore, + hence and operations targeting files stored on it will fail. + Will raise a 409 Conflict if the card has not been initialized yet + with sd_init(). + """ + data = {"command": "release"} + self._post("/api/printer/sd", json=data, ret=False) + + def sd(self): + """Retrieve the current SD state + http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-sd-state + + Retrieves the current state of the printer's SD card. + + If SD support has been disabled in OctoPrint's settings, + a 404 Not Found is risen. + """ + return self._get("/api/printer/sd") + + def custom_control_request(self): + """Retrieves the custom controls as configured in config.yaml. + http://docs.octoprint.org/en/master/api/printer.html#get--api-printer-command-custom + . + The response will contain a list of custom control definitions. + A 200 OK with a List all response will be returned. + """ + return self._get("/api/printer/command/custom") + + def get_notifications(self): + """Retrieve printer notifications + https://docs.octoprint.org/en/master/bundledplugins/action_command_notification.html + + Retrieves the log of notifications from the printer. + """ + return self._get("/api/plugin/action_command_notification") + + def clear_notifications(self): + """Retrieve printer notifications + https://docs.octoprint.org/en/master/bundledplugins/action_command_notification.html + + Clears the notifications log. + """ + return self._post( + "/api/plugin/action_command_notification", + json={"command": "clear"}, + ret=False, + ) + + def gcode(self, cmd: Union[str, List[str]]): + """Send an arbitrary command to the printer + http://docs.octoprint.org/en/master/api/printer.html#send-an-arbitrary-command-to-the-printer + + Sends any command to the printer via the serial interface. + Should be used with some care as some commands can interfere with or + even stop a running print job. + + command: A single string command or command separated by newlines + or a list of commands + """ + + if isinstance(cmd, str): + # Split into commands + cmd = cmd.split("\n") + + # Discard comments + cmd = [re.sub(re.compile(r"\s*;.*$"), "", c) for c in cmd] + + # Strip leading and trailing spaces + cmd = [c.strip() for c in cmd] + + # Remove empty commands + cmd = [c for c in cmd if c] + + if len(cmd) == 1: + data = {"command": cmd[0]} + else: + data = {"commands": cmd} + self._post("/api/printer/command", json=data, ret=False) + + ################################## + ### PRINTER PROFILE OPERATIONS ### + ################################## + + def printer_profiles(self): + """Retrieve all printer profiles + http://docs.octoprint.org/en/master/api/printerprofiles.html#retrieve-all-printer-profiles + + Retrieves a list of all configured printer profiles. + """ + return self._get("/api/printerprofiles") + + def printer_profile(self, profile=None): + """Retrieve specific printer profile + https://docs.octoprint.org/en/master/api/printerprofiles.html#retrieve-a-single-printer-profile + + Retrieves a single, existing printer profile. + """ + # Use default if none given + if profile is None: + profile = "_default" + return self._get("/api/printerprofiles/{}".format(profile)) + + def add_printer_profile(self, profile_data): + """Add a new printer profile + http://docs.octoprint.org/en/master/api/printerprofiles.html#add-a-new-printer-profile + + TODO: Implement this + """ + return self._post("/api/printerprofiles", json=profile_data) + + def update_printer_profile(self, profile, profile_data): + """Update an existing printer profile + http://docs.octoprint.org/en/master/api/printerprofiles.html#update-an-existing-printer-profile + + TODO: Implement this + """ + return self._patch("/api/printerprofiles/{}".format(profile), json=profile_data) + + def delete_printer_profile(self, profile): + """Remove an existing printer profile + http://docs.octoprint.org/en/master/api/printerprofiles.html#remove-an-existing-printer-profile + + Deletes an existing printer profile by its profile identifier. + + If the profile to be deleted is the currently selected profile, + a 409 Conflict will be returned. + """ + return self._delete("/api/printerprofiles/{}".format(profile)) + + ################ + ### SETTINGS ### + ################ + + def settings(self, settings=None): + """Retrieve current settings + http://docs.octoprint.org/en/master/api/settings.html#retrieve-current-settings + + Save settings + http://docs.octoprint.org/en/master/api/settings.html#save-settings + + Retrieves the current configuration of printer + python dict format if argument settings is not given + + Saves provided settings in argument settings (if given) + and retrieves new settings in python dict format + Expects a python dict with the settings to change as request body. + This can be either a full settings tree, + or only a partial tree containing + only those fields that should be updated. + + Data model described: + http://docs.octoprint.org/en/master/api/settings.html#data-model + http://docs.octoprint.org/en/master/configuration/config_yaml.html#config-yaml + """ + if settings: + return self._post("/api/settings", json=settings, ret=True) + else: + return self._get("/api/settings") + + def regenerate_apikey(self): + """Regenerate the system wide API key + http://docs.octoprint.org/en/master/api/settings.html#regenerate-the-system-wide-api-key + """ + return self._post("/api/settings/apikey") + + def fetch_templates(self): + """Fetch template data + http://docs.octoprint.org/en/master/api/settings.html#fetch-template-data + + This API endpoint is in beta. Things might change. + """ + return self._get("/api/settings/templates") + + ############### + ### SLICING ### + ############### + + def slicers(self): + """List All Slicers and Slicing Profiles + http://docs.octoprint.org/en/master/api/slicing.html#list-all-slicers-and-slicing-profiles + + Returns a list of all available slicing profiles for all + registered slicers in the system. + + Returns a 200 OK response with a Slicer list as the body + upon successful completion. + """ + return self._get("/api/slicing") + + def slicer_profiles(self, slicer): + """List Slicing Profiles of a Specific Slicer + http://docs.octoprint.org/en/master/api/slicing.html#list-slicing-profiles-of-a-specific-slicer + + Returns a list of all available slicing profiles for + the requested slicer. Returns a 200 OK response with + a Profile list as the body upon successful completion. + """ + return self._get("/api/slicing/{}/profiles".format(slicer)) + + def slicer_profile(self, slicer, key): + """Retrieve Specific Profile + http://docs.octoprint.org/en/master/api/slicing.html#retrieve-specific-profile + + Retrieves the specified profile from the system. + + Returns a 200 OK response with a full Profile as + the body upon successful completion. + """ + return self._get("/api/slicing/{}/profiles/{}".format(slicer, key)) + + def add_slicer_profile(self, slicer, key, profile): + """Add Slicing Profile + http://docs.octoprint.org/en/master/api/slicing.html#add-slicing-profile + + Adds a new slicing profile for the given slicer to the system. + If the profile identified by key already exists, it will be overwritten. + + Expects a Profile as body. + + Returns a 201 Created and an abridged Profile in the body + upon successful completion. + + Requires admin rights. + + TODO: Create a profile body to send + """ + return self._put( + "/api/slicing/{}/profiles/{}".format(slicer, key), json=profile + ) + + def delete_slicer_profile(self, slicer, key): + """Delete Slicing Profile + http://docs.octoprint.org/en/master/api/slicing.html#delete-slicing-profile + + Delete the slicing profile identified by key for the slicer slicer. + If the profile doesn’t exist, the request will succeed anyway. + + Requires admin rights. + """ + return self._delete("/api/slicing/{}/profiles/{}".format(slicer, key)) + + ############## + ### SYSTEM ### + ############## + + def system_commands(self): + """List all registered system commands + http://docs.octoprint.org/en/master/api/system.html#list-all-registered-system-commands + + Retrieves all configured system commands. + A 200 OK with a List all response will be returned. + """ + return self._get("/api/system/commands") + + def source_system_commands(self, source): + """List all registered system commands for a source + http://docs.octoprint.org/en/master/api/system.html#list-all-registered-system-commands-for-a-source + + Retrieves the configured system commands for the specified source. + The response will contain a list of command definitions. + """ + return self._get("/api/system/commands/{}".format(source)) + + def execute_system_command(self, source, action): + """Execute a registered system command + http://docs.octoprint.org/en/master/api/system.html#execute-a-registered-system-command + + Execute the system command action defined in source. + Example + Restart OctoPrint via the core system command restart + (which is available if the server restart command is configured). + + Parameters: + source – The source for which to list commands, + currently either core or custom + action – The identifier of the command, action from its definition + """ + + return self._post( + "/api/system/commands/{}/{}".format(source, action), ret=False + ) + + ################# + ### TIMELAPSE ### + ################# + + def timelapses(self, unrendered=None): + """Retrieve a list of timelapses and the current config + http://docs.octoprint.org/en/master/api/timelapse.html#retrieve-a-list-of-timelapses-and-the-current-config + + Retrieve a list of timelapses and the current config. + Returns a timelase list in the response body. + + Unrendered, if True also includes unrendered timelapse. + """ + if unrendered: + return self._get("/api/timelapse", params=unrendered) + return self._get("/api/timelapse") + + def delete_timelapse(self, filename): + """Delete a timelapse + http://docs.octoprint.org/en/master/api/timelapse.html#delete-a-timelapse + + Delete the specified timelapse + + Requires user rights + """ + self._delete("/api/timelapse/{}".format(filename)) + + def render_timelapse(self, name): + """Issue a command for an unrendered timelapse + http://docs.octoprint.org/en/master/api/timelapse.html#issue-a-command-for-an-unrendered-timelapse + + Current only supports to render the unrendered timelapse + name via the render command. + + Requires user rights. + + name - The name of the unrendered timelapse + command – The command to issue, currently only render is supported + """ + data = { + "command": "render", + } + return self._post("/api/timelapse/unrendered/{}".format(name), json=data) + + def delete_unrendered_timelapse(self, filename): + """Delete an unrendered timelapse + http://docs.octoprint.org/en/master/api/timelapse.html#delete-an-unrendered-timelapse + """ + self._delete("/api/timelapse/unrendered/{}".format(filename)) + + def change_timelapse_config(self, type): + """Change current timelapse config + http://docs.octoprint.org/en/master/api/timelapse.html#change-current-timelapse-config + + Save a new timelapse configuration to use for the next print. + The configuration is expected as the request body. + Requires user rights. + + Type of the timelapse, either off, zchange or timed. + + TODO: setup timelapse configuration + """ + data = { + "type": type, + } + return self._post("/api/timelapse", json=data) + + ############ + ### USER ### + ############ + + def users(self): + """Retrieve a list of users + http://docs.octoprint.org/en/master/api/users.html#retrieve-a-list-of-users + + Retrieves a list of all registered users in OctoPrint. + Will return a 200 OK with a user list response as body. + Requires admin rights. + """ + return self._get("/api/users") + + def user(self, username): + """Retrieve a user + http://docs.octoprint.org/en/master/api/users.html#retrieve-a-user + + Retrieves information about a user. + Will return a 200 OK with a user record as body. + Requires either admin rights or to be logged in as the user. + + Parameters: + username – Name of the user which to retrieve + """ + return self._get("/api/users/{}".format(username)) + + def add_user(self, name, password, active=False, admin=False): + """Add a user + http://docs.octoprint.org/en/master/api/users.html#add-a-user + + Adds a user to OctoPrint. + Expects a user registration request as request body. + Returns a list of registered users on success, see Retrieve a list of users. + Requires admin rights. + + JSON Params: + name – The user’s name + password – The user’s password + active – Whether to activate the account (true) or not (false) + admin – Whether to give the account admin rights (true) or not (false) + """ + data = { + "name": name, + "password": password, + "active": str(active).lower(), + "admin": str(admin).lower(), + } + return self._post("/api/users", json=data) + + def update_user(self, username, admin=None, active=None): + """Update a user + http://docs.octoprint.org/en/master/api/users.html#update-a-user + + Updates a user record. + Expects a user update request as request body. + Returns a list of registered users on success, see Retrieve a list of users. + Requires admin rights. + + Parameters: + username – Name of the user to update + + JSON Params: + admin – Whether to mark the user as admin (true) or not (false), can be left out (no change) + active – Whether to mark the account as activated (true) or deactivated (false), can be left out (no change) + """ + data = {} + if admin: + data["admin"] = str(admin).lower() + if active: + data["active"] = str(active).lower() + return self._put("/api/users/{}".format(username), json=data) + + def delete_user(self, username): + """Delete a user + http://docs.octoprint.org/en/master/api/users.html#delete-a-user + + Delete a user record. + Returns a list of registered users on success, see Retrieve a list of users. + Requires admin rights. + + Parameters: + username – Name of the user to delete + """ + return self._delete("/api/users/{}".format(username)) + + def reset_user_password(self, username, password): + """Reset a user’s password + http://docs.octoprint.org/en/master/api/users.html#reset-a-user-s-password + + Changes the password of a user. + Expects a JSON object with a single property password as request body. + Requires admin rights or to be logged in as the user. + + Parameters: + username – Name of the user to change the password for + + JSON Params: + password – The new password to set + """ + data = { + "password": password, + } + return self._put("/api/users/{}/password".format(username), json=data) + + def user_settings(self, username): + """Retrieve a user’s settings + http://docs.octoprint.org/en/master/api/users.html#retrieve-a-user-s-settings + + Retrieves a user’s settings. + Will return a 200 OK with a JSON object representing the user’s + personal settings (if any) as body. + Requires admin rights or to be logged in as the user. + + Parameters: + username - Name of the user to retrieve the settings for + """ + return self._get("/api/users/{}/settings".format(username)) + + def update_user_settings(self, username, new_settings): + """Update a user’s settings + http://docs.octoprint.org/en/master/api/users.html#update-a-user-s-settings + """ + return self._patch("/api/users/{}/settings".format(username), json=new_settings) + + def regenerate_user_apikey(self, username): + """Regenerate a user’s personal API key + http://docs.octoprint.org/en/master/api/users.html#regenerate-a-user-s-personal-api-key + + Generates a new API key for the user. + Does not expect a body. Will return the generated API key as apikey + property in the JSON object contained in the response body. + Requires admin rights or to be logged in as the user. + + Parameters: + username – Name of the user to retrieve the settings for + """ + return self._post("/api/users/{}/apikey".format(username)) + + def delete_user_apikey(self, username): + """Delete a user’s personal API key + http://docs.octoprint.org/en/master/api/users.html#delete-a-user-s-personal-api-key + + Deletes a user’s personal API key. + Requires admin rights or to be logged in as the user. + + Parameters: + username – Name of the user to retrieve the settings for + """ + return self._delete("/api/users/{}/apikey".format(username)) + + ############ + ### UTIL ### + ############ + + def util_test_path( + self, + path, + check_type, + check_access, + allow_create_dir=False, + check_writable_dir=False, + ): + """Test paths or URLs + http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls + + check_type: either 'file' or 'dir' + """ + data = { + "command": "path", + "path": path, + "check_type": check_type, + "check_access": check_access, + } + if check_type == "dir": + data["allow_create_dir"] = str(allow_create_dir).lower() + data["check_writable_dir"] = str(check_writable_dir).lower() + return self._post("/api/util/test", json=data) + + def util_test_url(self, url, status, method, response, timeout=120): + """Test paths or URLs + http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls + """ + data = { + "command": "url", + "url": url, + "status": status, + "method": method, + "response": response, + "timeout": timeout, + } + return self._post("/api/util/test", json=data) + + def util_test_server(self, host, port, protocol, timeout=None): + """Test paths or URLs + http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls + """ + data = { + "command": "server", + "host": host, + "port": port, + "protocol": protocol, + } + if timeout: + data["timeout"] = timeout + return self._post("/api/util/test", json=data) + + ############## + ### WIZARD ### + ############## + + def wizard(self): + """Retrieve additional data about registered wizards + http://docs.octoprint.org/en/master/api/wizard.html#retrieve-additional-data-about-registered-wizards + + Retrieves additional data about the registered wizards. + + Returns a 200 OK with an object mapping wizard identifiers to wizard + data entries. + """ + return self._get("/setup/wizard") + + def finish_wizards(self, handled): + """Finish wizards + http://docs.octoprint.org/en/master/api/wizard.html#finish-wizards + + Inform wizards that the wizard dialog has been finished. + + Expects a JSON request body containing a property handled + which holds a list of wizard identifiers which were handled + (not skipped) in the wizard dialog. + + Will call octoprint.plugin.WizardPlugin.on_wizard_finish() + for all registered wizard plugins, supplying the information + whether the wizard plugin’s identifier was within the list of + handled wizards or not. + """ + data = { + "handled": handled, + } + return self._post("/setup/wizard", json=data) diff --git a/projects/octorest/src/octorest/sockjsclient.py b/projects/octorest/src/octorest/sockjsclient.py new file mode 100644 index 0000000..eca3ef8 --- /dev/null +++ b/projects/octorest/src/octorest/sockjsclient.py @@ -0,0 +1,48 @@ +import random +import string + +from urllib import parse as urlparse + + +class SockJSClient: + """ + Abstract class for SockJS client event handlers + """ + @classmethod + def random_str(cls, length): + """ + Produces random string of given length + It is used for session ID + unique for every session of SockJS connection + """ + letters = string.ascii_lowercase + string.digits + return ''.join(random.choice(letters) for c in range(length)) + + def __init__(self, url, on_open=None, on_close=None, on_message=None): + self.on_open = on_open if callable(on_open) else lambda x: None + self.on_close = on_close if callable(on_close) else lambda x: None + self.on_message = on_message if callable(on_message) else lambda x, y: None + + self.thread = None + self.socket = None + + parsed_url = urlparse.urlparse(url) + self.base_url = parsed_url.netloc + self.secure = True if parsed_url.scheme in ["wss", "https"] else False + + server_id = str(random.randint(0, 1000)) + session_id = self.random_str(8) + self.url = "{protocol}://" + \ + "/".join((self.base_url, "sockjs", server_id, session_id)) \ + + "/{method}" + + def wait(self): + self.thread.join() + + def run(self): + """Initializes and starts thread and socket communication""" + raise NotImplementedError("Should have implemented this") + + def send(self, data): + """Send data across socket communication""" + raise NotImplementedError("Should have implemented this") diff --git a/projects/octorest/src/octorest/websocket.py b/projects/octorest/src/octorest/websocket.py new file mode 100644 index 0000000..5cf3ac6 --- /dev/null +++ b/projects/octorest/src/octorest/websocket.py @@ -0,0 +1,55 @@ +import json +from threading import Thread + +import websocket + +from octorest.sockjsclient import SockJSClient + + +class WebSocketEventHandler(SockJSClient): + """ + Class for SockJS WebSocket communication + + params: + url - url of Printer + on_open - callback function with 1 argument, api of WebSocketApp + - executes on creating new connection + on_close - callback function with 1 argument, api of WebSocketApp + - executes on connection close + on_message - callback function with 2 arguments, api of WebSocketApp + and message in dict format + - executes on received message, if array, then it executes + for every value of given array + """ + def __init__(self, url, on_open=None, on_close=None, on_message=None): + super().__init__(url, on_open, on_close, on_message) + + self.url = self.url.format(protocol="wss" if self.secure else "ws", + method="websocket") + + def run(self): + """ + Runs thread, which listens on socket. + Executes given callbacks on events + """ + def on_message(ws, data): + if data.startswith('m'): + self.on_message(ws, json.loads(data[1:])) + elif data.startswith('a'): + for msg in json.loads(data[1:]): + self.on_message(ws, msg) + + self.socket = websocket.WebSocketApp(self.url, + on_open=self.on_open, + on_close=self.on_close, + on_message=on_message) + self.thread = Thread(target=self.socket.run_forever) + self.thread.daemon = True + self.thread.start() + + def send(self, data): + """ + Sends data, currently not working properly. + OctoPrint server is unable to parse. + """ + self.socket.send(json.dumps(data)) diff --git a/projects/octorest/src/octorest/xhrstreaming.py b/projects/octorest/src/octorest/xhrstreaming.py new file mode 100644 index 0000000..03fcddc --- /dev/null +++ b/projects/octorest/src/octorest/xhrstreaming.py @@ -0,0 +1,73 @@ +import json +from threading import Thread + +import requests + +from octorest.sockjsclient import SockJSClient + + +class XHRStreamingEventHandler(SockJSClient): + """ + Class for SockJS communication with XHRStreaming method + + params: + url - url of Printer + on_open - callback function with 1 argument, api of WebSocketApp + - executes on creating new connection + on_close - callback function with 1 argument, api of WebSocketApp + - executes on connection close + on_message - callback function with 2 arguments, api of WebSocketApp + and message in dict format + - executes on received message, if array, then it executes + for every value of given array + """ + def __init__(self, url, + on_open=None, on_close=None, on_message=None, session=None): + + super().__init__(url, on_open, on_close, on_message) + + self.socket = session or requests.Session() + + def run(self): + """ + Runs thread, which listens on socket. + Executes given callbacks on events + """ + self.thread = Thread(target=self._xhr_streaming_run) + self.thread.daemon = True + self.thread.start() + + def _xhr_streaming_run(self): + """ + Function for getting data and executing callbacks + """ + url = self.url.format(protocol="https" if self.secure else "http", + method="xhr_streaming") + while True: + try: + connection = self.socket.post(url, stream=True) + for line in connection.iter_lines(): + line = line.decode('utf-8') + if line.startswith('o'): + self.on_open(self) + elif line.startswith('c'): + self.on_close(self) + elif line.startswith('m'): + data = json.loads(line[1:]) + self.on_message(self, data) + elif line.startswith('a'): + for msg in json.loads(line[1:]): + self.on_message(self, msg) + finally: + connection.close() + + def send(self, data): + """ + Sends data, currently not working properly. + OctoPrint server returns 404. + """ + print("SENDING") + url = self.url.format(protocol="https" if self.secure else "http", + method="xhr_send") + response = self.socket.post(url, data=json.dumps(data)) + return response diff --git a/projects/octorest/src/octorest/xhrstreaminggenerator.py b/projects/octorest/src/octorest/xhrstreaminggenerator.py new file mode 100644 index 0000000..4e3bd20 --- /dev/null +++ b/projects/octorest/src/octorest/xhrstreaminggenerator.py @@ -0,0 +1,68 @@ +import json +import random +import string +from urllib import parse as urlparse + +import requests + + +class XHRStreamingGenerator: + """ + Class that can communicate to SockJS server with XHR streaming + """ + + @classmethod + def random_str(cls, length): + letters = string.ascii_lowercase + string.digits + return ''.join(random.choice(letters) for c in range(length)) + + def __init__(self, url, session=None): + """ + Initialize the connection + The url shall include the protocol and port (if necessary) + """ + self.session = session or requests.Session() + r1 = str(random.randint(0, 1000)) + conn_id = self.random_str(8) + self.base_url = url + self.url = '/'.join((urlparse.urljoin(url, 'sockjs'), r1, conn_id)) + + def info(self): + url = urlparse.urljoin(self.base_url, 'sockjs/info') + response = self.session.get(url) + return response.json() + + def read_loop(self): + """ + Creates generator object + """ + url = '/'.join((self.url, 'xhr_streaming')) + while True: + try: + connection = self.session.post(url, stream=True) + for line in connection.iter_lines(): + line = line.decode('utf-8') + if line.startswith('o'): + continue # open connection + if line.startswith('c'): + continue # close connection + if line.startswith('h'): + continue # heartbeat + if line.startswith('m'): + yield json.loads(line[1:]) + continue # message + if line.startswith('a'): + for msg in json.loads(line[1:]): + yield msg + continue # array + finally: + connection.close() + + def send(self, data): + """ + Sends data, currently not working properly. + OctoPrint server returns 404 + """ + url = '/'.join((self.url, 'xhr_send')) + response = self.session.post(url, data=json.dumps(data)) + return response diff --git a/projects/octorest/test/_common.py b/projects/octorest/test/_common.py new file mode 100644 index 0000000..5368869 --- /dev/null +++ b/projects/octorest/test/_common.py @@ -0,0 +1,7 @@ +import os + +URL = os.environ.get('OCTOPRINT_URL') +APIKEY = os.environ.get('OCTOPRINT_APIKEY') + +URL = "http://localhost:5000" +APIKEY = "65FD7606F0FB4DF981C639FEDF08F7E6" diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json new file mode 100644 index 0000000..4595258 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json @@ -0,0 +1,286 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-04-24T13:27:14", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.10\"\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "41" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osg.CYEc5VC69OiyMaP-i7MYyBpYkrg; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2017-04-24T13:27:14", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osg.CYEc5VC69OiyMaP-i7MYyBpYkrg" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "5047" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-Osg.b2ivS1J-YBJOQe-KMGQt4gBvbUk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + }, + { + "recorded_at": "2017-04-24T13:27:15", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"appearance\": {\"name\": \"Test\"}}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "32" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-Osg.b2ivS1J-YBJOQe-KMGQt4gBvbUk" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"Test\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "pre-check=0, no-cache, no-store, must-revalidate, post-check=0, max-age=0" + ], + "Content-Length": [ + "5051" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osw.4F9twoqNEjXuPiBc2-m8wuI9Jyw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + }, + { + "recorded_at": "2017-04-24T13:27:16", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"appearance\": {\"name\": \"\"}}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "28" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osw.4F9twoqNEjXuPiBc2-m8wuI9Jyw" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "pre-check=0, no-cache, no-store, must-revalidate, post-check=0, max-age=0" + ], + "Content-Length": [ + "5047" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-OtA.qZs1PmwENCY1Fw2yssS9pulv9QA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json new file mode 100644 index 0000000..26c0ebc --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:01:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:01:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"connect\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "22" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:01:56", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Connecting\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "546" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetVA.bm6hI_J1ZS5vcNgeovT-gyl0XZA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json new file mode 100644 index 0000000..545931d --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:01:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:01:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Operational\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "547" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json new file mode 100644 index 0000000..b4fb422 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json @@ -0,0 +1,182 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T15:40:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T15:40:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/logs/serial.log" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/logs/serial.log" + } + }, + { + "recorded_at": "2016-07-25T15:40:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/logs" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"files\": [\n {\n \"date\": 1452183342, \n \"name\": \"octoprint.log.2016-01-07\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-07\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-07\"\n }, \n \"size\": 4661\n }, \n {\n \"date\": 1466871995, \n \"name\": \"octoprint.log.2016-06-25\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-25\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-25\"\n }, \n \"size\": 3922\n }, \n {\n \"date\": 1457028455, \n \"name\": \"octoprint.log.2016-03-03\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-03\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-03\"\n }, \n \"size\": 131\n }, \n {\n \"date\": 1464188895, \n \"name\": \"octoprint.log.2016-05-25\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-25\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-25\"\n }, \n \"size\": 9603\n }, \n {\n \"date\": 1463403811, \n \"name\": \"octoprint.log.2016-05-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-16\"\n }, \n \"size\": 5318\n }, \n {\n \"date\": 1468856189, \n \"name\": \"octoprint.log.2016-07-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-18\"\n }, \n \"size\": 40856\n }, \n {\n \"date\": 1449765091, \n \"name\": \"octoprint.log.2015-12-10\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-10\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-10\"\n }, \n \"size\": 9699\n }, \n {\n \"date\": 1464634834, \n \"name\": \"octoprint.log.2016-05-30\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-30\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-30\"\n }, \n \"size\": 4623\n }, \n {\n \"date\": 1467960900, \n \"name\": \"octoprint.log.2016-07-07\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-07\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-07\"\n }, \n \"size\": 8934\n }, \n {\n \"date\": 1449161140, \n \"name\": \"octoprint.log.2015-12-03\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-03\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-03\"\n }, \n \"size\": 7404\n }, \n {\n \"date\": 1461509346, \n \"name\": \"octoprint.log.2016-04-24\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-24\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-24\"\n }, \n \"size\": 5287\n }, \n {\n \"date\": 1455805987, \n \"name\": \"octoprint.log.2016-02-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-18\"\n }, \n \"size\": 5444\n }, \n {\n \"date\": 1459780076, \n \"name\": \"octoprint.log.2016-04-04\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-04\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-04\"\n }, \n \"size\": 4403\n }, \n {\n \"date\": 1457961905, \n \"name\": \"octoprint.log.2016-03-13\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-13\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-13\"\n }, \n \"size\": 4428\n }, \n {\n \"date\": 1457803483, \n \"name\": \"octoprint.log.2016-03-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-11\"\n }, \n \"size\": 7732\n }, \n {\n \"date\": 1450369885, \n \"name\": \"octoprint.log.2015-12-17\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-17\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-17\"\n }, \n \"size\": 4761\n }, \n {\n \"date\": 1430955047, \n \"name\": \"plugin_pluginmanager_console.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/plugin_pluginmanager_console.log\", \n \"resource\": \"http://printer15.local/api/logs/plugin_pluginmanager_console.log\"\n }, \n \"size\": 0\n }, \n {\n \"date\": 1462785291, \n \"name\": \"octoprint.log.2016-05-09\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-09\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-09\"\n }, \n \"size\": 7176\n }, \n {\n \"date\": 1456932162, \n \"name\": \"octoprint.log.2016-03-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-01\"\n }, \n \"size\": 2913\n }, \n {\n \"date\": 1451992592, \n \"name\": \"octoprint.log.2016-01-05\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-05\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-05\"\n }, \n \"size\": 9045\n }, \n {\n \"date\": 1469113274, \n \"name\": \"octoprint.log.2016-07-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-20\"\n }, \n \"size\": 2111\n }, \n {\n \"date\": 1457019789, \n \"name\": \"octoprint.log.2016-03-02\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-02\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-02\"\n }, \n \"size\": 2026\n }, \n {\n \"date\": 1464008932, \n \"name\": \"octoprint.log.2016-05-23\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-23\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-23\"\n }, \n \"size\": 17258\n }, \n {\n \"date\": 1464958946, \n \"name\": \"octoprint.log.2016-06-02\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-02\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-02\"\n }, \n \"size\": 8299\n }, \n {\n \"date\": 1466435897, \n \"name\": \"octoprint.log.2016-06-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-20\"\n }, \n \"size\": 3132\n }, \n {\n \"date\": 1460713237, \n \"name\": \"octoprint.log.2016-04-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-15\"\n }, \n \"size\": 1613\n }, \n {\n \"date\": 1450178418, \n \"name\": \"octoprint.log.2015-12-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-15\"\n }, \n \"size\": 8050\n }, \n {\n \"date\": 1468601474, \n \"name\": \"octoprint.log.2016-07-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-15\"\n }, \n \"size\": 5512\n }, \n {\n \"date\": 1448817122, \n \"name\": \"octoprint.log.2015-11-29\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-11-29\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-11-29\"\n }, \n \"size\": 3928\n }, \n {\n \"date\": 1456761793, \n \"name\": \"octoprint.log.2016-02-29\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-29\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-29\"\n }, \n \"size\": 1212\n }, \n {\n \"date\": 1468673024, \n \"name\": \"octoprint.log.2016-07-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-16\"\n }, \n \"size\": 1092\n }, \n {\n \"date\": 1448968659, \n \"name\": \"octoprint.log.2015-12-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-01\"\n }, \n \"size\": 7411\n }, \n {\n \"date\": 1462357573, \n \"name\": \"octoprint.log.2016-05-04\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-04\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-04\"\n }, \n \"size\": 4022\n }, \n {\n \"date\": 1469458785, \n \"name\": \"octoprint.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log\"\n }, \n \"size\": 34987\n }, \n {\n \"date\": 1449571322, \n \"name\": \"octoprint.log.2015-12-08\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-08\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-08\"\n }, \n \"size\": 14509\n }, \n {\n \"date\": 1460617779, \n \"name\": \"octoprint.log.2016-04-14\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-14\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-14\"\n }, \n \"size\": 1880\n }, \n {\n \"date\": 1430955047, \n \"name\": \"plugin_cura_engine.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/plugin_cura_engine.log\", \n \"resource\": \"http://printer15.local/api/logs/plugin_cura_engine.log\"\n }, \n \"size\": 0\n }, \n {\n \"date\": 1463666797, \n \"name\": \"octoprint.log.2016-05-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-18\"\n }, \n \"size\": 2206\n }, \n {\n \"date\": 1455296267, \n \"name\": \"octoprint.log.2016-02-12\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-12\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-12\"\n }, \n \"size\": 4609\n }, \n {\n \"date\": 1468249188, \n \"name\": \"octoprint.log.2016-07-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-11\"\n }, \n \"size\": 5406\n }, \n {\n \"date\": 1465579069, \n \"name\": \"octoprint.log.2016-06-10\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-10\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-10\"\n }, \n \"size\": 3852\n }, \n {\n \"date\": 1461182807, \n \"name\": \"octoprint.log.2016-04-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-20\"\n }, \n \"size\": 4621\n }, \n {\n \"date\": 1461046943, \n \"name\": \"octoprint.log.2016-04-19\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-19\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-19\"\n }, \n \"size\": 1812\n }, \n {\n \"date\": 1468478597, \n \"name\": \"octoprint.log.2016-07-13\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-13\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-13\"\n }, \n \"size\": 5814\n }, \n {\n \"date\": 1467126645, \n \"name\": \"octoprint.log.2016-06-28\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-28\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-28\"\n }, \n \"size\": 13567\n }, \n {\n \"date\": 1457527305, \n \"name\": \"octoprint.log.2016-03-09\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-09\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-09\"\n }, \n \"size\": 1092\n }, \n {\n \"date\": 1469116625, \n \"name\": \"octoprint.log.2016-07-21\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-21\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-21\"\n }, \n \"size\": 103\n }, \n {\n \"date\": 1466607225, \n \"name\": \"octoprint.log.2016-06-21\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-21\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-21\"\n }, \n \"size\": 6104\n }, \n {\n \"date\": 1458141527, \n \"name\": \"octoprint.log.2016-03-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-16\"\n }, \n \"size\": 1221\n }, \n {\n \"date\": 1463735129, \n \"name\": \"octoprint.log.2016-05-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-20\"\n }, \n \"size\": 1511\n }, \n {\n \"date\": 1468017273, \n \"name\": \"octoprint.log.2016-07-08\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-08\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-08\"\n }, \n \"size\": 726\n }, \n {\n \"date\": 1455552620, \n \"name\": \"octoprint.log.2016-02-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-15\"\n }, \n \"size\": 6555\n }, \n {\n \"date\": 1467351966, \n \"name\": \"octoprint.log.2016-07-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-01\"\n }, \n \"size\": 1488\n }, \n {\n \"date\": 1469293624, \n \"name\": \"octoprint.log.2016-07-23\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-23\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-23\"\n }, \n \"size\": 4371\n }, \n {\n \"date\": 1466754065, \n \"name\": \"octoprint.log.2016-06-24\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-24\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-24\"\n }, \n \"size\": 10251\n }, \n {\n \"date\": 1430955240, \n \"name\": \"octoprint.log.2015-05-06\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-05-06\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-05-06\"\n }, \n \"size\": 7764\n }, \n {\n \"date\": 1460385147, \n \"name\": \"octoprint.log.2016-04-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-11\"\n }, \n \"size\": 6346\n }, \n {\n \"date\": 1465118151, \n \"name\": \"octoprint.log.2016-06-05\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-05\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-05\"\n }, \n \"size\": 1508\n }\n ], \n \"free\": 12721901568\n}" + }, + "headers": { + "Content-Length": [ + "17134" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/logs" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json new file mode 100644 index 0000000..c951066 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:01:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:01:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"disconnect\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "25" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:01:55", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": null, \n \"port\": null, \n \"printerProfile\": \"_default\", \n \"state\": \"Closed\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "530" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json new file mode 100644 index 0000000..c9f271b --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:56:19", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:56:19", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"amount\": 1, \"command\": \"extrude\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "35" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json new file mode 100644 index 0000000..463cac3 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:09:31", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:09:31", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"fake_ack\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "23" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/connection" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json new file mode 100644 index 0000000..497a018 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T09:44:32", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T09:44:32", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"feedrate\", \"factor\": 1.0}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/printhead" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/printhead" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json new file mode 100644 index 0000000..29fa7b1 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"files\": [\n {\n \"date\": 1463733114, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3625.7017746005045, \n \"filament\": {\n \"tool0\": {\n \"length\": 1366.44818, \n \"volume\": 8.717114849239637\n }\n }\n }, \n \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n \"links\": [], \n \"name\": \"plate2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1463738111.306265, \n \"printTime\": 4454.600942850113, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n }, \n \"size\": 1919950, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4454.600942850113\n }, \n \"lastPrintTime\": {\n \"_default\": 4454.600942850113\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455519473, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 9648.473941059889, \n \"filament\": {\n \"tool0\": {\n \"length\": 12568.026009999172, \n \"volume\": 80.1764221731363\n }\n }\n }, \n \"hash\": \"2dd3898e6435fea50938ceb3350fbfc32348765a\", \n \"links\": [], \n \"name\": \"noha-kratsi.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455530836.038202, \n \"printTime\": 11359.462301015854, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/noha-kratsi.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/noha-kratsi.gcode\"\n }, \n \"size\": 4775982, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 11359.462301015854\n }, \n \"lastPrintTime\": {\n \"_default\": 11359.462301015854\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1464620255, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 11398.550506420732, \n \"filament\": {\n \"tool0\": {\n \"length\": 8788.88375, \n \"volume\": 58.05232223829053\n }\n }\n }, \n \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n \"links\": [], \n \"name\": \"hodorstop.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1469099651.292224, \n \"printTime\": 14587.552161931992, \n \"success\": true\n }, \n \"success\": 12\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n }, \n \"size\": 5894046, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 14459.99043494463\n }, \n \"lastPrintTime\": {\n \"_default\": 14587.552161931992\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1457777056, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4210.9288130150535, \n \"filament\": {\n \"tool0\": {\n \"length\": 3446.56794, \n \"volume\": 23.08035200848913\n }\n }\n }, \n \"hash\": \"01bea07d540b053a3d5f1b0ec45f346b34525323\", \n \"links\": [], \n \"name\": \"vicko_mini.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 4, \n \"last\": {\n \"date\": 1457810594.271455, \n \"printTime\": 5053.565083026886, \n \"success\": true\n }, \n \"success\": 2\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/vicko_mini.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/vicko_mini.gcode\"\n }, \n \"size\": 932353, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 5045.5501799583435\n }, \n \"lastPrintTime\": {\n \"_default\": 5053.565083026886\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468840568, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 2137.5632077942078, \n \"filament\": {\n \"tool0\": {\n \"length\": 1305.99734, \n \"volume\": 8.626371741921183\n }\n }\n }, \n \"hash\": \"fe8265ba58a1e8612e5018feb3957f47c76b413c\", \n \"links\": [], \n \"name\": \"raspberri_pi_camera_case.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468847762.928149, \n \"printTime\": 3292.3299810886383, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/raspberri_pi_camera_case.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/raspberri_pi_camera_case.gcode\"\n }, \n \"size\": 982191, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 3292.3299810886383\n }, \n \"lastPrintTime\": {\n \"_default\": 3292.3299810886383\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1466861811, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4723.454013809236, \n \"filament\": {\n \"tool0\": {\n \"length\": 3107.0064, \n \"volume\": 20.80643778187892\n }\n }\n }, \n \"hash\": \"59b88eae5910e6da6b9153bb43b0dfaadbcaf8cb\", \n \"links\": [], \n \"name\": \"T3DD_heatbed-cable-holder.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/T3DD_heatbed-cable-holder.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/T3DD_heatbed-cable-holder.gcode\"\n }, \n \"size\": 2682616, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456934033, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7080.918206109699, \n \"filament\": {\n \"tool0\": {\n \"length\": 4333.77106, \n \"volume\": 28.625418339626794\n }\n }\n }, \n \"hash\": \"5b1e955d996937a40f8fc4005fff8dc084130610\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_4_cut_part_0.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456942767.80793, \n \"printTime\": 8726.527762889862, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\"\n }, \n \"size\": 7158038, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8726.527762889862\n }, \n \"lastPrintTime\": {\n \"_default\": 8726.527762889862\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1457019764, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7044.199031518945, \n \"filament\": {\n \"tool0\": {\n \"length\": 4312.76324, \n \"volume\": 28.48665751733648\n }\n }\n }, \n \"hash\": \"9e717ce25c52d3573f271dbe7a92e77616de931d\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_4_cut_part_2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1457028453.545459, \n \"printTime\": 8680.590276002884, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\"\n }, \n \"size\": 6553749, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8680.590276002884\n }, \n \"lastPrintTime\": {\n \"_default\": 8680.590276002884\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455279961, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 11421.749939285224, \n \"filament\": {\n \"tool0\": {\n \"length\": 15050.77341999927, \n \"volume\": 96.01485251494636\n }\n }\n }, \n \"hash\": \"9a40a7a5987ac37623b0036dbbfb57ededb4fe10\", \n \"links\": [], \n \"name\": \"noha.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455293400.102627, \n \"printTime\": 13428.283998966217, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/noha.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/noha.gcode\"\n }, \n \"size\": 5784172, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 13428.283998966217\n }, \n \"lastPrintTime\": {\n \"_default\": 13428.283998966217\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468571668, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6003.6333479066525, \n \"filament\": {\n \"tool0\": {\n \"length\": 3875.82692, \n \"volume\": 24.725437006630376\n }\n }\n }, \n \"hash\": \"44389035aa7dd2f140ff2bcd4efeca2441f7e5b8\", \n \"links\": [], \n \"name\": \"zakladna_v2_ABS.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468578908.095119, \n \"printTime\": 7071.251595020294, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/zakladna_v2_ABS.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/zakladna_v2_ABS.gcode\"\n }, \n \"size\": 260240, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 7071.251595020294\n }, \n \"lastPrintTime\": {\n \"_default\": 7071.251595020294\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468240729, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 2376.2921410902704, \n \"filament\": {\n \"tool0\": {\n \"length\": 1493.94965, \n \"volume\": 9.867834068186571\n }\n }\n }, \n \"hash\": \"2002616167e75c84dfb26fd58600e344b3e7607c\", \n \"links\": [], \n \"name\": \"bulbasaur_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468244416.955418, \n \"printTime\": 3644.9868030548096, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/bulbasaur_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/bulbasaur_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1117144, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 3644.9868030548096\n }, \n \"lastPrintTime\": {\n \"_default\": 3644.9868030548096\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468007005, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7335.829037641681, \n \"filament\": {\n \"tool0\": {\n \"length\": 5825.47787, \n \"volume\": 37.16303361353512\n }\n }\n }, \n \"hash\": \"dfc4c579fb34ad80a21d18d1b96e7668f00c5916\", \n \"links\": [], \n \"name\": \"x-ends-v3.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468017269.467861, \n \"printTime\": 10232.5068359375, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends-v3.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends-v3.gcode\"\n }, \n \"size\": 6609807, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 10232.5068359375\n }, \n \"lastPrintTime\": {\n \"_default\": 10232.5068359375\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1461501912, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 821.2976320343308, \n \"filament\": {\n \"tool0\": {\n \"length\": 317.07501, \n \"volume\": 2.1671847107913633\n }\n }\n }, \n \"hash\": \"44f90e6139369d4a0e09a580a74c93eb0566185d\", \n \"links\": [], \n \"name\": \"velka-mala-rucicka2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1461503879.672503, \n \"printTime\": 1751.5514709949493, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/velka-mala-rucicka2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/velka-mala-rucicka2.gcode\"\n }, \n \"size\": 524261, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 1751.5514709949493\n }, \n \"lastPrintTime\": {\n \"_default\": 1751.5514709949493\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1466523483, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 13054.204115720351, \n \"filament\": {\n \"tool0\": {\n \"length\": 9774.22276, \n \"volume\": 64.56068204251233\n }\n }\n }, \n \"hash\": \"9ed85be9371f24555bac16f0904dc658af728f5b\", \n \"links\": [], \n \"name\": \"T3DD_corner.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1466539900.509135, \n \"printTime\": 16407.55785703659, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/T3DD_corner.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/T3DD_corner.gcode\"\n }, \n \"size\": 3562102, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 16407.55785703659\n }, \n \"lastPrintTime\": {\n \"_default\": 16407.55785703659\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468235053, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3382.0709245561943, \n \"filament\": {\n \"tool0\": {\n \"length\": 1243.41092, \n \"volume\": 8.212976011026347\n }\n }\n }, \n \"hash\": \"6a940bb09887079990c7764fb193b141266dfccb\", \n \"links\": [], \n \"name\": \"pikachu_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468239964.589097, \n \"printTime\": 4478.840677976608, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/pikachu_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/pikachu_1gen_flowalistik.gcode\"\n }, \n \"size\": 907576, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4478.840677976608\n }, \n \"lastPrintTime\": {\n \"_default\": 4478.840677976608\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456857774, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 17924.17838241675, \n \"filament\": {\n \"tool0\": {\n \"length\": 12556.10783000007, \n \"volume\": 82.93558528475097\n }\n }\n }, \n \"hash\": \"2d97c5ec32047b94719c0de8b9b14b536a611459\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_0_cut_part_0.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456880001.505434, \n \"printTime\": 22179.878684043884, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\"\n }, \n \"size\": 7182441, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 22179.878684043884\n }, \n \"lastPrintTime\": {\n \"_default\": 22179.878684043884\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468475478, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7392.4177776230335, \n \"filament\": {\n \"tool0\": {\n \"length\": 5868.58725, \n \"volume\": 37.43804544496769\n }\n }\n }, \n \"hash\": \"fcbb99955c6bbac8aecc89db7e0f4aed9d8f399f\", \n \"links\": [], \n \"name\": \"x-ends-v4.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468486094.9666, \n \"printTime\": 10390.446494102478, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends-v4.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends-v4.gcode\"\n }, \n \"size\": 6727045, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 10390.446494102478\n }, \n \"lastPrintTime\": {\n \"_default\": 10390.446494102478\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456759729, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 17640.509256322912, \n \"filament\": {\n \"tool0\": {\n \"length\": 10791.372739999977, \n \"volume\": 71.2791596197848\n }\n }\n }, \n \"hash\": \"5761a9ddd585f984cfcc5c6fb437273df9c12f9f\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_1.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1456782401.402252, \n \"printTime\": 21835.19486093521, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_1.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_1.gcode\"\n }, \n \"size\": 8470067, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 21835.19486093521\n }, \n \"lastPrintTime\": {\n \"_default\": 21835.19486093521\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1459766961, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 32171.697852568475, \n \"filament\": {\n \"tool0\": {\n \"length\": 11961.890139999727, \n \"volume\": 80.10421959593491\n }\n }\n }, \n \"hash\": \"aec7009c1e084475aa0bbf1c0c53d49e83b6fd33\", \n \"links\": [], \n \"name\": \"model.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1460421790.410203, \n \"printTime\": 36656.69072198868, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/model.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/model.gcode\"\n }, \n \"size\": 25775736, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 36656.69072198868\n }, \n \"lastPrintTime\": {\n \"_default\": 36656.69072198868\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1469279660, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3171.9563675157638, \n \"filament\": {\n \"tool0\": {\n \"length\": 2337.00828, \n \"volume\": 14.908702633995224\n }\n }\n }, \n \"hash\": \"424c9be691bb575ad1bb3bdf67d5f7a3074afb48\", \n \"links\": [], \n \"name\": \"y-LM8UU-holder_4.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1469284653.173205, \n \"printTime\": 4819.989939928055, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/y-LM8UU-holder_4.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/y-LM8UU-holder_4.gcode\"\n }, \n \"size\": 1416246, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4819.989939928055\n }, \n \"lastPrintTime\": {\n \"_default\": 4819.989939928055\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1458140856, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 12733.419195229038, \n \"filament\": {\n \"tool0\": {\n \"length\": 8080.14935, \n \"volume\": 56.73507668108169\n }\n }\n }, \n \"hash\": \"7cf7bd2d7634a49567f5f8943cdbef760f95ce17\", \n \"links\": [], \n \"name\": \"nxops-monolith_v30_(repaired).gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1458155597.625873, \n \"printTime\": 14485.237243175507, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/nxops-monolith_v30_(repaired).gcode\", \n \"resource\": \"http://printer15.local/api/files/local/nxops-monolith_v30_%28repaired%29.gcode\"\n }, \n \"size\": 4650457, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 14485.237243175507\n }, \n \"lastPrintTime\": {\n \"_default\": 14485.237243175507\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1460374886, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7477.806584565628, \n \"filament\": {\n \"tool0\": {\n \"length\": 4234.5693, \n \"volume\": 27.970171017903425\n }\n }\n }, \n \"hash\": \"3af0f6cd898a80fe7e0b13ab7188e20da6b5baf0\", \n \"links\": [], \n \"name\": \"SUMA_LOGO.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1460385068.997483, \n \"printTime\": 9054.055355072021, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/SUMA_LOGO.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/SUMA_LOGO.gcode\"\n }, \n \"size\": 3227012, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 9054.055355072021\n }, \n \"lastPrintTime\": {\n \"_default\": 9054.055355072021\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468244878, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3196.1972424692062, \n \"filament\": {\n \"tool0\": {\n \"length\": 1298.93986, \n \"volume\": 8.57975568522908\n }\n }\n }, \n \"hash\": \"b7d483a4cf2532b60efcb3d931eacfeb3e541d16\", \n \"links\": [], \n \"name\": \"squirtle_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468249184.344852, \n \"printTime\": 4300.201224088669, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/squirtle_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/squirtle_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1050215, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4300.201224088669\n }, \n \"lastPrintTime\": {\n \"_default\": 4300.201224088669\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1467876827, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4619.034822528971, \n \"filament\": {\n \"tool0\": {\n \"length\": 5919.10692, \n \"volume\": 37.76033045509936\n }\n }\n }, \n \"hash\": \"2ec2acb401a3fbb4d55672a0945cf042d1866951\", \n \"links\": [], \n \"name\": \"x-ends.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1467884012.536495, \n \"printTime\": 6892.582817077637, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends.gcode\"\n }, \n \"size\": 4353772, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 6892.582817077637\n }, \n \"lastPrintTime\": {\n \"_default\": 6892.582817077637\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1467957621, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6026.925320744925, \n \"filament\": {\n \"tool0\": {\n \"length\": 7393.03772, \n \"volume\": 47.163119563012444\n }\n }\n }, \n \"hash\": \"5923adeaa0ba3085903dea30951524d43401acdf\", \n \"links\": [], \n \"name\": \"protos_parts.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1467966495.813609, \n \"printTime\": 8831.31046295166, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/protos_parts.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/protos_parts.gcode\"\n }, \n \"size\": 5218916, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8831.31046295166\n }, \n \"lastPrintTime\": {\n \"_default\": 8831.31046295166\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468227636, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3465.3969094418912, \n \"filament\": {\n \"tool0\": {\n \"length\": 1197.56591, \n \"volume\": 7.910160617258321\n }\n }\n }, \n \"hash\": \"28069e0e6813949c3e106d4e920556e1bb09300c\", \n \"links\": [], \n \"name\": \"charmander_brim_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468232156.867724, \n \"printTime\": 4517.265386104584, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/charmander_brim_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/charmander_brim_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1056998, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4517.265386104584\n }, \n \"lastPrintTime\": {\n \"_default\": 4517.265386104584\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455531969, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3331.013938349298, \n \"filament\": {\n \"tool0\": {\n \"length\": 2432.72171, \n \"volume\": 16.06860992159615\n }\n }\n }, \n \"hash\": \"1f2a8ec946a76a76f9c9df643f0df27c6af83864\", \n \"links\": [], \n \"name\": \"x1_carbon_onelink.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455537511.032959, \n \"printTime\": 4682.734326839447, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x1_carbon_onelink.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x1_carbon_onelink.gcode\"\n }, \n \"size\": 1049641, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4682.734326839447\n }, \n \"lastPrintTime\": {\n \"_default\": 4682.734326839447\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1469284019, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6588.450838748042, \n \"filament\": {\n \"tool0\": {\n \"length\": 5185.45593, \n \"volume\": 33.080079836968814\n }\n }\n }, \n \"hash\": \"fcfdd36224050b95a387d65a88a2dab3a912c612\", \n \"links\": [], \n \"name\": \"gregs-wade-filament-175.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1469293621.115723, \n \"printTime\": 8899.51149892807, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/gregs-wade-filament-175.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/gregs-wade-filament-175.gcode\"\n }, \n \"size\": 3460892, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8899.51149892807\n }, \n \"lastPrintTime\": {\n \"_default\": 8899.51149892807\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456924089, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 8237.121783042947, \n \"filament\": {\n \"tool0\": {\n \"length\": 3399.73047, \n \"volume\": 22.45589478502033\n }\n }\n }, \n \"hash\": \"7dfb84b69a305e22f5ff64c384f91c04204f2582\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456933981.866552, \n \"printTime\": 9888.78882098198, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\"\n }, \n \"size\": 4157254, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 9888.78882098198\n }, \n \"lastPrintTime\": {\n \"_default\": 9888.78882098198\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468840518, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 1904.3513916948775, \n \"filament\": {\n \"tool0\": {\n \"length\": 1590.97155, \n \"volume\": 10.508682981789644\n }\n }\n }, \n \"hash\": \"9586d7092c8dc2db6ca6d6a0883bcf5edf63cff6\", \n \"links\": [], \n \"name\": \"kanoepolo_karta.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468858300.161772, \n \"printTime\": 2953.3381559848785, \n \"success\": true\n }, \n \"success\": 3\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/kanoepolo_karta.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/kanoepolo_karta.gcode\"\n }, \n \"size\": 214834, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 2836.458710273107\n }, \n \"lastPrintTime\": {\n \"_default\": 2953.3381559848785\n }\n }, \n \"type\": \"machinecode\"\n }\n ], \n \"free\": 12721975296\n}" + }, + "headers": { + "Content-Length": [ + "31951" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/files" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json new file mode 100644 index 0000000..d48a070 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"files\": [\n {\n \"date\": 1463733114, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3625.7017746005045, \n \"filament\": {\n \"tool0\": {\n \"length\": 1366.44818, \n \"volume\": 8.717114849239637\n }\n }\n }, \n \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n \"links\": [], \n \"name\": \"plate2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1463738111.306265, \n \"printTime\": 4454.600942850113, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n }, \n \"size\": 1919950, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4454.600942850113\n }, \n \"lastPrintTime\": {\n \"_default\": 4454.600942850113\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455519473, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 9648.473941059889, \n \"filament\": {\n \"tool0\": {\n \"length\": 12568.026009999172, \n \"volume\": 80.1764221731363\n }\n }\n }, \n \"hash\": \"2dd3898e6435fea50938ceb3350fbfc32348765a\", \n \"links\": [], \n \"name\": \"noha-kratsi.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455530836.038202, \n \"printTime\": 11359.462301015854, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/noha-kratsi.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/noha-kratsi.gcode\"\n }, \n \"size\": 4775982, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 11359.462301015854\n }, \n \"lastPrintTime\": {\n \"_default\": 11359.462301015854\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1464620255, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 11398.550506420732, \n \"filament\": {\n \"tool0\": {\n \"length\": 8788.88375, \n \"volume\": 58.05232223829053\n }\n }\n }, \n \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n \"links\": [], \n \"name\": \"hodorstop.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1469099651.292224, \n \"printTime\": 14587.552161931992, \n \"success\": true\n }, \n \"success\": 12\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n }, \n \"size\": 5894046, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 14459.99043494463\n }, \n \"lastPrintTime\": {\n \"_default\": 14587.552161931992\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1457777056, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4210.9288130150535, \n \"filament\": {\n \"tool0\": {\n \"length\": 3446.56794, \n \"volume\": 23.08035200848913\n }\n }\n }, \n \"hash\": \"01bea07d540b053a3d5f1b0ec45f346b34525323\", \n \"links\": [], \n \"name\": \"vicko_mini.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 4, \n \"last\": {\n \"date\": 1457810594.271455, \n \"printTime\": 5053.565083026886, \n \"success\": true\n }, \n \"success\": 2\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/vicko_mini.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/vicko_mini.gcode\"\n }, \n \"size\": 932353, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 5045.5501799583435\n }, \n \"lastPrintTime\": {\n \"_default\": 5053.565083026886\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468840568, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 2137.5632077942078, \n \"filament\": {\n \"tool0\": {\n \"length\": 1305.99734, \n \"volume\": 8.626371741921183\n }\n }\n }, \n \"hash\": \"fe8265ba58a1e8612e5018feb3957f47c76b413c\", \n \"links\": [], \n \"name\": \"raspberri_pi_camera_case.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468847762.928149, \n \"printTime\": 3292.3299810886383, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/raspberri_pi_camera_case.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/raspberri_pi_camera_case.gcode\"\n }, \n \"size\": 982191, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 3292.3299810886383\n }, \n \"lastPrintTime\": {\n \"_default\": 3292.3299810886383\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1466861811, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4723.454013809236, \n \"filament\": {\n \"tool0\": {\n \"length\": 3107.0064, \n \"volume\": 20.80643778187892\n }\n }\n }, \n \"hash\": \"59b88eae5910e6da6b9153bb43b0dfaadbcaf8cb\", \n \"links\": [], \n \"name\": \"T3DD_heatbed-cable-holder.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/T3DD_heatbed-cable-holder.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/T3DD_heatbed-cable-holder.gcode\"\n }, \n \"size\": 2682616, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456934033, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7080.918206109699, \n \"filament\": {\n \"tool0\": {\n \"length\": 4333.77106, \n \"volume\": 28.625418339626794\n }\n }\n }, \n \"hash\": \"5b1e955d996937a40f8fc4005fff8dc084130610\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_4_cut_part_0.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456942767.80793, \n \"printTime\": 8726.527762889862, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\"\n }, \n \"size\": 7158038, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8726.527762889862\n }, \n \"lastPrintTime\": {\n \"_default\": 8726.527762889862\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1457019764, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7044.199031518945, \n \"filament\": {\n \"tool0\": {\n \"length\": 4312.76324, \n \"volume\": 28.48665751733648\n }\n }\n }, \n \"hash\": \"9e717ce25c52d3573f271dbe7a92e77616de931d\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_4_cut_part_2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1457028453.545459, \n \"printTime\": 8680.590276002884, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\"\n }, \n \"size\": 6553749, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8680.590276002884\n }, \n \"lastPrintTime\": {\n \"_default\": 8680.590276002884\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455279961, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 11421.749939285224, \n \"filament\": {\n \"tool0\": {\n \"length\": 15050.77341999927, \n \"volume\": 96.01485251494636\n }\n }\n }, \n \"hash\": \"9a40a7a5987ac37623b0036dbbfb57ededb4fe10\", \n \"links\": [], \n \"name\": \"noha.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455293400.102627, \n \"printTime\": 13428.283998966217, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/noha.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/noha.gcode\"\n }, \n \"size\": 5784172, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 13428.283998966217\n }, \n \"lastPrintTime\": {\n \"_default\": 13428.283998966217\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468571668, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6003.6333479066525, \n \"filament\": {\n \"tool0\": {\n \"length\": 3875.82692, \n \"volume\": 24.725437006630376\n }\n }\n }, \n \"hash\": \"44389035aa7dd2f140ff2bcd4efeca2441f7e5b8\", \n \"links\": [], \n \"name\": \"zakladna_v2_ABS.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468578908.095119, \n \"printTime\": 7071.251595020294, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/zakladna_v2_ABS.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/zakladna_v2_ABS.gcode\"\n }, \n \"size\": 260240, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 7071.251595020294\n }, \n \"lastPrintTime\": {\n \"_default\": 7071.251595020294\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468240729, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 2376.2921410902704, \n \"filament\": {\n \"tool0\": {\n \"length\": 1493.94965, \n \"volume\": 9.867834068186571\n }\n }\n }, \n \"hash\": \"2002616167e75c84dfb26fd58600e344b3e7607c\", \n \"links\": [], \n \"name\": \"bulbasaur_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468244416.955418, \n \"printTime\": 3644.9868030548096, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/bulbasaur_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/bulbasaur_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1117144, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 3644.9868030548096\n }, \n \"lastPrintTime\": {\n \"_default\": 3644.9868030548096\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468007005, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7335.829037641681, \n \"filament\": {\n \"tool0\": {\n \"length\": 5825.47787, \n \"volume\": 37.16303361353512\n }\n }\n }, \n \"hash\": \"dfc4c579fb34ad80a21d18d1b96e7668f00c5916\", \n \"links\": [], \n \"name\": \"x-ends-v3.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468017269.467861, \n \"printTime\": 10232.5068359375, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends-v3.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends-v3.gcode\"\n }, \n \"size\": 6609807, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 10232.5068359375\n }, \n \"lastPrintTime\": {\n \"_default\": 10232.5068359375\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1461501912, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 821.2976320343308, \n \"filament\": {\n \"tool0\": {\n \"length\": 317.07501, \n \"volume\": 2.1671847107913633\n }\n }\n }, \n \"hash\": \"44f90e6139369d4a0e09a580a74c93eb0566185d\", \n \"links\": [], \n \"name\": \"velka-mala-rucicka2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1461503879.672503, \n \"printTime\": 1751.5514709949493, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/velka-mala-rucicka2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/velka-mala-rucicka2.gcode\"\n }, \n \"size\": 524261, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 1751.5514709949493\n }, \n \"lastPrintTime\": {\n \"_default\": 1751.5514709949493\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1466523483, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 13054.204115720351, \n \"filament\": {\n \"tool0\": {\n \"length\": 9774.22276, \n \"volume\": 64.56068204251233\n }\n }\n }, \n \"hash\": \"9ed85be9371f24555bac16f0904dc658af728f5b\", \n \"links\": [], \n \"name\": \"T3DD_corner.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1466539900.509135, \n \"printTime\": 16407.55785703659, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/T3DD_corner.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/T3DD_corner.gcode\"\n }, \n \"size\": 3562102, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 16407.55785703659\n }, \n \"lastPrintTime\": {\n \"_default\": 16407.55785703659\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468235053, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3382.0709245561943, \n \"filament\": {\n \"tool0\": {\n \"length\": 1243.41092, \n \"volume\": 8.212976011026347\n }\n }\n }, \n \"hash\": \"6a940bb09887079990c7764fb193b141266dfccb\", \n \"links\": [], \n \"name\": \"pikachu_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468239964.589097, \n \"printTime\": 4478.840677976608, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/pikachu_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/pikachu_1gen_flowalistik.gcode\"\n }, \n \"size\": 907576, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4478.840677976608\n }, \n \"lastPrintTime\": {\n \"_default\": 4478.840677976608\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456857774, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 17924.17838241675, \n \"filament\": {\n \"tool0\": {\n \"length\": 12556.10783000007, \n \"volume\": 82.93558528475097\n }\n }\n }, \n \"hash\": \"2d97c5ec32047b94719c0de8b9b14b536a611459\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_0_cut_part_0.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456880001.505434, \n \"printTime\": 22179.878684043884, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\"\n }, \n \"size\": 7182441, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 22179.878684043884\n }, \n \"lastPrintTime\": {\n \"_default\": 22179.878684043884\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468475478, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7392.4177776230335, \n \"filament\": {\n \"tool0\": {\n \"length\": 5868.58725, \n \"volume\": 37.43804544496769\n }\n }\n }, \n \"hash\": \"fcbb99955c6bbac8aecc89db7e0f4aed9d8f399f\", \n \"links\": [], \n \"name\": \"x-ends-v4.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468486094.9666, \n \"printTime\": 10390.446494102478, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends-v4.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends-v4.gcode\"\n }, \n \"size\": 6727045, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 10390.446494102478\n }, \n \"lastPrintTime\": {\n \"_default\": 10390.446494102478\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456759729, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 17640.509256322912, \n \"filament\": {\n \"tool0\": {\n \"length\": 10791.372739999977, \n \"volume\": 71.2791596197848\n }\n }\n }, \n \"hash\": \"5761a9ddd585f984cfcc5c6fb437273df9c12f9f\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_1.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1456782401.402252, \n \"printTime\": 21835.19486093521, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_1.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_1.gcode\"\n }, \n \"size\": 8470067, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 21835.19486093521\n }, \n \"lastPrintTime\": {\n \"_default\": 21835.19486093521\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1459766961, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 32171.697852568475, \n \"filament\": {\n \"tool0\": {\n \"length\": 11961.890139999727, \n \"volume\": 80.10421959593491\n }\n }\n }, \n \"hash\": \"aec7009c1e084475aa0bbf1c0c53d49e83b6fd33\", \n \"links\": [], \n \"name\": \"model.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1460421790.410203, \n \"printTime\": 36656.69072198868, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/model.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/model.gcode\"\n }, \n \"size\": 25775736, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 36656.69072198868\n }, \n \"lastPrintTime\": {\n \"_default\": 36656.69072198868\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1469279660, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3171.9563675157638, \n \"filament\": {\n \"tool0\": {\n \"length\": 2337.00828, \n \"volume\": 14.908702633995224\n }\n }\n }, \n \"hash\": \"424c9be691bb575ad1bb3bdf67d5f7a3074afb48\", \n \"links\": [], \n \"name\": \"y-LM8UU-holder_4.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1469284653.173205, \n \"printTime\": 4819.989939928055, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/y-LM8UU-holder_4.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/y-LM8UU-holder_4.gcode\"\n }, \n \"size\": 1416246, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4819.989939928055\n }, \n \"lastPrintTime\": {\n \"_default\": 4819.989939928055\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1458140856, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 12733.419195229038, \n \"filament\": {\n \"tool0\": {\n \"length\": 8080.14935, \n \"volume\": 56.73507668108169\n }\n }\n }, \n \"hash\": \"7cf7bd2d7634a49567f5f8943cdbef760f95ce17\", \n \"links\": [], \n \"name\": \"nxops-monolith_v30_(repaired).gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1458155597.625873, \n \"printTime\": 14485.237243175507, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/nxops-monolith_v30_(repaired).gcode\", \n \"resource\": \"http://printer15.local/api/files/local/nxops-monolith_v30_%28repaired%29.gcode\"\n }, \n \"size\": 4650457, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 14485.237243175507\n }, \n \"lastPrintTime\": {\n \"_default\": 14485.237243175507\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1460374886, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 7477.806584565628, \n \"filament\": {\n \"tool0\": {\n \"length\": 4234.5693, \n \"volume\": 27.970171017903425\n }\n }\n }, \n \"hash\": \"3af0f6cd898a80fe7e0b13ab7188e20da6b5baf0\", \n \"links\": [], \n \"name\": \"SUMA_LOGO.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1460385068.997483, \n \"printTime\": 9054.055355072021, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/SUMA_LOGO.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/SUMA_LOGO.gcode\"\n }, \n \"size\": 3227012, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 9054.055355072021\n }, \n \"lastPrintTime\": {\n \"_default\": 9054.055355072021\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468244878, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3196.1972424692062, \n \"filament\": {\n \"tool0\": {\n \"length\": 1298.93986, \n \"volume\": 8.57975568522908\n }\n }\n }, \n \"hash\": \"b7d483a4cf2532b60efcb3d931eacfeb3e541d16\", \n \"links\": [], \n \"name\": \"squirtle_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468249184.344852, \n \"printTime\": 4300.201224088669, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/squirtle_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/squirtle_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1050215, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4300.201224088669\n }, \n \"lastPrintTime\": {\n \"_default\": 4300.201224088669\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1467876827, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 4619.034822528971, \n \"filament\": {\n \"tool0\": {\n \"length\": 5919.10692, \n \"volume\": 37.76033045509936\n }\n }\n }, \n \"hash\": \"2ec2acb401a3fbb4d55672a0945cf042d1866951\", \n \"links\": [], \n \"name\": \"x-ends.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1467884012.536495, \n \"printTime\": 6892.582817077637, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x-ends.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x-ends.gcode\"\n }, \n \"size\": 4353772, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 6892.582817077637\n }, \n \"lastPrintTime\": {\n \"_default\": 6892.582817077637\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1467957621, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6026.925320744925, \n \"filament\": {\n \"tool0\": {\n \"length\": 7393.03772, \n \"volume\": 47.163119563012444\n }\n }\n }, \n \"hash\": \"5923adeaa0ba3085903dea30951524d43401acdf\", \n \"links\": [], \n \"name\": \"protos_parts.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1467966495.813609, \n \"printTime\": 8831.31046295166, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/protos_parts.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/protos_parts.gcode\"\n }, \n \"size\": 5218916, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8831.31046295166\n }, \n \"lastPrintTime\": {\n \"_default\": 8831.31046295166\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468227636, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3465.3969094418912, \n \"filament\": {\n \"tool0\": {\n \"length\": 1197.56591, \n \"volume\": 7.910160617258321\n }\n }\n }, \n \"hash\": \"28069e0e6813949c3e106d4e920556e1bb09300c\", \n \"links\": [], \n \"name\": \"charmander_brim_starter_1gen_flowalistik.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468232156.867724, \n \"printTime\": 4517.265386104584, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/charmander_brim_starter_1gen_flowalistik.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/charmander_brim_starter_1gen_flowalistik.gcode\"\n }, \n \"size\": 1056998, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4517.265386104584\n }, \n \"lastPrintTime\": {\n \"_default\": 4517.265386104584\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1455531969, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3331.013938349298, \n \"filament\": {\n \"tool0\": {\n \"length\": 2432.72171, \n \"volume\": 16.06860992159615\n }\n }\n }, \n \"hash\": \"1f2a8ec946a76a76f9c9df643f0df27c6af83864\", \n \"links\": [], \n \"name\": \"x1_carbon_onelink.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1455537511.032959, \n \"printTime\": 4682.734326839447, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/x1_carbon_onelink.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/x1_carbon_onelink.gcode\"\n }, \n \"size\": 1049641, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4682.734326839447\n }, \n \"lastPrintTime\": {\n \"_default\": 4682.734326839447\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1469284019, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 6588.450838748042, \n \"filament\": {\n \"tool0\": {\n \"length\": 5185.45593, \n \"volume\": 33.080079836968814\n }\n }\n }, \n \"hash\": \"fcfdd36224050b95a387d65a88a2dab3a912c612\", \n \"links\": [], \n \"name\": \"gregs-wade-filament-175.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1469293621.115723, \n \"printTime\": 8899.51149892807, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/gregs-wade-filament-175.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/gregs-wade-filament-175.gcode\"\n }, \n \"size\": 3460892, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 8899.51149892807\n }, \n \"lastPrintTime\": {\n \"_default\": 8899.51149892807\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1456924089, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 8237.121783042947, \n \"filament\": {\n \"tool0\": {\n \"length\": 3399.73047, \n \"volume\": 22.45589478502033\n }\n }\n }, \n \"hash\": \"7dfb84b69a305e22f5ff64c384f91c04204f2582\", \n \"links\": [], \n \"name\": \"Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1456933981.866552, \n \"printTime\": 9888.78882098198, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\"\n }, \n \"size\": 4157254, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 9888.78882098198\n }, \n \"lastPrintTime\": {\n \"_default\": 9888.78882098198\n }\n }, \n \"type\": \"machinecode\"\n }, \n {\n \"date\": 1468840518, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 1904.3513916948775, \n \"filament\": {\n \"tool0\": {\n \"length\": 1590.97155, \n \"volume\": 10.508682981789644\n }\n }\n }, \n \"hash\": \"9586d7092c8dc2db6ca6d6a0883bcf5edf63cff6\", \n \"links\": [], \n \"name\": \"kanoepolo_karta.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1468858300.161772, \n \"printTime\": 2953.3381559848785, \n \"success\": true\n }, \n \"success\": 3\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/kanoepolo_karta.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/kanoepolo_karta.gcode\"\n }, \n \"size\": 214834, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 2836.458710273107\n }, \n \"lastPrintTime\": {\n \"_default\": 2953.3381559848785\n }\n }, \n \"type\": \"machinecode\"\n }\n ], \n \"free\": 12721975296\n}" + }, + "headers": { + "Content-Length": [ + "31951" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/files/local" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json new file mode 100644 index 0000000..6e74558 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/sdcard" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"files\": []\n}" + }, + "headers": { + "Content-Length": [ + "17" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/files/sdcard" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json new file mode 100644 index 0000000..f6efea2 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:59:43", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3nw.Nw7AqkN0M9aZ9PYlmtjT8f5OpyU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:59:44", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"flowrate\", \"factor\": 1.0}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3nw.Nw7AqkN0M9aZ9PYlmtjT8f5OpyU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3oA.WNfQEILPwegguj5qNiMfVkdRVXA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json new file mode 100644 index 0000000..cf4419a --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json @@ -0,0 +1,138 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-04-24T13:01:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.10\"\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "41" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-IuQ.aPNYxgGOvs6uIBlX0QXk7bzqUFQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2017-04-24T13:01:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-IuQ.aPNYxgGOvs6uIBlX0QXk7bzqUFQ" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "5047" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-IuQ.qfWDMAN8ablLVSwYpb8-VhgTn9E; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json new file mode 100644 index 0000000..930e4c5 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T09:37:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T09:37:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"home\", \"axes\": [\"x\", \"y\", \"z\"]}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "44" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/printhead" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/printhead" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json new file mode 100644 index 0000000..f050995 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T09:38:52", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T09:38:52", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"home\", \"axes\": [\"x\", \"y\"]}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "39" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/printhead" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/printhead" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json new file mode 100644 index 0000000..7a4dcfb --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json @@ -0,0 +1,179 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/local/hodorstop.gcode" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"date\": 1464620255, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 11398.550506420732, \n \"filament\": {\n \"tool0\": {\n \"length\": 8788.88375, \n \"volume\": 58.05232223829053\n }\n }\n }, \n \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n \"links\": [], \n \"name\": \"hodorstop.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 1, \n \"last\": {\n \"date\": 1469099651.292224, \n \"printTime\": 14587.552161931992, \n \"success\": true\n }, \n \"success\": 12\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n }, \n \"size\": 5894046, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 14459.99043494463\n }, \n \"lastPrintTime\": {\n \"_default\": 14587.552161931992\n }\n }, \n \"type\": \"machinecode\"\n}" + }, + "headers": { + "Content-Length": [ + "890" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/files/local/hodorstop.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/local/plate2.gcode" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"date\": 1463733114, \n \"gcodeAnalysis\": {\n \"estimatedPrintTime\": 3625.7017746005045, \n \"filament\": {\n \"tool0\": {\n \"length\": 1366.44818, \n \"volume\": 8.717114849239637\n }\n }\n }, \n \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n \"links\": [], \n \"name\": \"plate2.gcode\", \n \"origin\": \"local\", \n \"prints\": {\n \"failure\": 0, \n \"last\": {\n \"date\": 1463738111.306265, \n \"printTime\": 4454.600942850113, \n \"success\": true\n }, \n \"success\": 1\n }, \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n }, \n \"size\": 1919950, \n \"statistics\": {\n \"averagePrintTime\": {\n \"_default\": 4454.600942850113\n }, \n \"lastPrintTime\": {\n \"_default\": 4454.600942850113\n }\n }, \n \"type\": \"machinecode\"\n}" + }, + "headers": { + "Content-Length": [ + "878" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/files/local/plate2.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json new file mode 100644 index 0000000..9722e31 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json @@ -0,0 +1,61 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "nope" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "Invalid API key" + }, + "headers": { + "Content-Length": [ + "15" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=eyJfaWQiOnsiIGIiOiJaVGMxTkRZNU1XWm1ORE5sTlRFeU1ERmpaVFJsTmpoa1pXTTJNMlUyWVRBPSJ9fQ.CnetBg.vtMrh7AJognkQw0TsmD2_6kM47k; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 401, + "message": "UNAUTHORIZED" + }, + "url": "http://printer15.local/api/version" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json new file mode 100644 index 0000000..1b8b5cf --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json @@ -0,0 +1,61 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:37", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBQ.2PM6OXJ6FpxqjXufEBpgrdM1yrw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json new file mode 100644 index 0000000..7ef3e1a --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T09:28:31", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T09:28:31", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"jog\", \"y\": 20}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "27" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/printhead" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/printhead" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json new file mode 100644 index 0000000..6309fd8 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T15:12:59", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T15:12:59", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/logs" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"files\": [\n {\n \"date\": 1452183342, \n \"name\": \"octoprint.log.2016-01-07\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-07\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-07\"\n }, \n \"size\": 4661\n }, \n {\n \"date\": 1466871995, \n \"name\": \"octoprint.log.2016-06-25\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-25\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-25\"\n }, \n \"size\": 3922\n }, \n {\n \"date\": 1457028455, \n \"name\": \"octoprint.log.2016-03-03\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-03\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-03\"\n }, \n \"size\": 131\n }, \n {\n \"date\": 1464188895, \n \"name\": \"octoprint.log.2016-05-25\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-25\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-25\"\n }, \n \"size\": 9603\n }, \n {\n \"date\": 1463403811, \n \"name\": \"octoprint.log.2016-05-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-16\"\n }, \n \"size\": 5318\n }, \n {\n \"date\": 1468856189, \n \"name\": \"octoprint.log.2016-07-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-18\"\n }, \n \"size\": 40856\n }, \n {\n \"date\": 1449765091, \n \"name\": \"octoprint.log.2015-12-10\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-10\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-10\"\n }, \n \"size\": 9699\n }, \n {\n \"date\": 1464634834, \n \"name\": \"octoprint.log.2016-05-30\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-30\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-30\"\n }, \n \"size\": 4623\n }, \n {\n \"date\": 1467960900, \n \"name\": \"octoprint.log.2016-07-07\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-07\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-07\"\n }, \n \"size\": 8934\n }, \n {\n \"date\": 1449161140, \n \"name\": \"octoprint.log.2015-12-03\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-03\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-03\"\n }, \n \"size\": 7404\n }, \n {\n \"date\": 1461509346, \n \"name\": \"octoprint.log.2016-04-24\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-24\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-24\"\n }, \n \"size\": 5287\n }, \n {\n \"date\": 1455805987, \n \"name\": \"octoprint.log.2016-02-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-18\"\n }, \n \"size\": 5444\n }, \n {\n \"date\": 1459780076, \n \"name\": \"octoprint.log.2016-04-04\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-04\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-04\"\n }, \n \"size\": 4403\n }, \n {\n \"date\": 1457961905, \n \"name\": \"octoprint.log.2016-03-13\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-13\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-13\"\n }, \n \"size\": 4428\n }, \n {\n \"date\": 1457803483, \n \"name\": \"octoprint.log.2016-03-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-11\"\n }, \n \"size\": 7732\n }, \n {\n \"date\": 1450369885, \n \"name\": \"octoprint.log.2015-12-17\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-17\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-17\"\n }, \n \"size\": 4761\n }, \n {\n \"date\": 1430955047, \n \"name\": \"plugin_pluginmanager_console.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/plugin_pluginmanager_console.log\", \n \"resource\": \"http://printer15.local/api/logs/plugin_pluginmanager_console.log\"\n }, \n \"size\": 0\n }, \n {\n \"date\": 1462785291, \n \"name\": \"octoprint.log.2016-05-09\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-09\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-09\"\n }, \n \"size\": 7176\n }, \n {\n \"date\": 1456932162, \n \"name\": \"octoprint.log.2016-03-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-01\"\n }, \n \"size\": 2913\n }, \n {\n \"date\": 1451992592, \n \"name\": \"octoprint.log.2016-01-05\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-05\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-05\"\n }, \n \"size\": 9045\n }, \n {\n \"date\": 1469113274, \n \"name\": \"octoprint.log.2016-07-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-20\"\n }, \n \"size\": 2111\n }, \n {\n \"date\": 1457019789, \n \"name\": \"octoprint.log.2016-03-02\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-02\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-02\"\n }, \n \"size\": 2026\n }, \n {\n \"date\": 1464008932, \n \"name\": \"octoprint.log.2016-05-23\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-23\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-23\"\n }, \n \"size\": 17258\n }, \n {\n \"date\": 1464958946, \n \"name\": \"octoprint.log.2016-06-02\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-02\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-02\"\n }, \n \"size\": 8299\n }, \n {\n \"date\": 1466435897, \n \"name\": \"octoprint.log.2016-06-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-20\"\n }, \n \"size\": 3132\n }, \n {\n \"date\": 1460713237, \n \"name\": \"octoprint.log.2016-04-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-15\"\n }, \n \"size\": 1613\n }, \n {\n \"date\": 1450178418, \n \"name\": \"octoprint.log.2015-12-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-15\"\n }, \n \"size\": 8050\n }, \n {\n \"date\": 1468601474, \n \"name\": \"octoprint.log.2016-07-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-15\"\n }, \n \"size\": 5512\n }, \n {\n \"date\": 1448817122, \n \"name\": \"octoprint.log.2015-11-29\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-11-29\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-11-29\"\n }, \n \"size\": 3928\n }, \n {\n \"date\": 1456761793, \n \"name\": \"octoprint.log.2016-02-29\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-29\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-29\"\n }, \n \"size\": 1212\n }, \n {\n \"date\": 1468673024, \n \"name\": \"octoprint.log.2016-07-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-16\"\n }, \n \"size\": 1092\n }, \n {\n \"date\": 1448968659, \n \"name\": \"octoprint.log.2015-12-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-01\"\n }, \n \"size\": 7411\n }, \n {\n \"date\": 1462357573, \n \"name\": \"octoprint.log.2016-05-04\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-04\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-04\"\n }, \n \"size\": 4022\n }, \n {\n \"date\": 1469458785, \n \"name\": \"octoprint.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log\"\n }, \n \"size\": 34987\n }, \n {\n \"date\": 1449571322, \n \"name\": \"octoprint.log.2015-12-08\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-08\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-08\"\n }, \n \"size\": 14509\n }, \n {\n \"date\": 1460617779, \n \"name\": \"octoprint.log.2016-04-14\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-14\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-14\"\n }, \n \"size\": 1880\n }, \n {\n \"date\": 1430955047, \n \"name\": \"plugin_cura_engine.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/plugin_cura_engine.log\", \n \"resource\": \"http://printer15.local/api/logs/plugin_cura_engine.log\"\n }, \n \"size\": 0\n }, \n {\n \"date\": 1463666797, \n \"name\": \"octoprint.log.2016-05-18\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-18\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-18\"\n }, \n \"size\": 2206\n }, \n {\n \"date\": 1455296267, \n \"name\": \"octoprint.log.2016-02-12\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-12\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-12\"\n }, \n \"size\": 4609\n }, \n {\n \"date\": 1468249188, \n \"name\": \"octoprint.log.2016-07-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-11\"\n }, \n \"size\": 5406\n }, \n {\n \"date\": 1465579069, \n \"name\": \"octoprint.log.2016-06-10\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-10\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-10\"\n }, \n \"size\": 3852\n }, \n {\n \"date\": 1461182807, \n \"name\": \"octoprint.log.2016-04-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-20\"\n }, \n \"size\": 4621\n }, \n {\n \"date\": 1461046943, \n \"name\": \"octoprint.log.2016-04-19\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-19\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-19\"\n }, \n \"size\": 1812\n }, \n {\n \"date\": 1468478597, \n \"name\": \"octoprint.log.2016-07-13\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-13\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-13\"\n }, \n \"size\": 5814\n }, \n {\n \"date\": 1467126645, \n \"name\": \"octoprint.log.2016-06-28\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-28\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-28\"\n }, \n \"size\": 13567\n }, \n {\n \"date\": 1457527305, \n \"name\": \"octoprint.log.2016-03-09\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-09\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-09\"\n }, \n \"size\": 1092\n }, \n {\n \"date\": 1469116625, \n \"name\": \"octoprint.log.2016-07-21\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-21\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-21\"\n }, \n \"size\": 103\n }, \n {\n \"date\": 1466607225, \n \"name\": \"octoprint.log.2016-06-21\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-21\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-21\"\n }, \n \"size\": 6104\n }, \n {\n \"date\": 1458141527, \n \"name\": \"octoprint.log.2016-03-16\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-16\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-16\"\n }, \n \"size\": 1221\n }, \n {\n \"date\": 1463735129, \n \"name\": \"octoprint.log.2016-05-20\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-20\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-20\"\n }, \n \"size\": 1511\n }, \n {\n \"date\": 1468017273, \n \"name\": \"octoprint.log.2016-07-08\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-08\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-08\"\n }, \n \"size\": 726\n }, \n {\n \"date\": 1455552620, \n \"name\": \"octoprint.log.2016-02-15\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-15\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-15\"\n }, \n \"size\": 6555\n }, \n {\n \"date\": 1467351966, \n \"name\": \"octoprint.log.2016-07-01\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-01\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-01\"\n }, \n \"size\": 1488\n }, \n {\n \"date\": 1430955026, \n \"name\": \"serial.log\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/serial.log\", \n \"resource\": \"http://printer15.local/api/logs/serial.log\"\n }, \n \"size\": 0\n }, \n {\n \"date\": 1469293624, \n \"name\": \"octoprint.log.2016-07-23\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-23\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-23\"\n }, \n \"size\": 4371\n }, \n {\n \"date\": 1466754065, \n \"name\": \"octoprint.log.2016-06-24\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-24\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-24\"\n }, \n \"size\": 10251\n }, \n {\n \"date\": 1430955240, \n \"name\": \"octoprint.log.2015-05-06\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-05-06\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-05-06\"\n }, \n \"size\": 7764\n }, \n {\n \"date\": 1460385147, \n \"name\": \"octoprint.log.2016-04-11\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-11\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-11\"\n }, \n \"size\": 6346\n }, \n {\n \"date\": 1465118151, \n \"name\": \"octoprint.log.2016-06-05\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-05\", \n \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-05\"\n }, \n \"size\": 1508\n }\n ], \n \"free\": 12721905664\n}" + }, + "headers": { + "Content-Length": [ + "17384" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/logs" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json new file mode 100644 index 0000000..1d737af --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"commands\": [\"G28 X\", \"G28 Y\"]}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "32" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/command" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/command" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json new file mode 100644 index 0000000..1d737af --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"commands\": [\"G28 X\", \"G28 Y\"]}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "32" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/command" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/command" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json new file mode 100644 index 0000000..a5094a6 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json @@ -0,0 +1,179 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/local/nietzsche.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "File not found on 'local': nietzsche.gcode" + }, + "headers": { + "Content-Length": [ + "42" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 404, + "message": "NOT FOUND" + }, + "url": "http://printer15.local/api/files/local/nietzsche.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:00:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/files/local/noexist.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "File not found on 'local': noexist.gcode" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 404, + "message": "NOT FOUND" + }, + "url": "http://printer15.local/api/files/local/noexist.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json new file mode 100644 index 0000000..f83ff20 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T16:09:08", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T16:09:08", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 25.3, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"tool0\": {\n \"actual\": 25.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "474" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json new file mode 100644 index 0000000..c9cc00e --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json @@ -0,0 +1,533 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T16:35:03", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.7, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"tool0\": {\n \"actual\": 24.3, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "474" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer" + } + }, + { + "recorded_at": "2016-07-25T16:35:03", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=sd" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.7, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"tool0\": {\n \"actual\": 24.3, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "439" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=sd" + } + }, + { + "recorded_at": "2016-07-25T16:35:03", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=temperature" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }\n}" + }, + "headers": { + "Content-Length": [ + "281" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=temperature" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=state" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.7, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"tool0\": {\n \"actual\": 24.3, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "229" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=state" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=sd%2Ctemperature" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }\n}" + }, + "headers": { + "Content-Length": [ + "246" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=sd%2Ctemperature" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=sd%2Cstate" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"temperature\": {\n \"bed\": {\n \"actual\": 24.7, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"tool0\": {\n \"actual\": 24.3, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "194" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=sd%2Cstate" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=temperature%2Cstate" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }\n}" + }, + "headers": { + "Content-Length": [ + "36" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=temperature%2Cstate" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T16:35:04", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?exclude=sd%2Ctemperature%2Cstate" + }, + "response": { + "body": { + "encoding": null, + "string": "{}" + }, + "headers": { + "Content-Length": [ + "2" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?exclude=sd%2Ctemperature%2Cstate" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json new file mode 100644 index 0000000..583c52f --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T16:41:47", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSyw.cxrHdtC6OZQxmK_q-p_0Hr53f10; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T16:41:48", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSyw.cxrHdtC6OZQxmK_q-p_0Hr53f10" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.6, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463404, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463409, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463414, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463419, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463424, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463429, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463434, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463439, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.4, \n \"target\": 0.0\n }, \n \"time\": 1469463444, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463449, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463454, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463459, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463464, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463469, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463474, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463479, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463484, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463489, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463494, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463499, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463504, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463509, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463514, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463519, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463524, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463529, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463534, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463539, \n \"tool0\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463544, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463549, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463554, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463559, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463564, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463569, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463574, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463579, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463584, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463589, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463594, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463599, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.3, \n \"target\": 0.0\n }, \n \"time\": 1469463604, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463609, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463614, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463619, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463624, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463629, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463634, \n \"tool0\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463639, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463644, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463649, \n \"tool0\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463654, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463659, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463664, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463670, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463675, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463680, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463685, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463690, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463695, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463700, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463705, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463710, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463715, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463720, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463725, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463730, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463735, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463740, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463745, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463750, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463755, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463760, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463765, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463770, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463775, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463780, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463785, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463790, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463795, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463800, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463805, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463810, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463815, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469463820, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463825, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463830, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463835, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463840, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463845, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463850, \n \"tool0\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469463855, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469463860, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463865, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469463870, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463875, \n \"tool0\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463880, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463885, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463890, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463895, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463900, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463905, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463910, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463915, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463920, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463925, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463930, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463935, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463940, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463945, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469463950, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469463955, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463960, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469463965, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469463970, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463975, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469463980, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469463985, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469463990, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469463995, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469464000, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464005, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464010, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469464015, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464020, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464025, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464030, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.2, \n \"target\": 0.0\n }, \n \"time\": 1469464035, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464040, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464045, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464050, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464055, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464060, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464065, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464070, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464075, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464080, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464085, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464090, \n \"tool0\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464095, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464100, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464105, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464111, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464116, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464121, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464126, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464131, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464136, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464141, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464146, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464151, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464156, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464161, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464166, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464171, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464176, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464181, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464186, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464191, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464196, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464201, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464206, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464211, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464216, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464221, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464226, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464231, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464236, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464241, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464246, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464251, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464256, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464261, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464266, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464271, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464276, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464281, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464286, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464291, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464296, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464301, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464306, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464311, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464316, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464321, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464326, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464331, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464336, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464341, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464346, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464351, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464356, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.1, \n \"target\": 0.0\n }, \n \"time\": 1469464361, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464366, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464381, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464381, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464381, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464386, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464391, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 25.0, \n \"target\": 0.0\n }, \n \"time\": 1469464406, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464406, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464406, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464416, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464416, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464421, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464430, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464431, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464436, \n \"tool0\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464441, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464449, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464451, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464461, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464466, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464471, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464476, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464481, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464486, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464491, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464496, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464501, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464506, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464511, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464516, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464521, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464526, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464531, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464536, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464541, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464546, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464551, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464556, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464561, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464566, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464571, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464576, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464581, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464586, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464591, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464596, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464601, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.9, \n \"target\": 0.0\n }, \n \"time\": 1469464606, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464611, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464616, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464621, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464626, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464631, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464636, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464641, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464646, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464651, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464656, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464661, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464666, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464671, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464676, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464681, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464686, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464691, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464696, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464701, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464706, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464711, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464716, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464721, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464726, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464731, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464736, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464741, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464746, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464751, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464756, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464761, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464766, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464771, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464776, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464781, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464786, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464791, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464796, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464801, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464806, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464811, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464816, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464821, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464826, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464831, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464836, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464841, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464846, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469464851, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464856, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464861, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469464866, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464871, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464876, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464882, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469464887, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464892, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464897, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469464902, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469464907, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.4, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "62597" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSzA.PZATeEUxLNle5dgBWgc_ueUJSdI; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?history=true" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json new file mode 100644 index 0000000..cca2498 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json @@ -0,0 +1,238 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T16:46:26", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?history=true&limit=1" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.4, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465182, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.1, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "704" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?history=true&limit=1" + } + }, + { + "recorded_at": "2016-07-25T16:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?history=true&limit=2" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.4, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465177, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465182, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.1, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "911" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?history=true&limit=2" + } + }, + { + "recorded_at": "2016-07-25T16:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T16:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer?history=true&limit=3" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"sd\": {\n \"ready\": false\n }, \n \"state\": {\n \"flags\": {\n \"closedOrError\": false, \n \"error\": false, \n \"operational\": true, \n \"paused\": false, \n \"printing\": false, \n \"ready\": true, \n \"sdReady\": false\n }, \n \"text\": \"Operational\"\n }, \n \"temperature\": {\n \"bed\": {\n \"actual\": 24.4, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465172, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465177, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465182, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.1, \n \"offset\": 0, \n \"target\": 0.0\n }\n }\n}" + }, + "headers": { + "Content-Length": [ + "1118" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer?history=true&limit=3" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json new file mode 100644 index 0000000..040b468 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:56:28", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:56:28", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"extrude\", \"amount\": -1}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "36" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json new file mode 100644 index 0000000..b8c1eb1 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:21:22", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"ready\": false\n}" + }, + "headers": { + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/sd" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"init\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "19" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/sd" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json new file mode 100644 index 0000000..f3deff8 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:21:22", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"ready\": false\n}" + }, + "headers": { + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/sd" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"refresh\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "22" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/sd" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json new file mode 100644 index 0000000..4431ffe --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:21:22", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"ready\": false\n}" + }, + "headers": { + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/sd" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:21:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"release\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "22" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/sd" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json new file mode 100644 index 0000000..75f7a00 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json @@ -0,0 +1,120 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:23:37", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:23:37", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/sd" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"ready\": false\n}" + }, + "headers": { + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/sd" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json new file mode 100644 index 0000000..fbdc5c5 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:50:16", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:50:16", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"tool\": \"tool0\", \"command\": \"select\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "38" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json new file mode 100644 index 0000000..bbedf8c --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:05:23", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:05:23", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 31.3, \n \"offset\": 10, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "76" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed" + } + }, + { + "recorded_at": "2016-08-08T11:05:24", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"offset\", \"offset\": 0}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "34" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/bed" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con49A.G5BaiThIk4LdhuJ1Tb3EEuVJvAg; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/bed" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json new file mode 100644 index 0000000..f32cfe1 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:04:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:04:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 31.1, \n \"offset\": 0, \n \"target\": 100.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "77" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed" + } + }, + { + "recorded_at": "2016-08-08T11:04:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"target\", \"target\": 0}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "34" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/bed" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/bed" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json new file mode 100644 index 0000000..108d076 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:31:47", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxEw.cJ4eBDRMhvENoJ4khuCO6y_Hw58" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"tool0\": {\n \"actual\": 25.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "77" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxEw.cJ4eBDRMhvENoJ4khuCO6y_Hw58; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool" + } + }, + { + "recorded_at": "2016-08-08T10:33:03", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:33:03", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"offsets\": {\"tool0\": 0}, \"command\": \"offset\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "46" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json new file mode 100644 index 0000000..c87b578 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json @@ -0,0 +1,188 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T10:21:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T10:21:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"tool0\": {\n \"actual\": 28.5, \n \"offset\": 0, \n \"target\": 200.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "79" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool" + } + }, + { + "recorded_at": "2016-08-08T10:21:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"targets\": {\"tool0\": 0}, \"command\": \"target\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "46" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConutA._K3fZQGvzKtT4fhGgdm-rjdLTgM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/tool" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json new file mode 100644 index 0000000..d819995 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json @@ -0,0 +1,129 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-08-08T11:46:27", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"commands\": [\"G28 X\"]}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "23" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/printer/command" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/printer/command" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json new file mode 100644 index 0000000..7d82f66 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json @@ -0,0 +1,179 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T17:18:50", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbeg.O38ls6wzmSDAiyKvKSi-cFSQP0M" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"tool0\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "77" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbeg.O38ls6wzmSDAiyKvKSi-cFSQP0M; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool" + } + }, + { + "recorded_at": "2016-07-25T17:18:51", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T17:18:51", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "75" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json new file mode 100644 index 0000000..ee13a5b --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json @@ -0,0 +1,179 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T17:18:52", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool?history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"history\": [\n {\n \"time\": 1469465628, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465633, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465638, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465643, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465648, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465653, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465658, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465663, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465668, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465673, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465678, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465683, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465688, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465693, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465698, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465703, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465708, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465713, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465718, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465723, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465728, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465733, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465738, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465743, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465748, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465753, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465758, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465763, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465768, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465773, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465778, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465783, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465788, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465793, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465799, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465804, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465809, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465814, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465819, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465824, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465829, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465834, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465839, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465844, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465849, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465854, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465859, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465864, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465869, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465874, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465879, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465884, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465889, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465894, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465899, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465904, \n \"tool0\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465909, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465914, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465919, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465924, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465929, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465934, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465939, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465944, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465949, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465954, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465959, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465964, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465969, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465974, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465979, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465984, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465989, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465994, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469465999, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466004, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466009, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466014, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466019, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466024, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466029, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466034, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466039, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466044, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466049, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466054, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466059, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466064, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466069, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466074, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466079, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466084, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466089, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466094, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466099, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466104, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466109, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466114, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466119, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466124, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466129, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466134, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466139, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466144, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466149, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466154, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466159, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466164, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466169, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466174, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466179, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466184, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466189, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466194, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466199, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466204, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466209, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466214, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466219, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466224, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466229, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466234, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466239, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466244, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466249, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466254, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466260, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466265, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466270, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466275, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466280, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466285, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466290, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466295, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466300, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466305, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466310, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466315, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466320, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466325, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466330, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466335, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466340, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466345, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466350, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466355, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466360, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466365, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466370, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466375, \n \"tool0\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466380, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466385, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466390, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466395, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466400, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466405, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466410, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466415, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466420, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466425, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466430, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466435, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466440, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466445, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466450, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466455, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466460, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466465, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466470, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466475, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466480, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466485, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466490, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466495, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466500, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466505, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466510, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466515, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466520, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466525, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466530, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466535, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466540, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466545, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466550, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466555, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466560, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466565, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466570, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466575, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466580, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466585, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466590, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466595, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466600, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466605, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466610, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466615, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466620, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466625, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466630, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466635, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466640, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466645, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466650, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466655, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466660, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466665, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466670, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466675, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466680, \n \"tool0\": {\n \"actual\": 23.7, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466685, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466690, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466695, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466700, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466705, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466710, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466715, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466721, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466726, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466731, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466736, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466741, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466746, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466751, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466756, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466761, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466766, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466771, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466776, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466781, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466786, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466791, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466796, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466801, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466806, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466811, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466816, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466821, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466826, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466831, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466836, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466841, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466846, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466851, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466856, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466861, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466866, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466871, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466876, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466881, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466886, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466891, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466896, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466901, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466906, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466911, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466916, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466921, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466926, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466931, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466936, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466941, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466946, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466951, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466956, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466961, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466966, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466971, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466976, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466981, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466986, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466991, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469466996, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467001, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467006, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467011, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467016, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467021, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467026, \n \"tool0\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467031, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467036, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467041, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467046, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467051, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467056, \n \"tool0\": {\n \"actual\": 23.7, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467061, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467066, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467071, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467076, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467081, \n \"tool0\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467086, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467091, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467096, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467101, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467106, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467111, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467116, \n \"tool0\": {\n \"actual\": 23.9, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467121, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467126, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "33996" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool?history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:52", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed?history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 24.2, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465633\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465638\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465643\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465648\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469465653\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465658\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465663\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465668\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465673\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465678\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465683\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465688\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465693\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465698\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465703\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465708\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465713\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465718\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465723\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469465728\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465733\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465738\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465743\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465748\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465753\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465758\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465763\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465768\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465773\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465778\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465783\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465788\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465793\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465799\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469465804\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465809\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465814\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465819\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465824\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465829\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469465834\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465839\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465844\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465849\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465854\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465859\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465864\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465869\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465874\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465879\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465884\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469465889\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469465894\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465899\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469465904\n }, \n {\n \"bed\": {\n \"actual\": 24.7, \n \"target\": 0.0\n }, \n \"time\": 1469465909\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465914\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465919\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465924\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465929\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465934\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465939\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469465944\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465949\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465954\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465959\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465964\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469465969\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465974\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465979\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465984\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469465989\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469465994\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469465999\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466004\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466009\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466014\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466019\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466024\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466029\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466034\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466039\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466044\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466049\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466054\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466059\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466064\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469466069\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466074\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466079\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466084\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466089\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466094\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466099\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466104\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466109\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466114\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466119\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466124\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466129\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466134\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466139\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466144\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466149\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466154\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466159\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466164\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466169\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466174\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469466179\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466184\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466189\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466194\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466199\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466204\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466209\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466214\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466219\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466224\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466229\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466234\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466239\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466244\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466249\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469466254\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466260\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466265\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466270\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466275\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466280\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466285\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466290\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466295\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466300\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466305\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466310\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466315\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466320\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466325\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466330\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466335\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466340\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466345\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466350\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466355\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466360\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466365\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466370\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466375\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466380\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466385\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466390\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466395\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466400\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466405\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466410\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466415\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466420\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466425\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466430\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466435\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466440\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466445\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466450\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466455\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466460\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466465\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466470\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466475\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466480\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466485\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466490\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466495\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466500\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466505\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466510\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466515\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466520\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466525\n }, \n {\n \"bed\": {\n \"actual\": 24.8, \n \"target\": 0.0\n }, \n \"time\": 1469466530\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466535\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466540\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466545\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466550\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466555\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466560\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466565\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466570\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466575\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466580\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466585\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466590\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466595\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466600\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466605\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466610\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466615\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466620\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466625\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466630\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466635\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466640\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466645\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466650\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466655\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466660\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466665\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466670\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466675\n }, \n {\n \"bed\": {\n \"actual\": 24.6, \n \"target\": 0.0\n }, \n \"time\": 1469466680\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466685\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466690\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466695\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466700\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466705\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466710\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466715\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466721\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466726\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466731\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466736\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466741\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466746\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466751\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466756\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466761\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466766\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466771\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466776\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466781\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466786\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466791\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469466796\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466801\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466806\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466811\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466816\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466821\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466826\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466831\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466836\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466841\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466846\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466851\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466856\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466861\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466866\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466871\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466876\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466881\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466886\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466891\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466896\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466901\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466906\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466911\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466916\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466921\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466926\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466931\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466936\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466941\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466946\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469466951\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466956\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469466961\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466966\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469466971\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466976\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466981\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469466986\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469466991\n }, \n {\n \"bed\": {\n \"actual\": 24.1, \n \"target\": 0.0\n }, \n \"time\": 1469466996\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467001\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467006\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467011\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467016\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467021\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467026\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467031\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467036\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467041\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467046\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467051\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469467056\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467061\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467066\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467071\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467076\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467081\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467086\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467091\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467096\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467101\n }, \n {\n \"bed\": {\n \"actual\": 24.4, \n \"target\": 0.0\n }, \n \"time\": 1469467106\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467111\n }, \n {\n \"bed\": {\n \"actual\": 24.5, \n \"target\": 0.0\n }, \n \"time\": 1469467116\n }, \n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467121\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469467126\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467131\n }\n ]\n}" + }, + "headers": { + "Content-Length": [ + "33394" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed?history=true" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json new file mode 100644 index 0000000..0932a60 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json @@ -0,0 +1,415 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool?limit=1&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"history\": [\n {\n \"time\": 1469467131, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "209" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool?limit=1&history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool?limit=2&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"history\": [\n {\n \"time\": 1469467126, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467131, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "322" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool?limit=2&history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/tool?limit=3&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"history\": [\n {\n \"time\": 1469467121, \n \"tool0\": {\n \"actual\": 23.8, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467126, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }, \n {\n \"time\": 1469467131, \n \"tool0\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }\n }\n ], \n \"tool0\": {\n \"actual\": 24.0, \n \"offset\": 0, \n \"target\": 0.0\n }\n}" + }, + "headers": { + "Content-Length": [ + "435" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/tool?limit=3&history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed?limit=1&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 24.2, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467131\n }\n ]\n}" + }, + "headers": { + "Content-Length": [ + "205" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed?limit=1&history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:53", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed?limit=2&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 24.2, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469467126\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467131\n }\n ]\n}" + }, + "headers": { + "Content-Length": [ + "316" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed?limit=2&history=true" + } + }, + { + "recorded_at": "2016-07-25T17:18:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T17:18:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/printer/bed?limit=3&history=true" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"bed\": {\n \"actual\": 24.2, \n \"offset\": 0, \n \"target\": 0.0\n }, \n \"history\": [\n {\n \"bed\": {\n \"actual\": 24.3, \n \"target\": 0.0\n }, \n \"time\": 1469467121\n }, \n {\n \"bed\": {\n \"actual\": 24.0, \n \"target\": 0.0\n }, \n \"time\": 1469467126\n }, \n {\n \"bed\": {\n \"actual\": 24.2, \n \"target\": 0.0\n }, \n \"time\": 1469467131\n }\n ]\n}" + }, + "headers": { + "Content-Length": [ + "427" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/printer/bed?limit=3&history=true" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json new file mode 100644 index 0000000..5254ecb --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json @@ -0,0 +1,206 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-04-24T13:10:11", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.10\"\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "41" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Ksw.utn_TNLb4gMtuCpqd-fz0AbuDus; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2017-04-24T13:10:12", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Ksw.utn_TNLb4gMtuCpqd-fz0AbuDus" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "5047" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + }, + { + "recorded_at": "2017-04-24T13:10:12", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw" + ], + "User-Agent": [ + "python-requests/2.13.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/settings" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": {\n \"allowCrossOrigin\": false, \n \"enabled\": true, \n \"key\": \"YouShallNotPass\"\n }, \n \"appearance\": {\n \"color\": \"default\", \n \"colorTransparent\": false, \n \"defaultLanguage\": \"_default\", \n \"name\": \"\"\n }, \n \"feature\": {\n \"alwaysSendChecksum\": false, \n \"externalHeatupDetection\": true, \n \"gcodeViewer\": true, \n \"ignoreIdenticalResends\": false, \n \"keyboardControl\": true, \n \"pollWatched\": false, \n \"repetierTargetTemp\": false, \n \"sdAlwaysAvailable\": false, \n \"sdSupport\": true, \n \"swallowOkAfterResend\": true, \n \"temperatureGraph\": true, \n \"waitForStart\": false\n }, \n \"folder\": {\n \"logs\": \"/home/pi/.octoprint/logs\", \n \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n \"uploads\": \"/home/pi/.octoprint/uploads\", \n \"watched\": \"/home/pi/.octoprint/watched\"\n }, \n \"plugins\": {\n \"cura\": {\n \"cura_engine\": \"/usr/local/bin/cura_engine\", \n \"debug_logging\": false, \n \"default_profile\": null\n }, \n \"discovery\": {\n \"httpPassword\": null, \n \"httpUsername\": null, \n \"model\": {\n \"description\": null, \n \"name\": null, \n \"number\": null, \n \"serial\": null, \n \"url\": null, \n \"vendor\": null, \n \"vendorUrl\": null\n }, \n \"pathPrefix\": null, \n \"publicHost\": null, \n \"publicPort\": 80, \n \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n \"zeroConf\": []\n }, \n \"pluginmanager\": {\n \"dependency_links\": false, \n \"hidden\": [], \n \"pip\": null, \n \"pip_args\": null, \n \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n \"repository_ttl\": 1440\n }, \n \"softwareupdate\": {\n \"cache_ttl\": 1440, \n \"check_providers\": {}, \n \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n \"octoprint_type\": \"github_release\", \n \"pip_command\": null\n }\n }, \n \"printer\": {\n \"defaultExtrusionLength\": 5\n }, \n \"scripts\": {\n \"gcode\": {\n \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n }\n }, \n \"serial\": {\n \"additionalPorts\": [], \n \"autoconnect\": false, \n \"baudrate\": null, \n \"baudrateOptions\": [\n 250000, \n 230400, \n 115200, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"checksumRequiringCommands\": [\n \"M110\"\n ], \n \"disconnectOnErrors\": true, \n \"helloCommand\": \"M110 N0\", \n \"ignoreErrorsFromFirmware\": false, \n \"log\": false, \n \"longRunningCommands\": [\n \"G4\", \n \"G28\", \n \"G29\", \n \"G30\", \n \"G32\", \n \"M400\", \n \"M226\"\n ], \n \"port\": null, \n \"portOptions\": [\n \"VIRTUAL\"\n ], \n \"timeoutCommunication\": 30.0, \n \"timeoutConnection\": 10.0, \n \"timeoutDetection\": 0.5, \n \"timeoutSdStatus\": 1.0, \n \"timeoutTemperature\": 5.0, \n \"triggerOkForM29\": true\n }, \n \"server\": {\n \"commands\": {\n \"serverRestartCommand\": \"sudo service octoprint restart\", \n \"systemRestartCommand\": \"sudo shutdown -r now\", \n \"systemShutdownCommand\": null\n }, \n \"diskspace\": {\n \"critical\": 209715200, \n \"warning\": 524288000\n }\n }, \n \"system\": {\n \"actions\": [\n {\n \"action\": \"shutdown\", \n \"async\": true, \n \"command\": \"sudo shutdown -h now\", \n \"confirm\": \"You are about to shutdown the system.\", \n \"ignore\": true, \n \"name\": \"Shutdown\"\n }, \n {\n \"action\": \"reboot\", \n \"async\": true, \n \"command\": \"sudo shutdown -r now\", \n \"confirm\": \"You are about to reboot the system\", \n \"ignore\": true, \n \"name\": \"Reboot\"\n }, \n {\n \"action\": \"restart\", \n \"async\": true, \n \"command\": \"sudo service octoprint restart\", \n \"confirm\": \"You are about to restart OctoPrint\", \n \"ignore\": true, \n \"name\": \"Restart OctoPrint\"\n }\n ], \n \"events\": null\n }, \n \"temperature\": {\n \"cutoff\": 30, \n \"profiles\": [\n {\n \"bed\": 100, \n \"extruder\": 210, \n \"name\": \"ABS\"\n }, \n {\n \"bed\": 60, \n \"extruder\": 180, \n \"name\": \"PLA\"\n }\n ]\n }, \n \"terminalFilters\": [\n {\n \"name\": \"Suppress M105 requests/responses\", \n \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n }, \n {\n \"name\": \"Suppress M27 requests/responses\", \n \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n }\n ], \n \"webcam\": {\n \"bitrate\": \"5000k\", \n \"ffmpegPath\": \"/usr/bin/avconv\", \n \"ffmpegThreads\": 1, \n \"flipH\": false, \n \"flipV\": false, \n \"rotate90\": false, \n \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n \"streamUrl\": \"/webcam/?action=stream\", \n \"watermark\": true\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + ], + "Content-Length": [ + "5047" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/settings" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json new file mode 100644 index 0000000..67a70ad --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json @@ -0,0 +1,312 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:38:22", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13g.xakIKg5AIeaBcw072fzIYw_Q8_w; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:38:25", + "request": { + "body": { + "encoding": "utf-8", + "string": "--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\ntrue\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "375" + ], + "Content-Type": [ + "multipart/form-data; boundary=1d01e8af2f2a4c36a5c9daf0e9b9f4da" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13g.xakIKg5AIeaBcw072fzIYw_Q8_w" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14Q._w3JupF1JxZoROCmlajduj-Pa0U; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:38:26", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14Q._w3JupF1JxZoROCmlajduj-Pa0U" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"job\": {\n \"averagePrintTime\": null, \n \"estimatedPrintTime\": null, \n \"filament\": {\n \"tool0\": {\n \"length\": 0.0, \n \"volume\": 0.0\n }\n }, \n \"file\": {\n \"date\": 1469457505, \n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"size\": 6\n }, \n \"lastPrintTime\": null\n }, \n \"progress\": {\n \"completion\": 0, \n \"filepos\": null, \n \"printTime\": null, \n \"printTimeLeft\": null\n }, \n \"state\": \"Printing\"\n}" + }, + "headers": { + "Content-Length": [ + "466" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:38:26", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Printing\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "544" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:38:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne16w.3CAf4ALHyg2LCsS0fzxgDOr5A9s; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json new file mode 100644 index 0000000..3ba4ff9 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json @@ -0,0 +1,253 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:38:11", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne10w.6JN82vY9s4DEwBhv1ZDiSsIj1-E; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:38:15", + "request": { + "body": { + "encoding": "utf-8", + "string": "--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\ntrue\r\n--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--42a345b6f18843e586dd3cd1102c0705--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "375" + ], + "Content-Type": [ + "multipart/form-data; boundary=42a345b6f18843e586dd3cd1102c0705" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne10w.6JN82vY9s4DEwBhv1ZDiSsIj1-E" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne11w.eGdWQySHByYfGx_6kPlR8uzlfec; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:38:16", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne11w.eGdWQySHByYfGx_6kPlR8uzlfec" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"job\": {\n \"averagePrintTime\": null, \n \"estimatedPrintTime\": null, \n \"filament\": {\n \"tool0\": {\n \"length\": 0.0, \n \"volume\": 0.0\n }\n }, \n \"file\": {\n \"date\": 1469457494, \n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"size\": 6\n }, \n \"lastPrintTime\": null\n }, \n \"progress\": {\n \"completion\": 0, \n \"filepos\": null, \n \"printTime\": null, \n \"printTimeLeft\": null\n }, \n \"state\": \"Operational\"\n}" + }, + "headers": { + "Content-Length": [ + "469" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne12A.Ub88CqtTjI9HOqjHGmqyYmGrQ-8; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:38:21", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne12A.Ub88CqtTjI9HOqjHGmqyYmGrQ-8" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13Q.OIBIN2LRguzmaK1rggKwA80_YlQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json new file mode 100644 index 0000000..cffd524 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json @@ -0,0 +1,448 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:46:33", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yQ.CO6cYGdtRY0vmEi5ftp3z6hFWP4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:46:34", + "request": { + "body": { + "encoding": "utf-8", + "string": "--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--588ffed34f60406bbcfe14d12fadbdd5--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=588ffed34f60406bbcfe14d12fadbdd5" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yQ.CO6cYGdtRY0vmEi5ftp3z6hFWP4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yg.BMjc_Rko3d9umK8SSU64a9NJYKA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:46:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"select\", \"print\": false}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "37" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yg.BMjc_Rko3d9umK8SSU64a9NJYKA" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:46:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"job\": {\n \"averagePrintTime\": 0.7757258415222168, \n \"estimatedPrintTime\": null, \n \"filament\": {\n \"tool0\": {\n \"length\": 0.0, \n \"volume\": 0.0\n }\n }, \n \"file\": {\n \"date\": 1469457993, \n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"size\": 6\n }, \n \"lastPrintTime\": 0.7757258415222168\n }, \n \"progress\": {\n \"completion\": 0, \n \"filepos\": null, \n \"printTime\": null, \n \"printTimeLeft\": null\n }, \n \"state\": \"Operational\"\n}" + }, + "headers": { + "Content-Length": [ + "497" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:46:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"start\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:46:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Printing\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "544" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:46:44", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne31A.JV1tQVnVHSLrRbFVNwAcdin_2aU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json new file mode 100644 index 0000000..a9311fc --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json @@ -0,0 +1,321 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:38:36", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17A.drCeDSGJ8gzAovF5s2YO8xRxruU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:38:39", + "request": { + "body": { + "encoding": "utf-8", + "string": "--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--e39b7661282146ddb94d0db21d733ddf--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=e39b7661282146ddb94d0db21d733ddf" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17A.drCeDSGJ8gzAovF5s2YO8xRxruU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17w.cQjh_gr0fbkx--r0omS2WhUkf98; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:38:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"print\": false, \"command\": \"select\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "37" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17w.cQjh_gr0fbkx--r0omS2WhUkf98" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:38:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"job\": {\n \"averagePrintTime\": null, \n \"estimatedPrintTime\": null, \n \"filament\": {\n \"tool0\": {\n \"length\": 0.0, \n \"volume\": 0.0\n }\n }, \n \"file\": {\n \"date\": 1469457519, \n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"size\": 6\n }, \n \"lastPrintTime\": null\n }, \n \"progress\": {\n \"completion\": 0, \n \"filepos\": null, \n \"printTime\": null, \n \"printTimeLeft\": null\n }, \n \"state\": \"Operational\"\n}" + }, + "headers": { + "Content-Length": [ + "469" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:38:46", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19g.ESpKDRc4ZJdJp1-VM7kfamNznOs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json new file mode 100644 index 0000000..e1b1dd2 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json @@ -0,0 +1,380 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:38:47", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19w.ROeRU7kblKoSaOq5zJO_r9BtvV8; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:38:50", + "request": { + "body": { + "encoding": "utf-8", + "string": "--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--83e62c28107c47bcacc2c88c90a69a26--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=83e62c28107c47bcacc2c88c90a69a26" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19w.ROeRU7kblKoSaOq5zJO_r9BtvV8" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-g.jLuia-QDhJLhA_Pk0ACosh2P9MA; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:38:51", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"print\": true, \"command\": \"select\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "36" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-g.jLuia-QDhJLhA_Pk0ACosh2P9MA" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:38:51", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"job\": {\n \"averagePrintTime\": null, \n \"estimatedPrintTime\": null, \n \"filament\": {\n \"tool0\": {\n \"length\": 0.0, \n \"volume\": 0.0\n }\n }, \n \"file\": {\n \"date\": 1469457530, \n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"size\": 6\n }, \n \"lastPrintTime\": null\n }, \n \"progress\": {\n \"completion\": 0, \n \"filepos\": null, \n \"printTime\": null, \n \"printTimeLeft\": null\n }, \n \"state\": \"Printing\"\n}" + }, + "headers": { + "Content-Length": [ + "466" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:38:52", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Printing\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "544" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1_A.W0jEGRMySfrGA1G6zp0cE2UDtkw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:39:01", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1_A.W0jEGRMySfrGA1G6zp0cE2UDtkw" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne2BQ.lG4vqMFx9ATMW9FAosVM9ZqhBRM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json new file mode 100644 index 0000000..47ff263 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json @@ -0,0 +1,194 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:40", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:43", + "request": { + "body": { + "encoding": "utf-8", + "string": "--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--d407144672fe44a3a736a6f97ee68057--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=d407144672fe44a3a736a6f97ee68057" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCw.czU7it6CQmlonOqy21on_MdG2Yo; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:00:50", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCw.czU7it6CQmlonOqy21on_MdG2Yo" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEg.UtgsVSQVmRFLAjTjpYIMCn5BCzY; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json new file mode 100644 index 0000000..3c7637a --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json @@ -0,0 +1,194 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:00:51", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEw.DFksf3gKco8qcvCz6zqeX5JPIcM; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:00:54", + "request": { + "body": { + "encoding": "utf-8", + "string": "--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"file\"; filename=\"fake.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--4e7eb470a1674403a282e31068dd81ab--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "375" + ], + "Content-Type": [ + "multipart/form-data; boundary=4e7eb470a1674403a282e31068dd81ab" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEw.DFksf3gKco8qcvCz6zqeX5JPIcM" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"fake.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/fake.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/fake.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "289" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/fake.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetFg.0pTfIgOyoMM0xAeSbNTwm0vUc9A; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:01:00", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetFg.0pTfIgOyoMM0xAeSbNTwm0vUc9A" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/fake.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetHA.FtcpSe5epaicl3Pbb41grNTETPU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/fake.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json new file mode 100644 index 0000000..9591893 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json @@ -0,0 +1,457 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:55:32", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55A.bLTUpNhN3iLMj73o9RWs2PcolMU; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:55:35", + "request": { + "body": { + "encoding": "utf-8", + "string": "--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--457cf9c4e122464da4ef7b8377f3c15c--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=457cf9c4e122464da4ef7b8377f3c15c" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55A.bLTUpNhN3iLMj73o9RWs2PcolMU" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55w.0iMoi7tFPIavUeLizK8XEhFKjaI; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:55:36", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"print\": true, \"command\": \"select\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "36" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55w.0iMoi7tFPIavUeLizK8XEhFKjaI" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56A.ANvaKY58Uhd9_r0jclerFwiBamE; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:55:37", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"pause\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56A.ANvaKY58Uhd9_r0jclerFwiBamE" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56Q.vzJzBjTjlL83C1uknbRvacrIfB0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:55:38", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56Q.vzJzBjTjlL83C1uknbRvacrIfB0" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Paused\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "542" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56g.Blu8vZC7WPUVEWZma82OaXcx5y0; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:55:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"cancel\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "21" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56g.Blu8vZC7WPUVEWZma82OaXcx5y0" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne58Q.s0clNUVqv3Nxpjug-3SXO_horj8; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:55:49", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne58Q.s0clNUVqv3Nxpjug-3SXO_horj8" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne59Q.K9rWo6Q6TRcVyPuPMrrHZLbjxMs; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json new file mode 100644 index 0000000..ca745a9 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json @@ -0,0 +1,457 @@ +{ + "http_interactions": [ + { + "recorded_at": "2016-07-25T14:59:42", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/version" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"api\": \"0.1\", \n \"server\": \"1.2.2\"\n}" + }, + "headers": { + "Content-Length": [ + "40" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne63g.byk8IKEzbAYmD6rrywDI3Uu0quY; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/version" + } + }, + { + "recorded_at": "2016-07-25T14:59:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--a19568a4e7304093bb9b7d0246f9ba1e--\r\n" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "376" + ], + "Content-Type": [ + "multipart/form-data; boundary=a19568a4e7304093bb9b7d0246f9ba1e" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne63g.byk8IKEzbAYmD6rrywDI3Uu0quY" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"done\": true, \n \"files\": {\n \"local\": {\n \"name\": \"homex.gcode\", \n \"origin\": \"local\", \n \"refs\": {\n \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n }\n }\n }\n}" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "292" + ], + "Content-Type": [ + "application/json" + ], + "Location": [ + "http://printer15.local/api/files/local/homex.gcode" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64Q.q5JCiObvtXxJMyC5gGEEbYAQCgQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 201, + "message": "CREATED" + }, + "url": "http://printer15.local/api/files/local" + } + }, + { + "recorded_at": "2016-07-25T14:59:46", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"select\", \"print\": true}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "36" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64Q.q5JCiObvtXxJMyC5gGEEbYAQCgQ" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64g.WvlFo3vPUJLopETogQYZ8bZ7MEw; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + }, + { + "recorded_at": "2016-07-25T14:59:47", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"pause\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "20" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64g.WvlFo3vPUJLopETogQYZ8bZ7MEw" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64w.gzSgliyJvAPdp6V4WzBOw17KfTQ; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:59:48", + "request": { + "body": { + "encoding": "utf-8", + "string": "{\"command\": \"restart\"}" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "22" + ], + "Content-Type": [ + "application/json" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64w.gzSgliyJvAPdp6V4WzBOw17KfTQ" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "POST", + "uri": "http://printer15.local/api/job" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Cache-Control": [ + "no-cache" + ], + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65A.AcvUhZPhMf0z9WwDBpJ4EAihXFI; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/job" + } + }, + { + "recorded_at": "2016-07-25T14:59:49", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65A.AcvUhZPhMf0z9WwDBpJ4EAihXFI" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "GET", + "uri": "http://printer15.local/api/connection" + }, + "response": { + "body": { + "encoding": null, + "string": "{\n \"current\": {\n \"baudrate\": 115200, \n \"port\": \"/dev/ttyACM0\", \n \"printerProfile\": \"_default\", \n \"state\": \"Printing\"\n }, \n \"options\": {\n \"baudratePreference\": 115200, \n \"baudrates\": [\n 115200, \n 250000, \n 230400, \n 57600, \n 38400, \n 19200, \n 9600\n ], \n \"portPreference\": \"/dev/ttyACM0\", \n \"ports\": [\n \"/dev/ttyACM0\"\n ], \n \"printerProfilePreference\": \"_default\", \n \"printerProfiles\": [\n {\n \"id\": \"_default\", \n \"name\": \"Default\"\n }\n ]\n }\n}" + }, + "headers": { + "Content-Length": [ + "544" + ], + "Content-Type": [ + "application/json" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65Q.7mkhrzVcqH5xQeNN5Nlv5JBrAt4; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/api/connection" + } + }, + { + "recorded_at": "2016-07-25T14:59:57", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65Q.7mkhrzVcqH5xQeNN5Nlv5JBrAt4" + ], + "User-Agent": [ + "python-requests/2.10.0" + ], + "X-Api-Key": [ + "YouShallNotPass" + ] + }, + "method": "DELETE", + "uri": "http://printer15.local/api/files/local/homex.gcode" + }, + "response": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Content-Length": [ + "0" + ], + "Content-Type": [ + "text/html; charset=utf-8" + ], + "Server": [ + "TornadoServer/4.0.1" + ], + "Set-Cookie": [ + "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne67Q.pT3b9_-vIWyJRk8Mc-k6Nf99Zjc; Path=/; HttpOnly" + ], + "X-Clacks-Overhead": [ + "GNU Terry Pratchett" + ] + }, + "status": { + "code": 204, + "message": "NO CONTENT" + }, + "url": "http://printer15.local/api/files/local/homex.gcode" + } + } + ], + "recorded_with": "betamax/0.7.1" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json new file mode 100644 index 0000000..21e7b44 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json @@ -0,0 +1,4 @@ +{ + "http_interactions": [], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json new file mode 100644 index 0000000..1ce6110 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json @@ -0,0 +1,70 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-06-19T12:27:23", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "User-Agent": [ + "python-requests/2.18.1" + ] + }, + "method": "POST", + "uri": "http://printer15.local/sockjs/808/jpg9p8o8/xhr_streaming" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\no\na[{\"connected\":{\"display_version\":\"1.3.4 (master branch)\",\"apikey\":\"2941CCF240F7485DB02E9E2BA2DAA6CC\",\"branch\":\"master\",\"plugin_hash\":\"ad308c01f1f0f19984ef0957d37f93d6\",\"config_hash\":\"fdc2cad85aaca61842657e268e22cd78\",\"version\":\"1.3.4\",\"safe_mode\":false,\"debug\":false}},{\"history\":{\"logs\":[\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: wait\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875102.702454,\"messages\":[\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873303},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873308},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873313},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873318},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873323},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873328},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873333},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873338},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873343},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873348},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873353},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873358},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873363},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873368},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873373},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873378},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873383},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873388},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873394},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873398},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873403},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873408},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873413},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873418},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873423},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873429},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873434},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873439},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873444},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873449},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873454},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873459},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873464},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873469},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873474},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873479},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873484},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873489},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873494},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873499},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873504},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873509},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873514},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873519},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873524},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873529},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873534},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873539},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873544},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873549},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873554},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873559},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873564},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873574},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873579},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873585},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873590},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873595},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873600},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873605},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873610},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873615},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873620},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873625},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873630},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873635},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873640},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873645},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873650},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873655},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873661},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873665},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873670},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873675},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873680},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873685},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873690},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873695},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873700},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873705},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873710},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873715},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873721},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873726},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873731},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873736},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873741},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873746},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873751},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873756},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873761},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873766},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873771},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873776},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873781},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873786},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873791},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873796},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873801},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873806},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873811},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873816},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873821},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873826},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873831},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873836},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873841},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873846},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873851},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873856},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873862},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873866},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873872},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873877},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873882},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873887},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873892},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873897},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873902},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873907},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873912},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873917},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873922},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873928},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873932},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873937},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873942},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873947},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873952},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873957},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873962},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873967},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873972},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873977},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873982},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873987},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873992},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873997},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874003},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874008},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874013},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874018},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874023},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874028},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874033},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874038},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874043},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874048},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874053},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874058},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874063},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874068},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874073},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874078},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874083},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874088},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874093},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874098},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874103},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874108},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874113},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874118},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874124},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874129},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874134},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874139},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874144},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874149},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874154},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874159},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874164},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874169},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874174},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874179},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874184},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874189},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874194},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874199},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874204},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874209},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874214},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874219},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874225},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874229},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874234},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874239},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874245},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874250},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874255},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874260},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874265},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874270},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874275},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874280},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874285},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874290},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874296},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874300},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874305},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874310},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874315},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874320},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874325},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874330},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874335},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874341},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874345},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874351},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874356},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874361},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874366},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874371},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874376},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874381},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874386},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874391},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874396},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874401},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874406},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874411},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874416},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874421},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874426},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874431},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874436},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874441},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874446},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874451},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874456},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874461},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874466},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874471},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874477},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874482},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874487},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874492},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874497},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874502},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874507},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874512},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874517},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874522},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874527},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874532},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874537},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874542},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874547},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874552},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874557},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874562},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874567},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874572},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874577},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874582},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874588},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874592},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874597},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874603},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874607},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874613},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874618},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874623},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874628},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874633},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874638},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874643},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874648},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874653},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874658},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874663},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874668},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874673},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874678},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874683},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874688},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874693},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874698},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874703},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874708},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874713},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874718},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874723},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874728},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874733},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874738},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874769},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874774},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874779},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874784},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874789},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874794},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874799},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874804},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874809},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874814},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874819},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874824},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874829},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874834},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874839},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874844},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874850},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874854},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874860},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874864},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874875},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874880},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874976},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874981},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874986},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874991},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874996},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875001},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875006},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875011},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875016},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875021},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875026},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875031},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875041},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875046},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875051},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875056},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875061},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875066},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875071},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875076},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875081},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875086},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875092},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875097},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875102}],\"job\":{\"estimatedPrintTime\":null,\"filament\":{\"volume\":null,\"length\":null},\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"lastPrintTime\":null},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTime\":null,\"filepos\":null,\"printTimeLeft\":null}}},{\"timelapse\":null}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875103.209275,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875104.173048,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875105.19827,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875106.172706,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875107.13221,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875107.705543,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875107}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875108.274436,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875109.238744,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875110.214514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875111.241164,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875112.188711,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875112.760484,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875112}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875113.594738,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875114.269033,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875115.296908,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875116.270578,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875117.242411,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875117.815633,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875117}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875118.38418,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875119.347083,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875120.322718,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875121.349488,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875122.308337,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875123.412593,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875122}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875124.388895,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875125.364566,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875126.390628,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875127.355241,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875127.927633,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875127}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875128.496488,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875129.459696,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875130.435139,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875131.463397,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875132.424045,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875132}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875133.522093,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875134.497798,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875135.526031,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875136.500603,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875137.480965,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875137}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875138.577514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875139.572539,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875140.538331,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875141.564283,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875142.525021,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875143.099208,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875142}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875143.668057,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875144.632456,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875145.608422,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875146.636189,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875147.597477,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875147}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875148.691342,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875149.673888,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875150.699806,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875151.673749,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875152.641336,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875153.213266,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875152}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875153.78358,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875154.722098,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875155.748177,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875156.775074,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875157.697822,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875158.26914,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875157}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875158.838623,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875159.802726,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875160.777641,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875161.805863,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875162.720756,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875162}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875163.818168,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875164.793859,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875165.820493,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875166.79422,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875167.761197,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875168.332551,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875167}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875168.904326,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875169.865955,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875170.84205,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875171.869197,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875172.83054,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875172}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875173.929143,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875174.908114,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875175.935179,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875176.910966,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875177.874486,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875178.44747,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875177}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875179.01702,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875179.982088,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875180.955812,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875181.985602,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875182.935399,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875183.50862,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875182}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875184.078124,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875185.042946,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875186.0187,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875187.045551,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875187.988832,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875188.560357,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875188}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875189.13028,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875190.042041,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875191.017191,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875192.043991,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875192.999158,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875193.570627,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875193}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875194.14025,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875195.104544,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875196.078404,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875197.106169,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875198.019837,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875198}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875199.114079,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875200.092082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875201.117969,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875202.094984,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875203.062387,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875203.634013,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875203}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875204.203187,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875205.166913,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875206.141939,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875207.170171,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875208.135707,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875208}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875209.746454,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875210.316844,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875211.207805,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875212.235638,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875213.194559,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875214.242785,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875213}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875215.216986,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875216.246018,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875217.22075,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875218.200885,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875218}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875219.301686,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875220.27824,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875221.307826,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875222.28261,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875223.252498,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875224.356107,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875223}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875225.332783,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875226.359232,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875227.334502,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875228.314641,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875229.365869,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875228}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875230.393713,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875231.421517,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875232.396527,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875233.369133,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875234.471186,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875233}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875235.446076,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875236.47554,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875237.449735,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875238.414022,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875238.986232,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875238}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875239.559131,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875240.523782,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875241.497356,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875242.526022,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875243.470695,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\n" + }, + "headers": { + "Access-Control-Allow-Credentials": [ + "true" + ], + "Access-Control-Allow-Origin": [ + "*" + ], + "Cache-Control": [ + "no-store, no-cache, must-revalidate, max-age=0" + ], + "Content-Type": [ + "application/javascript; charset=UTF-8" + ], + "Date": [ + "Mon, 19 Jun 2017 12:25:02 GMT" + ], + "Server": [ + "TornadoServer/4.0.2" + ], + "Set-Cookie": [ + "JSESSIONID=dummy; Path=/" + ], + "Transfer-Encoding": [ + "chunked" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/sockjs/808/jpg9p8o8/xhr_streaming" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json new file mode 100644 index 0000000..f77f527 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json @@ -0,0 +1,67 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-06-19T10:36:45", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "python-requests/2.18.1" + ] + }, + "method": "GET", + "uri": "http://printer15.local/sockjs/info" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "{\"entropy\":52339962,\"websocket\":true,\"origins\":[\"*:*\"],\"cookie_needed\":true}" + }, + "headers": { + "Access-Control-Allow-Credentials": [ + "true" + ], + "Access-Control-Allow-Origin": [ + "*" + ], + "Cache-Control": [ + "no-store, no-cache, must-revalidate, max-age=0" + ], + "Content-Length": [ + "76" + ], + "Content-Type": [ + "application/json; charset=UTF-8" + ], + "Date": [ + "Mon, 19 Jun 2017 10:36:45 GMT" + ], + "Etag": [ + "\"420ca7534b1993fe2192d744b69f1915c7887ed8\"" + ], + "Server": [ + "TornadoServer/4.0.2" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/sockjs/info" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json new file mode 100644 index 0000000..21e7b44 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json @@ -0,0 +1,4 @@ +{ + "http_interactions": [], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json new file mode 100644 index 0000000..c727c36 --- /dev/null +++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json @@ -0,0 +1,70 @@ +{ + "http_interactions": [ + { + "recorded_at": "2017-06-19T11:39:30", + "request": { + "body": { + "encoding": "utf-8", + "string": "" + }, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "User-Agent": [ + "python-requests/2.18.1" + ] + }, + "method": "POST", + "uri": "http://printer15.local/sockjs/883/i4hkmifb/xhr_streaming" + }, + "response": { + "body": { + "encoding": "UTF-8", + "string": "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\no\na[{\"connected\":{\"display_version\":\"1.3.4 (master branch)\",\"apikey\":\"2941CCF240F7485DB02E9E2BA2DAA6CC\",\"branch\":\"master\",\"plugin_hash\":\"ad308c01f1f0f19984ef0957d37f93d6\",\"config_hash\":\"fdc2cad85aaca61842657e268e22cd78\",\"version\":\"1.3.4\",\"safe_mode\":false,\"debug\":false}},{\"history\":{\"logs\":[\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872237.01958,\"messages\":[\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870438},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870443},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870448},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870453},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870458},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870463},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870468},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870473},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870478},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870484},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870489},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870494},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870499},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870504},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870509},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870514},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870519},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870524},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870529},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870534},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870539},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870544},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870549},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870554},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870559},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870564},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870574},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870579},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870584},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870589},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870594},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870599},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870604},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870609},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870614},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870619},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870624},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870629},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870634},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870640},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870644},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870649},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870654},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870659},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870664},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870669},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870675},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870679},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870684},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870689},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870694},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870699},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870704},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870709},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870714},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870719},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870724},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870729},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870734},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870739},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870769},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870775},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870780},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870785},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870790},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870795},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870800},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870805},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870810},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870815},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870820},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870825},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870830},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870835},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870840},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870845},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870850},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870855},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870860},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870865},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870875},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870880},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870975},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870980},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870985},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870990},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870995},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871001},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871006},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871011},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871016},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871021},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871026},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871031},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871041},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871046},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871051},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871056},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871061},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871066},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871071},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871076},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871081},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871086},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871091},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871096},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871101},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871106},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871111},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871116},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871121},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871126},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871131},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871136},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871141},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871146},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871151},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871156},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871161},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871166},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871171},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871176},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871181},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871186},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871191},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871196},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871201},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871206},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871211},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871217},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871221},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871226},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871232},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871237},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871242},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871247},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871252},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871257},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871262},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871267},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871272},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871277},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871282},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871287},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871292},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871297},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871302},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871307},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871312},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871317},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871322},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871327},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871332},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871337},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871342},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871347},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871352},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871357},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871362},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871367},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871372},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871377},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871382},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871387},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871392},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871397},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871402},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871407},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871413},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871417},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871422},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871427},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871432},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871437},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871442},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871448},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871453},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871458},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871463},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871468},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871473},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871478},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871483},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871488},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871493},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871498},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871503},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871508},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871513},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871518},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871523},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871528},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871533},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871538},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871543},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871548},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871553},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871558},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871563},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871573},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871578},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871583},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871588},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871593},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871598},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871603},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871608},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871613},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871618},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871623},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871628},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871633},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871638},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871643},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871648},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871653},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871658},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871663},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871669},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871674},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871679},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871684},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871689},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871694},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871699},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871704},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871709},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871714},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871719},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871724},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871729},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871734},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871739},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871770},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871774},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871779},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871784},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871789},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871794},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871799},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871804},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871809},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871814},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871819},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871824},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871829},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871834},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871839},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871844},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871849},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871854},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871859},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871864},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871874},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871879},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871975},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871980},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871985},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871990},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871995},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872000},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872005},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872010},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872015},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872020},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872025},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872030},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872040},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872045},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872050},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872055},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872060},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872065},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872070},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872075},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872080},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872085},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872090},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872095},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872101},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872106},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872111},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872116},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872121},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872126},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872131},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872136},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872141},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872146},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872151},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872156},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872161},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872166},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872171},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872176},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872181},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872186},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872191},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872196},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872201},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872206},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872211},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872216},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872221},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872226},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872231},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872236}],\"job\":{\"estimatedPrintTime\":null,\"filament\":{\"volume\":null,\"length\":null},\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"lastPrintTime\":null},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTime\":null,\"filepos\":null,\"printTimeLeft\":null}}},{\"event\":{\"type\":\"ClientOpened\",\"payload\":{\"remoteAddress\":\"192.168.23.250\"}}},{\"timelapse\":null}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872237.233173,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872237.783938,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872238.721544,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872239.726866,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872240.731947,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872241.689296,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872242.245053,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872241}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872242.796125,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872243.758402,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872244.762877,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872245.766363,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872246.697157,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872247.246434,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872246}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872247.798049,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872248.758981,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872249.763715,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872250.76846,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872251.745913,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872251}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872252.817043,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872253.82159,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872254.826865,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872255.780152,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872256.764444,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872257.314604,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872256}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872257.863657,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872258.854999,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872259.860712,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872260.864718,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872261.81734,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872261}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872262.838268,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872263.842885,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872264.847121,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872265.851278,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872266.81213,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872267.36858,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872266}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872267.920082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872268.897878,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872269.851551,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872270.910919,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872271.843009,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872272.390956,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872271}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872272.94091,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872273.907999,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872274.915073,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872275.922743,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872276.886451,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872277.442136,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872276}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872277.990345,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872278.934107,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872279.938766,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872280.945445,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872281.887638,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872282.437681,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872281}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872282.985501,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872283.980185,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872284.984134,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872285.990831,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872286.924068,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872287.47539,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872286}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872288.022639,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872288.988108,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872289.992168,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872290.996297,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872291.959594,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872292.509724,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872291}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872293.059099,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872294.049781,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872295.05532,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872296.011541,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872297.00824,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872296}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872298.081022,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872299.084421,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872300.088983,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872301.094514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872302.031167,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872302.580473,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872302}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872303.127895,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872304.090211,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872305.046007,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872306.099515,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872307.057881,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872307}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872308.077412,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872309.082528,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872310.088658,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872311.093672,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872312.051071,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872312.611289,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872312}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872313.159558,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872314.122722,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872315.126853,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872316.081088,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872317.061701,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872317.610152,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872317}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872318.159542,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872319.125584,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872320.129799,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872321.136226,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872322.104993,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872322.659224,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872322}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872323.208375,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872324.172084,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872325.178519,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872326.185852,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872327.135207,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872327.686379,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872327}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872328.234321,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872329.19716,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872330.204223,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872331.210638,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872332.180847,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872332.737785,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872332}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872333.286596,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872334.249859,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872335.254395,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872336.259997,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872337.208619,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872337.760517,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872337}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872338.307877,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872339.271662,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872340.276716,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872341.283529,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872342.245447,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872342.795461,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872342}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872343.344214,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872344.335604,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872345.290996,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872346.345997,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872347.28062,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872347.830343,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872347}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872348.378322,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872349.368242,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872350.373132,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872351.377133,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872352.324023,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872353.396639,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872352}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872354.403392,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872355.407436,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872356.412538,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872357.351332,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872357.903648,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872357}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872358.453082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872359.364055,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872360.369219,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872361.374798,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872362.356544,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872362.909234,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872362}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872363.459419,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872364.41928,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872365.424879,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872366.429375,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872367.362167,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872367.914945,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872367}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872368.463433,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872369.403415,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872370.408677,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\n" + }, + "headers": { + "Access-Control-Allow-Credentials": [ + "true" + ], + "Access-Control-Allow-Origin": [ + "*" + ], + "Cache-Control": [ + "no-store, no-cache, must-revalidate, max-age=0" + ], + "Content-Type": [ + "application/javascript; charset=UTF-8" + ], + "Date": [ + "Mon, 19 Jun 2017 11:37:16 GMT" + ], + "Server": [ + "TornadoServer/4.0.2" + ], + "Set-Cookie": [ + "JSESSIONID=dummy; Path=/" + ], + "Transfer-Encoding": [ + "chunked" + ] + }, + "status": { + "code": 200, + "message": "OK" + }, + "url": "http://printer15.local/sockjs/883/i4hkmifb/xhr_streaming" + } + } + ], + "recorded_with": "betamax/0.8.0" +} \ No newline at end of file diff --git a/projects/octorest/test/test_client.py b/projects/octorest/test/test_client.py new file mode 100644 index 0000000..45feabb --- /dev/null +++ b/projects/octorest/test/test_client.py @@ -0,0 +1,562 @@ +import time +import os +from itertools import chain, combinations + +import pytest +import os + +from octorest import OctoRest + +from betamax import Betamax +from betamax_serializers import pretty_json + +from _common import URL, APIKEY + +with Betamax.configure() as config: + config.cassette_library_dir = 'tests/fixtures/cassettes' + record_mode = os.environ.get('RECORD', 'none') + config.default_cassette_options['record_mode'] = record_mode + config.default_cassette_options['match_requests_on'] = { + 'uri', + 'method', + } + Betamax.register_serializer(pretty_json.PrettyJSONSerializer) + config.default_cassette_options['serialize_with'] = 'prettyjson' + + +def sleep(seconds): + ''' + If recording, sleep for a given amount of seconds + ''' + # if 'RECORD' in os.environ: + time.sleep(seconds) + + +def cmd_wait(client, state): + while client.state() == state: + sleep(0.1) + + +def cmd_wait_until(client, state): + while client.state() != state: + sleep(0.1) + + +def subsets(*items): + ''' + Get all possible subsets of something + ''' + N = len(items)+1 + return chain(*map(lambda x: combinations(items, x), range(0, N))) + + +def zero(component): + ''' + Add a 0 at the end of the component, if it is tool + ''' + return 'tool0' if component == 'tool' else component + + +# @pytest.mark.usefixtures('betamax_session') +@pytest.fixture +def client(): + return OctoRest(url=URL, apikey=APIKEY, session=None) + + +@pytest.fixture +def gcode(): + class GCode: + def __init__(self, filename): + self.filename = filename + self.path = 'tests/fixtures/gcodes/{}'.format(filename) + + return GCode('telephonebox.gcode') + + +class TestClient: + @pytest.mark.usefixtures('betamax_session') + def test_init_works_with_good_auth(self): + # Should not raise anything + OctoRest(url=URL, apikey=APIKEY) + + @pytest.mark.usefixtures('betamax_session') + def test_init_raises_with_bad_auth(self): + with pytest.raises(RuntimeError): + OctoRest(url=URL, apikey='nope') + + ### VERSION INFORMATION TESTS ### + + def test_version(self, client): + version = client.get_version() + assert 'api' in version + assert 'server' in version + assert 'text' in version + + ### FILE OPERATION TESTS ### + + def test_files_contains_files_and_free_space_info(self, client): + files = client.files() + assert 'bigben.gcode' in [f['name'] for f in files['files']] + assert isinstance(files['free'], int) + + def test_files_local_works(self, client): + files = client.files('local') + assert 'bigben.gcode' in [f['name'] for f in files['files']] + assert isinstance(files['free'], int) + + def test_files_sdcard_works(self, client): + files = client.files('sdcard') + assert files['files'] == [] # no files on sdcard + assert 'free' not in files # API doesn't report that back + + @pytest.mark.parametrize('filename', ('bigben.gcode', 'stpauls.gcode')) + def test_info_for_specific_file(self, client, filename): + f = client.files(filename) + assert f['name'] == filename + + @pytest.mark.parametrize('filename', ('unicorn.gcode', 'yeti.gcode', 'noexist.gcode')) + def test_nonexisting_file_raises(self, client, filename): + with pytest.raises(RuntimeError): + client.files(filename) + + def test_upload_by_path(self, client, gcode): + f = client.upload(gcode.path) + assert f['done'] + assert f['files']['local']['name'] == gcode.filename + client.delete(gcode.filename) + + def test_upload_file_object(self, client, gcode): + with open(gcode.path) as fo: + f = client.upload(('fake.gcode', fo)) + assert f['done'] + assert f['files']['local']['name'] == 'fake.gcode' + client.delete('fake.gcode') + + def test_upload_and_select(self, client, gcode): + f = client.upload(gcode.path, select=True) + assert f['done'] + assert f['files']['local']['name'] == gcode.filename + selected = client.job_info()['job']['file']['name'] + assert selected == gcode.filename + client.delete(gcode.filename) + + def test_upload_and_print(self, client, gcode): + f = client.upload(gcode.path, print=True) + sleep(1) + assert f['done'] + assert f['files']['local']['name'] == gcode.filename + selected = client.job_info()['job']['file']['name'] + assert selected == gcode.filename + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_and_select_one_by_one(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename) + selected = client.job_info()['job']['file']['name'] + assert selected == gcode.filename + client.delete(gcode.filename) + + def test_upload_and_select_with_print_one_by_one(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + sleep(1) + selected = client.job_info()['job']['file']['name'] + assert selected == gcode.filename + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_and_select_and_print_one_by_one(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename) + selected = client.job_info()['job']['file']['name'] + assert selected == gcode.filename + client.start() + sleep(1) + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_file_copy(self, client, gcode): + client.upload(gcode.path) + client.copy(gcode.filename, 'copied.gcode') + files = client.files() + assert gcode.filename in [f['name'] for f in files['files']] + assert 'copied.gcode' in [f['name'] for f in files['files']] + client.delete(gcode.filename) + client.delete('copied.gcode') + + def test_file_copy_exists(self, client, gcode): + client.upload(gcode.path) + client.copy(gcode.filename, 'copied.gcode') + files = client.files() + assert gcode.filename in [f['name'] for f in files['files']] + assert 'copied.gcode' in [f['name'] for f in files['files']] + with pytest.raises(RuntimeError): + client.copy(gcode.filename, 'copied.gcode') + client.delete(gcode.filename) + + def test_file_copy_folder_not_exist(self, client, gcode): + files = client.files() + if 'copied.gcode' in [f['name'] for f in files['files']]: + client.delete('copied.gcode') + client.upload(gcode.path) + with pytest.raises(RuntimeError): + client.copy(gcode.filename, '/random/path/copied.gcode') + client.delete(gcode.filename) + + def test_file_move(self, client, gcode): + client.upload(gcode.path) + client.move(gcode.filename, 'moved.gcode') + files = client.files() + assert 'moved.gcode' in [f['name'] for f in files['files']] + client.delete('moved.gcode') + + def test_file_move_exists(self, client, gcode): + client.upload(gcode.path) + client.move(gcode.filename, 'moved.gcode') + files = client.files() + assert 'moved.gcode' in [f['name'] for f in files['files']] + client.upload(gcode.path) + with pytest.raises(RuntimeError): + client.move(gcode.filename, 'moved.gcode') + client.delete(gcode.filename) + client.delete('moved.gcode') + + def test_file_move_folder_not_exist(self, client, gcode): + client.upload(gcode.path) + with pytest.raises(RuntimeError): + client.copy(gcode.filename, '/random/path/moved.gcode') + client.delete(gcode.filename) + + def test_slice_curalegacy(self, client): + client.slice('biscuithelper.STL', slicer='curalegacy') + sleep(2) + files = client.files() + assert 'biscuithelper.gco' in [f['name'] for f in files['files']] + client.delete('biscuithelper.gco') + + @pytest.mark.parametrize('name', ('biscuits.gco', 'richtea.gcode')) + def test_slice_curalegacy_gcode(self, client, name): + client.slice('biscuithelper.STL', slicer='curalegacy', gcode=name) + sleep(2) + files = client.files() + assert name in [f['name'] for f in files['files']] + client.delete(name) + + def test_slice_curalegacy_select(self, client): + client.slice('biscuithelper.STL', slicer='curalegacy', select=True) + sleep(2) + files = client.files() + assert 'biscuithelper.gco' in [f['name'] for f in files['files']] + selected = client.job_info()['job']['file']['name'] + assert selected == 'biscuithelper.gco' + client.delete('biscuithelper.gco') + + def test_upload_print_pause_cancel(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + cmd_wait_until(client, 'Printing') + client.pause() + cmd_wait(client, 'Pausing') + assert client.state() == 'Paused' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_print_pause_restart(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + cmd_wait_until(client, 'Printing') + client.pause() + cmd_wait_until(client, 'Paused') + assert client.state() == 'Paused' + client.restart() + cmd_wait_until(client, 'Printing') + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_print_pause_resume(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + cmd_wait_until(client, 'Printing') + client.pause() + cmd_wait_until(client, 'Paused') + assert client.state() == 'Paused' + client.resume() + cmd_wait_until(client, 'Printing') + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_print_toggle(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + cmd_wait_until(client, 'Printing') + client.toggle() + cmd_wait_until(client, 'Paused') + assert client.state() == 'Paused' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_upload_print_toggle_toggle(self, client, gcode): + client.upload(gcode.path) + client.select(gcode.filename, print=True) + cmd_wait_until(client, 'Printing') + client.toggle() + cmd_wait_until(client, 'Paused') + assert client.state() == 'Paused' + client.toggle() + cmd_wait_until(client, 'Printing') + assert client.state() == 'Printing' + client.cancel() + cmd_wait(client, 'Cancelling') + client.delete(gcode.filename) + + def test_logs(self, client): + logs = client.logs() + assert 'files' in logs + assert 'free' in logs + assert isinstance(logs['free'], int) + + def test_delete_log(self, client): + logs = client.logs() + log_lst = [log['name'] for log in logs['files']] + assert log_lst[0] in log_lst + client.delete_log(log_lst[0]) + logs = client.logs() + for log in logs['files']: + assert log['name'] != log_lst[0] + + def test_printer(self, client): + printer = client.printer() + assert 'ready' in printer['sd'] + assert printer['state']['flags']['operational'] + assert printer['state']['flags']['ready'] + assert not printer['state']['flags']['error'] + assert not printer['state']['flags']['printing'] + + def test_printer_temps(self, client): + printer = client.printer() + cmd_wait_until(client, 'Operational') + assert 'bed' in printer['temperature'] + assert 'tool0' in printer['temperature'] + assert 'history' not in printer['temperature'] + + @pytest.mark.parametrize('exclude', subsets('sd', 'temperature', 'state')) + def test_printer_with_excluded_stuff(self, client, exclude): + printer = client.printer(exclude=exclude) + for key in exclude: + assert key not in printer + assert len(printer) == 3 - len(exclude) + + def test_printer_with_history(self, client): + printer = client.printer(history=True) + assert isinstance(printer['temperature']['history'], list) + + @pytest.mark.parametrize('limit', range(1, 4)) + def test_printer_with_history_and_limit(self, client, limit): + printer = client.printer(history=True, limit=limit) + assert len(printer['temperature']['history']) == limit + + @pytest.mark.parametrize('key', ('actual', 'target', 'offset')) + @pytest.mark.parametrize('component', ('tool', 'bed')) + def test_tool_and_bed(self, client, key, component): + info = getattr(client, component)() # client.tool() or bed() + assert 'history' not in info + assert isinstance(info[zero(component)][key], (float, int)) + + # @pytest.mark.parametrize('key', ('actual', 'target')) + # @pytest.mark.parametrize('component', ('tool', 'bed')) + # def test_tool_and_bed_with_history(self, client, key, component): + # # TODO: history is not working with bed or tool, only printer + # info = getattr(client, component)(history=True) + # assert 'history' in info + # for h in info['history']: + # assert isinstance(h[zero(component)][key], (float, int)) + + # @pytest.mark.parametrize('limit', range(1, 4)) + # @pytest.mark.parametrize('component', ('tool', 'bed')) + # def test_tool_and_bed_with_history_limit(self, client, limit, component): + # # TODO: history is not working with bed or tool, only printer + # info = getattr(client, component)(history=True, limit=limit) + # assert len(info['history']) == limit + + def test_home_all(self, client): + # we are only testing if no exception occurred, there's no return + client.home() + + @pytest.mark.parametrize('axes', (('x',), ('y',), ('z',), ('x', 'y',))) + def test_home_some(self, client, axes): + # we are only testing if no exception occurred, there's no return + client.home(axes) + + @pytest.mark.parametrize('coordinates', ((20, 0, 0), (0, 20, 0))) + def test_jog(self, client, coordinates): + # we are only testing if no exception occurred, there's no return + client.jog(*coordinates) + + @pytest.mark.parametrize('factor', (100, 50, 150, 0.5, 1.0)) + def test_feedrate(self, client, factor): + # we are only testing if no exception occurred, there's no return + client.feedrate(factor) + + @pytest.mark.parametrize('how', (200, [200], {'tool0': 200})) + def test_set_tool_temperature_to_200(self, client, how): + client.tool_target(how) + tool = client.tool() + assert tool['tool0']['target'] == 200.0 + if 'RECORD' in os.environ: + # Betamax had some problems here + # And we don't do this for testing, but only with actual printer + client.tool_target(0) + + # @pytest.mark.parametrize('how', (20, [20], {'tool0': 20})) + # def test_set_tool_offset_to_20(self, client, how): + # client.tool_offset(how) + # tool = client.tool() + # print(tool) + # assert tool['tool0']['offset'] == 20.0 + # # TODO: make the above assert work? + # if 'RECORD' in os.environ: + # client.tool_offset(0) + + def test_selecting_tool(self, client): + # we are only testing if no exception occurred, there's no return + client.tool_select(0) + + def test_extruding(self, client): + # we are only testing if no exception occurred, there's no return + client.extrude(1) + + def test_retracting(self, client): + # we are only testing if no exception occurred, there's no return + client.retract(1) + + @pytest.mark.parametrize('factor', (100, 75, 125, 0.75, 1.0)) + def test_flowrate(self, client, factor): + # we are only testing if no exception occurred, there's no return + client.flowrate(factor) + + def test_set_bed_temperature_to_100(self, client): + client.bed_target(100) + bed = client.bed() + assert bed['bed']['target'] == 100.0 + if 'RECORD' in os.environ: + client.bed_target(0) + + def test_set_bed_offset_to_10(self, client): + client.bed_offset(10) + bed = client.bed() + assert bed['bed']['offset'] == 10.0 + if 'RECORD' in os.environ: + client.bed_offset(0) + + def test_sd_card_init(self, client): + client.sd_init() + + def test_sd_card_refresh(self, client): + client.sd_refresh() + + def test_sd_card_release(self, client): + client.sd_release() + + def test_sd_card_status(self, client): + sd = client.sd() + # no SD card here, so always not ready + assert sd['ready'] is False + + def test_single_gcode_command(self, client): + client.gcode('G28 X') + + def test_multiple_gcode_commands_nl(self, client): + client.gcode('G28 X\nG28 Y') + + def test_multiple_gcode_commands_list(self, client): + client.gcode(['G28 X', 'G28 Y']) + + def test_get_settings(self, client): + settings = client.settings() + assert 'api' in settings + assert 'appearance' in settings + + def test_unchanged_settings(self, client): + settings = client.settings() + new_settings = client.settings({}) + assert settings['api'] == new_settings['api'] + assert settings['appearance'] == new_settings['appearance'] + + def test_change_settings(self, client): + settings = client.settings() + printer_name = settings['appearance']['name'] + test_name = {'appearance': {'name': 'Gandalf'}} + new_settings = client.settings(test_name) + assert new_settings['appearance']['name'] == 'Gandalf' + client.settings({'appearance': {'name': printer_name}}) + + # def test_tmp_session_key(self, client): + # key = client.tmp_session_key() + # print(key) + + def test_users(self, client): + users = client.users() + assert 'users' in users + + ### CONNECTION HANDLING TESTS ### + + def test_connection_info(self, client): + info = client.connection_info() + + assert 'current' in info + assert 'baudrate' in info['current'] + assert 'port' in info['current'] + assert 'state' in info['current'] + + assert 'options' in info + assert 'baudrates' in info['options'] + assert 'ports' in info['options'] + + def test_fake_ack(self, client): + # we are only testing if no exception occurred, there's no return + client.fake_ack() + + def test_disconnect(self, client): + client.disconnect() + assert client.state() in ['Offline', 'Closed'] + + def test_connect(self, client): + ''' + Since it's hard with betamax fixture to check state() multiple times + in one test, this test hopes test_disconnect() was called before it. + It is not possible to run it without it in record mode. + TODO: Fix this + ''' + client.connect() + cmd_wait(client, 'Detecting baudrate') + assert client.state() in ['Connecting', + 'Operational', + 'Opening serial port'] + client.disconnect() + assert client.state() in ['Offline', 'Closed'] + + +# import json +# client = OctoRest(url=URL, apikey=APIKEY) +# client.new_folder('hello') +# f = client.files(recursive=False) +# print(json.dumps(f, indent=4)) +# g = client.files(recursive=True) +# print(json.dumps(f, indent=4)) +# print(f == g) +# print(client.version) +# client.gcode("M106") +# client.gcode("M106 \n G28 X Y Z \n M107") diff --git a/projects/octorest/test/test_xhrstreaming.py b/projects/octorest/test/test_xhrstreaming.py new file mode 100644 index 0000000..33f60ed --- /dev/null +++ b/projects/octorest/test/test_xhrstreaming.py @@ -0,0 +1,37 @@ +import pytest + +from octorest import XHRStreamingEventHandler + +from _common import URL + + +def on_message(api, message): + api.message = message + raise RuntimeError + + +@pytest.mark.usefixtures('betamax_recorder') +@pytest.fixture +def client(betamax_recorder): + betamax_recorder.current_cassette.match_options.remove('uri') + session = betamax_recorder.session + return XHRStreamingEventHandler(url=URL, + session=session, + on_message=on_message) + + +class TestXHRStreamingGenerator: + @pytest.mark.usefixtures('betamax_session') + def test_init_works(self, betamax_session): + XHRStreamingEventHandler(url=URL, session=betamax_session) + + @pytest.mark.xfail(reason="OctoPrint\'s tornado server returns 404") + def test_send(self, client): + r = client.send({"throttle": 10}) + assert r.status_code in [200, 204] + + def test_run(self, client): + client.run() + assert client.thread.is_alive() + client.wait() + assert client.message.get("connected", None) diff --git a/projects/octorest/test/test_xhrstreaminggenerator.py b/projects/octorest/test/test_xhrstreaminggenerator.py new file mode 100644 index 0000000..bbac85e --- /dev/null +++ b/projects/octorest/test/test_xhrstreaminggenerator.py @@ -0,0 +1,32 @@ +import pytest + +from octorest import XHRStreamingGenerator + +from _common import URL + + +@pytest.mark.usefixtures('betamax_recorder') +@pytest.fixture +def client(betamax_recorder): + betamax_recorder.current_cassette.match_options.remove('uri') + session = betamax_recorder.session + return XHRStreamingGenerator(url=URL, session=session) + + +class TestXHRStreamingGenerator: + @pytest.mark.usefixtures('betamax_session') + def test_init_works(self, betamax_session): + XHRStreamingGenerator(url=URL, session=betamax_session) + + def test_info(self, client): + response = client.info() + assert response.get("websocket", None) is not None + + @pytest.mark.xfail(reason="OctoPrints tornado server returns 404") + def test_send(self, client): + r = client.send({"throttle": 10}) + assert r.status_code in [200, 204] + + def test_readloop(self, client): + generator = client.read_loop() + assert next(generator).get("connected", None)