Skip to content
9 changes: 7 additions & 2 deletions BaseObject.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@


class BaseObject:
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename=None,
metadataFilename=None, transcriptFilename=None):
def __init__(self, accept, username="", password="", uid="", process_id="",
audioFilename=None, metadataFilename=None, transcriptFilename=None,
service=None, item_id=None, count=None, status=None):
self.accept = accept
self.username = username
self.password = password
Expand All @@ -19,6 +20,10 @@ def __init__(self, accept, username="", password="", uid="", process_id="", audi
self.datagen = {}
self.headers = {}
self.dest = 'https://www.koemei.com/REST/'
self.service = service
self.item_id = item_id
self.count = count
self.status = status
self.response = {}

@classmethod
Expand Down
34 changes: 34 additions & 0 deletions FileProgress.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import os, urllib2
from progressbar import *

class FileProgress(file):
widgets = ['Progress: ', Percentage(), ' ', Bar(marker=RotatingMarker(),left='[',right=']'),
' ', ETA(), ' ', FileTransferSpeed()]

def __init__(self, path, mode):
file.__init__(self, path, mode)
self.seek(0, os.SEEK_END)
self._total = self.tell()
self.seek(0)

self._seen = 0.0
self._pbar = ProgressBar(widgets=self.widgets, maxval=100)
self._pbar.start()

def __len__(self):
return self._total

def read(self, size):
data = file.read(self, size)
self.update(len(data))
return data

def close(self):
file.close(self)
self._pbar.finish()

def update(self, size):
self._seen += size
pct = (self._seen / self._total) * 100.0
self._pbar.update(pct)

78 changes: 47 additions & 31 deletions KObject.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,52 @@

import sys, urllib2
import sys, urllib2, urllib

from BaseObject import BaseObject


class KObject(BaseObject):
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename="", metadataFilename=""):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id, audioFilename=audioFilename, metadataFilename=metadataFilename)
self.path = 'kobjects/'

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
BaseObject._execute(self, request)

@BaseObject._reset_headers
def delete(self):
print >> sys.stderr, 'making delete request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
request.get_method = lambda: 'DELETE'
BaseObject._execute(self, request)

@BaseObject._reset_headers
def get_list(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path)
request = urllib2.Request(self.dest+self.path, headers=self.headers)
BaseObject._execute(self, request)

# create a new K-Object
@BaseObject._reset_headers
def create(self):
print >> sys.stderr, 'making post request to: %s%s' % (self.dest,self.path)
self.datagen = {}
request = urllib2.Request(self.dest+self.path, data="", headers=self.headers)
BaseObject._execute(self, request)
def __init__(self, accept, username="", password="", uid="", process_id="",
audioFilename="", metadataFilename="", transcriptFilename="",
service=None, item_id=None, count=None):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id,
audioFilename=audioFilename, metadataFilename=metadataFilename, transcriptFilename=transcriptFilename,
service=service, item_id=item_id, count=count)
self.path = 'kobjects/'

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
BaseObject._execute(self, request)

@BaseObject._reset_headers
def delete(self):
print >> sys.stderr, 'making delete request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
request.get_method = lambda: 'DELETE'
BaseObject._execute(self, request)

@BaseObject._reset_headers
def get_list(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest, self.path)

data = {}

if self.count:
data.update({'count': self.count})

if self.status:
data.update({'status_filter': '-'.join(map(lambda x: str(x), self.status))})

data = urllib.urlencode(data)
url = "%s/%s?%s" % (self.dest, self.path, data)

request = urllib2.Request(url, headers=self.headers)
BaseObject._execute(self, request)

# create a new K-Object
@BaseObject._reset_headers
def create(self):
print >> sys.stderr, 'making post request to: %s%s' % (self.dest,self.path)
request = urllib2.Request(self.dest+self.path, data="", headers=self.headers)
BaseObject._execute(self, request)
87 changes: 49 additions & 38 deletions Media.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import sys, urllib2, urllib
import sys, urllib2, urllib, os
from encode import multipart_encode, MultipartParam


def read_file(filename):
fp = open(filename, "r")
fp = open(os.path.abspath(filename), "r")
file_content = fp.read()
fp.close()

return file_content


from BaseObject import BaseObject

from FileProgress import FileProgress

class Media(BaseObject):
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename=None,
metadataFilename=None, transcriptFilename=None):
metadataFilename=None, transcriptFilename=None,
service=None, item_id=None, count=None, status=None):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id,
audioFilename=audioFilename, metadataFilename=metadataFilename,
transcriptFilename=transcriptFilename)
audioFilename=audioFilename, metadataFilename=metadataFilename, transcriptFilename=transcriptFilename,
service=service, item_id=item_id, count=count, status=status)
self.path = 'media/'
self.path_trans = '/transcribe'
self.path_publish = '/publish'
Expand All @@ -33,44 +33,49 @@ def get(self):
@BaseObject._reset_headers
def get_list(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest, self.path)
request = urllib2.Request(self.dest + self.path, headers=self.headers)

data = {}

if self.count:
data.update({'count': self.count})

if self.status:
data.update({'status_filter': '-'.join(map(lambda x: str(x), self.status))})

data = urllib.urlencode(data)
url = "%s/%s?%s" % (self.dest, self.path, data)

request = urllib2.Request(url, headers=self.headers)
BaseObject._execute(self, request)

@BaseObject._reset_headers
def create(self):
print >> sys.stderr, 'making post request to: %s%s' % (self.dest, self.path)
self.datagen = {}

if self.audioFilename is not None:
if 'http' in self.audioFilename:
self.path = self.path + "?media=" + urllib.quote(self.audioFilename, safe='')
self.datagen = "" # should not be empty dict but empty string!
if self.transcriptFilename is not None:
self.datagen, headers_ = multipart_encode({'transcript': read_file(self.transcriptFilename),})
self.headers.update(headers_)
else:
if self.metadataFilename is not None:
self.datagen, headers_ = multipart_encode({'metadata': read_file(self.metadataFilename),
'media': open(self.audioFilename, "rb")})
#TODO : allow metadatafilename + transcript for alignment
elif self.transcriptFilename is not None:
print >> sys.stderr, "hi"
self.datagen, headers_ = multipart_encode({'transcript': read_file(self.transcriptFilename),
'media': open(self.audioFilename, "rb")})
else:
self.datagen, headers_ = multipart_encode({'media': open(self.audioFilename, "rb")})
self.headers.update(headers_)

#print >> sys.stderr, "request headers: ", self.headers

request = urllib2.Request(self.dest + self.path, data=self.datagen, headers=self.headers)

data = {}
if self.service:
data.update({'service': self.service,
'item_id': self.item_id})

if 'http' in self.audioFilename:
data.update({'media': self.audioFilename})
else:
data.update({'media': FileProgress(open(self.audioFilename, "rb"))})

if self.transcriptFilename:
self.datagen.update({'transcript': read_file(self.transcriptFilename)})

headers = self.headers
data, headers_ = multipart_encode(data)
headers.update(headers_)

request = urllib2.Request(self.dest + self.path, data=data, headers=headers)

BaseObject._execute(self, request)

@BaseObject._reset_headers
def transcribe(self, success_callback_url='', error_callback_url=''):
print >> sys.stderr, 'making post request to: %s%s' % (self.dest, self.path + self.uid + self.path_trans)
self.datagen = {}

data = urllib.urlencode(
{'success_callback_url': success_callback_url, 'error_callback_url': error_callback_url, })
Expand All @@ -81,15 +86,21 @@ def transcribe(self, success_callback_url='', error_callback_url=''):
@BaseObject._reset_headers
def publish(self):
print >> sys.stderr, 'making put request to: %s%s' % (self.dest, self.path + self.uid + self.path_publish)
self.datagen = {}
request = urllib2.Request(self.dest + self.path + self.uid + self.path_publish, data="", headers=self.headers)

data = {}
if self.service:
data.update({'service_name': self.service,})

data = urllib.urlencode(data)
url = "%s/%s/%s/%s?%s" % (self.dest, self.path, self.uid, self.path_publish, data)

request = urllib2.Request(url, data="", headers=self.headers)
request.get_method = lambda: 'PUT'
BaseObject._execute(self, request)

@BaseObject._reset_headers
def unpublish(self):
print >> sys.stderr, 'making put request to: %s%s' % (self.dest, self.path + self.uid + self.path_unpublish)
self.datagen = {}
request = urllib2.Request(self.dest + self.path + self.uid + self.path_unpublish, data="", headers=self.headers)
request.get_method = lambda: 'PUT'
BaseObject._execute(self, request)
BaseObject._execute(self, request)
39 changes: 30 additions & 9 deletions Process.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,37 @@

import sys, urllib2
import sys, urllib2, urllib

from BaseObject import BaseObject


class Process(BaseObject):
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename="", metadataFilename=""):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id, audioFilename=audioFilename, metadataFilename=metadataFilename)
self.path = 'media/'
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename="", metadataFilename="", transcriptFilename="",
service=None, item_id=None, count=None):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id,
audioFilename=audioFilename, metadataFilename=metadataFilename, transcriptFilename=transcriptFilename,
service=service, item_id=item_id, count=count)
self.path = 'media/'

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid+self.path_trans+self.process_id)
request = urllib2.Request(self.dest+self.path+self.uid+self.path_trans+self.process_id, headers=self.headers)
BaseObject._execute(self, request)

@BaseObject._reset_headers
def get_list(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest, self.path)

data = {}

if self.count:
data.update({'count': self.count})

if self.status:
data.update({'status_filter': '-'.join(map(lambda x: str(x), self.status))})

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid+self.path_trans+self.process_id)
request = urllib2.Request(self.dest+self.path+self.uid+self.path_trans+self.process_id, headers=self.headers)
BaseObject._execute(self, request)
data = urllib.urlencode(data)
url = "%s/%s?%s" % (self.dest, self.path, data)

request = urllib2.Request(url, headers=self.headers)
BaseObject._execute(self, request)
40 changes: 31 additions & 9 deletions Transcript.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,38 @@

import sys, urllib2
import sys, urllib2, urllib

from BaseObject import BaseObject


class Transcript(BaseObject):
def __init__(self, accept, username="", password="", uid="", process_id="", audioFilename="", metadataFilename=""):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id, audioFilename=audioFilename, metadataFilename=metadataFilename)
self.path = 'transcripts/'
def __init__(self, accept, username="", password="", uid="", process_id="",
audioFilename="", metadataFilename="", transcriptFilename="",
service=None, item_id=None, count=None):
BaseObject.__init__(self, accept, username=username, password=password, uid=uid, process_id=process_id,
audioFilename=audioFilename, metadataFilename=metadataFilename, transcriptFilename=transcriptFilename,
service=service, item_id=item_id, count=count)
self.path = 'transcripts/'

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
BaseObject._execute(self, request)

@BaseObject._reset_headers
def get_list(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest, self.path)

data = {}

if self.count:
data.update({'count': self.count})

if self.status:
data.update({'status_filter': '-'.join(map(lambda x: str(x), self.status))})

@BaseObject._reset_headers
def get(self):
print >> sys.stderr, 'making get request to: %s%s' % (self.dest,self.path+self.uid)
request = urllib2.Request(self.dest+self.path+self.uid, headers=self.headers)
BaseObject._execute(self, request)
data = urllib.urlencode(data)
url = "%s/%s?%s" % (self.dest, self.path, data)

request = urllib2.Request(url, headers=self.headers)
BaseObject._execute(self, request)
Loading