check pybossa-client.
Created
July 29, 2012 19:43
-
-
Save gka/3201412 to your computer and use it in GitHub Desktop.
Simple PyBossa client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# simple pybossa client | |
# | |
_opts = dict() | |
import requests | |
import json | |
def set(key, val): | |
global _opts | |
_opts[key] = val | |
def _pybossa_req(method, domain, id=None, payload=None, params=None): | |
""" | |
Sends a JSON request | |
""" | |
headers = {'content-type': 'application/json'} | |
url = _opts['api_url'] + '/api/' + domain | |
if id is not None: | |
url += '/' + str(id) | |
if params is None: | |
params = dict() | |
params['api_key'] = _opts['api_key'] | |
if method == 'get': | |
r = requests.get(url, params=params) | |
elif method == 'post': | |
r = requests.post(url, params=params, headers=headers, data=json.dumps(payload)) | |
elif method == 'put': | |
r = requests.put(url, params=params, headers=headers, data=json.dumps(payload)) | |
elif method == 'delete': | |
r = requests.delete(url, params=params, headers=headers, data=json.dumps(payload)) | |
if r.text: | |
result = json.loads(r.text) | |
else: | |
result = None | |
return result | |
# app | |
class DomainObject(object): | |
def __init__(self, data): | |
self.__dict__['data'] = data | |
def __getattr__(self, name): | |
data = self.__dict__['data'] | |
if name == 'data': | |
return data | |
if name in data: | |
return data[name] | |
raise AttributeError('unknown attribute: ' + name) | |
def __setattr__(self, name, value): | |
data = self.__dict__['data'] | |
if name == 'data': | |
self.__dict__['data'] = value | |
return True | |
if name in data: | |
data[name] = value | |
return True | |
raise AttributeError('unknown attribute: ' + name) | |
class App(DomainObject): | |
def __repr__(self): | |
return 'pybossa.App("' + self.short_name + '")' | |
class Task(DomainObject): | |
def __repr__(self): | |
return 'pybossa.Task("' + self.id + '")' | |
def get_apps(): | |
return [App(app_data) for app_data in _pybossa_req('get', 'app')] | |
def get_app(app_id): | |
return App(_pybossa_req('get', 'app', app_id)) | |
def find_app(**kwargs): | |
return [App(app_data) for app_data in _pybossa_req('get', 'app', params=kwargs)] | |
def update_app(app): | |
_pybossa_req('put', 'app', app.id, payload=app.data) | |
def delete_app(app_id): | |
pass | |
def get_tasks(app_id): | |
return [Task(task_data) for task_data in _pybossa_req('get', 'task', params=dict(app_id=app_id))] | |
def find_tasks(app_id, **kwargs): | |
kwargs['app_id'] = app_id | |
return [Task(task_data) for task_data in _pybossa_req('get', 'task', params=kwargs)] | |
def create_task(app_id, info): | |
task = dict(app_id=app_id, state=0, calibration=0, priority_0=0, info=info) | |
_pybossa_req('post', 'task', payload=task) | |
def update_task(task): | |
_pybossa_req('put', 'task', task.id, payload=task.data) | |
def delete_task(task): | |
_pybossa_req('delete', 'task', task.id) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment