class Greeter(object): def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(GREETER_URL) def setup(self): params = self._get_params() headers = self._get_headers() payload = self._get_payload() self.requestor.post(params, headers, payload) def _get_params(self): return { "access_token": self.access_token } def _get_headers(self): return { "Content-Type": "application/json" } def _get_payload(self): return json.dumps({ "greeting":[ { "locale": "default", "text": GREETER_TEXT } ] })
class Menu(object): def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(MENU_URL) def setup(self): self._make_post_request() def _make_post_request(self): """Getting started button required to be POST'd first """ params = self._get_POST_params() headers = self._get_headers() payload = self._get_payload() self.requestor.post(params, headers, payload) def _get_headers(self): return {"Content-Type": "application/json"} def _get_POST_params(self): return {"access_token": self.access_token} def _get_GET_params(self): return {"access_token": self.access_token, "fields": "persistent_menu"} def _get_payload(self): return json.dumps({ "persistent_menu": [{ "locale": "default", "composer_input_disabled": False, "call_to_actions": [self._get_actions()] }] }) def _get_actions(self): return { "title": "Menu", "type": "nested", "call_to_actions": self._get_menu_buttons() } def _get_menu_buttons(self): return [ self._get_hours_button(), self._get_availabilities_button(), ] def _get_hours_button(self): return {"title": "Hours", "type": "postback", "payload": HOURS_PAYLOAD} def _get_availabilities_button(self): return { "title": "Availabilities", "type": "postback", "payload": AVAILABILITIES_PAYLOAD }
class FacebookUserRequestor(object): def __init__(self, access_token, user_id): self.access_token = access_token self.requestor = Requestor(self._get_url(user_id)) def _get_url(self, user_id): return USER_URL + user_id + "?" def get_user_json(self): params = self._get_params() headers = self._get_headers() return self.requestor.get(params) def _get_params(self): return { "access_token": self.access_token, "fields": self._get_fields() } def _get_fields(self): fields = [ "first_name", "last_name", "locale", "timezone", ] return self._get_formatted_fields(fields) def _get_formatted_fields(self, fields): return ",".join(fields) def _get_headers(self): return {"Content-Type": "application/json"}
class Capsule: def __init__(self, host, port): self.ns = NameService() self.marshaller_client = Marshaller() self.c = ClientRequestHandler() self.requestor = Requestor(self.marshaller_client, self.c) self.server = threading.Thread(target = self.createServer, args = (host, port) ) self.server.daemon = True self.server.start() def resetNS(self): self.ns.reset() def createServer(self, host, port): self.marshaller_server = Marshaller() self.invoker = Invoker(self.marshaller_server) self.s = ServerRequestHandler(host, port, self.invoker) self.invoker.addServer(self.s); def registerRemoteObject(self, id, name, obj, host, port): self.ns.register(id, name, host, port) self.invoker.register(id, name, obj) def invoke(self, obj, method, args): result = self.requestor.invoke(obj, method, args) return result
class GetStartedButton(object): def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(GET_STARTED_BUTTON_URL) def setup(self): params = self._get_params() headers = self._get_headers() payload = self._get_payload() self.requestor.post(params, headers, payload) def _get_headers(self): return {"Content-Type": "application/json"} def _get_params(self): return {"access_token": self.access_token} def _get_GET_params(self): return {"access_token": self.access_token, "fields": "get_started"} def _get_payload(self): return json.dumps({"get_started": {"payload": GET_STARTED_PAYLOAD}})
def __init__(self, host, port): self.ns = NameService() self.marshaller_client = Marshaller() self.c = ClientRequestHandler() self.requestor = Requestor(self.marshaller_client, self.c) self.server = threading.Thread(target = self.createServer, args = (host, port) ) self.server.daemon = True self.server.start()
def __init__(self, api_key, api_base_url=None, _requestor=None): if api_key is None: raise TypeError('api_key cannot be blank.') if api_base_url is None: api_base_url = 'https://api.userkit.io/v1' else: api_base_url += '/v1' self.api_key = api_key self.api_base_url = api_base_url # make the encapsulated objects self._rq = _requestor or Requestor(self.api_key, self.api_base_url) self.users = UserManager(self._rq) self.invites = InviteManager(self._rq) self.emails = EmailManager(self._rq) self.widget = WidgetManager(self._rq) self.logs = LogsManager(self._rq)
class Replier(object): def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(REPLY_URL) def wit_send(self, request, response): recipient_id = request['session_id'] message = response['text'] params = self._get_params() headers = self._get_headers() payload = self._get_payload(recipient_id, message) self.requestor.post(params, headers, payload) def reply_with(self, recipient_id, message): params = self._get_params() headers = self._get_headers() payload = self._get_payload(recipient_id, message) self.requestor.post(params, headers, payload) def reply_welcome(self, recipient_id, user): text = self._get_welcome_text(user) params = self._get_params() headers = self._get_headers() payload = self._get_payload(recipient_id, text) self.requestor.post(params, headers, payload) def _get_welcome_text(self, user): return "Hi " + user.first_name + " " + user.last_name + ". " + WELCOME_TEXT def _get_params(self): return { "access_token": self.access_token } def _get_headers(self): return { "Content-Type": "application/json" } def _get_payload(self, recipient_id, message): return json.dumps({ "recipient": { "id": recipient_id }, "message": { "text": message } })
def __init__(self, link, req=Requestor()): self.link = link self.pag = Pagination(req.get(link)) self.pages = SubForumPages(self.link, pag=self.pag)
def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(GET_STARTED_BUTTON_URL)
def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(MENU_URL)
def __init__(self, access_token, user_id): self.access_token = access_token self.requestor = Requestor(self._get_url(user_id))
def __init__(self, access_token): self.access_token = access_token self.requestor = Requestor(GREETER_URL)
class Downloader(object): def __init__(self, base="http://repo1.maven.org/maven2", username=None, password=None): self.requestor = Requestor(username, password) self.resolver = Resolver(base, self.requestor) def download(self, artifact, filename=None, suppress_log=False): filename = artifact.get_filename(filename) url = self.resolver.uri_for_artifact(artifact) if not self.verify_md5(filename, url + ".md5"): if not suppress_log: print("Downloading artifact " + str(artifact)) hook=self._chunk_report else: hook=self._chunk_report_suppress onError = lambda uri, err: _throwDownloadFailed("Failed to download artifact " + str(artifact) + "from " + uri) response = self.requestor.request(url, onError, lambda r: r) if response: with open(filename, 'w') as f: self._write_chunks(response, f, report_hook=hook) if not suppress_log: print("Downloaded artifact %s to %s" % (artifact, filename)) return (artifact, True) else: return (artifact, False) else: if not suppress_log: print("%s is already up to date" % artifact) return (artifact, True) def _throwDownloadFailed(msg): raise RequestException(msg) def _chunk_report_suppress(self, bytes_so_far, chunk_size, total_size): pass def _chunk_report(self, bytes_so_far, chunk_size, total_size): percent = float(bytes_so_far) / total_size percent = round(percent*100, 2) sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" % (bytes_so_far, total_size, percent)) if bytes_so_far >= total_size: sys.stdout.write('\n') def _write_chunks(self, response, file, chunk_size=8192, report_hook=None): total_size = response.info().getheader('Content-Length').strip() total_size = int(total_size) bytes_so_far = 0 while 1: chunk = response.read(chunk_size) bytes_so_far += len(chunk) if not chunk: break file.write(chunk) if report_hook: report_hook(bytes_so_far, chunk_size, total_size) return bytes_so_far def verify_md5(self, file, remote_md5): if not os.path.exists(file): return False else: local_md5 = self._local_md5(file) onError = lambda uri, err: _throwDownloadFailed("Failed to download MD5 from " + uri) remote = self.requestor.request(remote_md5, onError, lambda r: r.read()) return local_md5 == remote def _local_md5(self, file): md5 = hashlib.md5() with open(file, 'rb') as f: for chunk in iter(lambda: f.read(8192), ''): md5.update(chunk) return md5.hexdigest()
def __init__(self, link, req=Requestor(), index=0): self.source = req.get(link) self.index = index self.sections = [] self.__build()
def __init__(self, link, index=0, req=Requestor()): self.req = req self.source = req.get(link) self.posts = [] self.__build()
def __init__(self, link, req=Requestor()): self.req = req self.pag = Pagination(self.req.get(link)) self.pages = TopicPages(link, pag=self.pag)
def __init__(self, base="http://repo1.maven.org/maven2", username=None, password=None): self.requestor = Requestor(username, password) self.resolver = Resolver(base, self.requestor)
class Downloader(object): def __init__(self, base="http://repo1.maven.org/maven2", username=None, password=None): self.requestor = Requestor(username, password) self.resolver = Resolver(base, self.requestor) def download(self, artifact, filename=None, suppress_log=False): filename = artifact.get_filename(filename) url = self.resolver.uri_for_artifact(artifact) if not self.verify_md5(filename, url + ".md5"): if not suppress_log: print("Downloading artifact " + str(artifact)) hook = self._chunk_report else: hook = self._chunk_report_suppress onError = lambda uri, err: self._throwDownloadFailed( "Failed to download artifact " + str(artifact) + "from " + uri) response = self.requestor.request(url, onError, lambda r: r) if response: with open(filename, 'w') as f: self._write_chunks(response, f, report_hook=hook) if not suppress_log: print("Downloaded artifact %s to %s" % (artifact, filename)) return (artifact, True) else: return (artifact, False) else: if not suppress_log: print("%s is already up to date" % artifact) return (artifact, True) def _throwDownloadFailed(self, msg): raise RequestException(msg) def _chunk_report_suppress(self, bytes_so_far, chunk_size, total_size): pass def _chunk_report(self, bytes_so_far, chunk_size, total_size): percent = float(bytes_so_far) / total_size percent = round(percent * 100, 2) sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" % (bytes_so_far, total_size, percent)) if bytes_so_far >= total_size: sys.stdout.write('\n') def _write_chunks(self, response, file, chunk_size=8192, report_hook=None): total_size = response.info().getheader('Content-Length').strip() total_size = int(total_size) bytes_so_far = 0 while 1: chunk = response.read(chunk_size) bytes_so_far += len(chunk) if not chunk: break file.write(chunk) if report_hook: report_hook(bytes_so_far, chunk_size, total_size) return bytes_so_far def verify_md5(self, file, remote_md5): if not os.path.exists(file): return False else: local_md5 = self._local_md5(file) onError = lambda uri, err: self._throwDownloadFailed( "Failed to download MD5 from " + uri) remote = self.requestor.request(remote_md5, onError, lambda r: r.read()) return local_md5 == remote def _local_md5(self, file): md5 = hashlib.md5() with open(file, 'rb') as f: for chunk in iter(lambda: f.read(8192), ''): md5.update(chunk) return md5.hexdigest()