| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #! /usr/bin/env python
- import json
- import httplib
- import urllib
- sparker_client_default_host = 'localhost'
- sparker_client_default_port = 8080
- class SparkerClient:
- # Configuration
- host = sparker_client_default_host
- port = sparker_client_default_port
- # State
- connection = None
- session_id = None
- output_cursor = 0
- # Constants
- POST = 'POST'
- GET = 'GET'
- DELETE = 'DELETE'
- ROOT = '/'
- OK = 200
- def __init__(self, host=sparker_client_default_host, port=sparker_client_default_port, lang=None):
- self.host = host
- self.port = port
- self.connection = self.create_connection()
- self.session_id = self.create_session(lang)
- def http_json(self, method, url, body=''):
- self.connection.request(method, url, body)
- response = self.connection.getresponse()
- if response.status != self.OK:
- raise Exception(str(response.status) + ' ' + response.reason)
- response_text = response.read()
- if len(response_text) != 0:
- return json.loads(response_text)
- return ''
- def create_connection(self):
- return httplib.HTTPConnection(self.host, self.port)
- def create_session(self, lang):
- return self.http_json(self.POST, self.ROOT, urllib.urlencode({'lang': lang}))
- def get_sessions(self):
- return self.http_json(self.GET, self.ROOT)
- def get_session(self):
- return self.http_json(self.GET, self.ROOT + self.session_id)
- def post_input(self, command):
- self.http_json(self.POST, self.ROOT + self.session_id, command)
- def get_output(self):
- output = self.get_session()[self.output_cursor:]
- self.output_cursor += len(output)
- return output
- def delete_session(self):
- self.http_json(self.DELETE, self.ROOT + self.session_id)
- def close_connection(self):
- self.connection.close()
- import threading
- import time
- import sys
- class SparkerPoller(threading.Thread):
- keep_polling = True
- def __init__(self, sparker_client):
- threading.Thread.__init__(self)
- self.sparker_client = sparker_client
- def stop_polling(self):
- self.keep_polling = False
- def run(self):
- while self.keep_polling:
- output = self.sparker_client.get_output()
- for line in output:
- print(line)
- time.sleep(1)
- if len(sys.argv) == 2:
- lang = sys.argv[1]
- else:
- lang = 'scala'
- client = SparkerClient(lang=lang)
- poller = SparkerPoller(client)
- poller.start()
- try:
- while True:
- line = raw_input()
- client.post_input(line)
- except:
- poller.stop_polling()
- client.delete_session()
- client.close_connection()
- sys.exit(0)
|