bugfix
This commit is contained in:
parent
e11a398439
commit
35b6d7a565
@ -86,7 +86,8 @@ class PressableLabel(ButtonBehavior, Text):
|
|||||||
class HTTPDataHandler(EventDispatcher):
|
class HTTPDataHandler(EventDispatcher):
|
||||||
def __init__(self, url,method='GET',params={},
|
def __init__(self, url,method='GET',params={},
|
||||||
headers={},
|
headers={},
|
||||||
files={}
|
files={},
|
||||||
|
stream=False
|
||||||
):
|
):
|
||||||
EventDispatcher.__init__(self)
|
EventDispatcher.__init__(self)
|
||||||
self.url = url
|
self.url = url
|
||||||
@ -94,6 +95,7 @@ class HTTPDataHandler(EventDispatcher):
|
|||||||
self.params = params
|
self.params = params
|
||||||
self.headers = headers
|
self.headers = headers
|
||||||
self.files=files
|
self.files=files
|
||||||
|
self.stream=stream
|
||||||
self.hc = App.get_running_app().hc
|
self.hc = App.get_running_app().hc
|
||||||
self.register_event_type('on_success')
|
self.register_event_type('on_success')
|
||||||
self.register_event_type('on_error')
|
self.register_event_type('on_error')
|
||||||
@ -129,6 +131,8 @@ class HTTPDataHandler(EventDispatcher):
|
|||||||
self.hc(self.url,method=self.method,
|
self.hc(self.url,method=self.method,
|
||||||
params=p,
|
params=p,
|
||||||
headers=h,
|
headers=h,
|
||||||
|
files=self.files,
|
||||||
|
stream=self.stream,
|
||||||
callback=self.onSuccess,
|
callback=self.onSuccess,
|
||||||
errback=self.onError)
|
errback=self.onError)
|
||||||
|
|
||||||
|
35
kivyblocks/hostimage.py
Normal file
35
kivyblocks/hostimage.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import tempfile
|
||||||
|
from kivyblocks.baseWidget import HTTPDataHandler
|
||||||
|
from kivyblocks.utils import blocksImage, absurl
|
||||||
|
|
||||||
|
from kivy.uix.image import Image
|
||||||
|
|
||||||
|
class HostImage(Image):
|
||||||
|
def __init__(self, target,**kwargs):
|
||||||
|
self.options = kwargs
|
||||||
|
self.target = target
|
||||||
|
kwargs['source'] = blocksImage('running.gif')
|
||||||
|
url = kwargs.get('url')
|
||||||
|
del kwargs['url']
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.downloadImage(url)
|
||||||
|
|
||||||
|
def downloadImage(url):
|
||||||
|
realurl = absurl(url,self.target.parenturl)
|
||||||
|
loader = HTTPDataHandler(url,stream=True)
|
||||||
|
loader.bind(on_success=self.createTmpfile)
|
||||||
|
loader.bind(on_failed=self.showBadImage)
|
||||||
|
loader.handle()
|
||||||
|
|
||||||
|
def showBadImage(self,o,e):
|
||||||
|
self.source = blocksImage('break.png')
|
||||||
|
|
||||||
|
def createTmpfile(self,o,resp):
|
||||||
|
fn = tempfile.NamedTemporaryFile(delete=True)
|
||||||
|
with open(fn, 'wb') as f:
|
||||||
|
for chunk in r.iter_content(chunk_size=8192):
|
||||||
|
if chunk: # filter out keep-alive new chunks
|
||||||
|
f.write(chunk)
|
||||||
|
# f.flush()
|
||||||
|
self.source = fn
|
||||||
|
|
@ -152,7 +152,7 @@ class PageLoader(EventDispatcher):
|
|||||||
filter
|
filter
|
||||||
}
|
}
|
||||||
events:
|
events:
|
||||||
'on_bufferraise': erase
|
'on_deletepage': erase
|
||||||
|
|
||||||
"""
|
"""
|
||||||
class RelatedLoader(PageLoader):
|
class RelatedLoader(PageLoader):
|
||||||
@ -244,8 +244,6 @@ class RelatedLoader(PageLoader):
|
|||||||
class Paging(PageLoader):
|
class Paging(PageLoader):
|
||||||
def __init__(self,**options):
|
def __init__(self,**options):
|
||||||
PageLoader.__init__(self,**options)
|
PageLoader.__init__(self,**options)
|
||||||
self.adder = options.get('adder')
|
|
||||||
self.clearer = options.get('clearer')
|
|
||||||
self.target = options.get('target')
|
self.target = options.get('target')
|
||||||
self.init()
|
self.init()
|
||||||
|
|
||||||
@ -254,6 +252,7 @@ class Paging(PageLoader):
|
|||||||
kwargs['size_hint_y'] = None
|
kwargs['size_hint_y'] = None
|
||||||
kwargs['height'] = CSize(2)
|
kwargs['height'] = CSize(2)
|
||||||
kwargs['orientation'] = 'horizontal'
|
kwargs['orientation'] = 'horizontal'
|
||||||
|
kwargs['spacing'] = CSize(1)
|
||||||
self.widget = BoxLayout(**kwargs)
|
self.widget = BoxLayout(**kwargs)
|
||||||
self.b_f = PagingButton(text="|<")
|
self.b_f = PagingButton(text="|<")
|
||||||
self.b_p = PagingButton(text="<")
|
self.b_p = PagingButton(text="<")
|
||||||
@ -270,16 +269,6 @@ class Paging(PageLoader):
|
|||||||
if self.filter:
|
if self.filter:
|
||||||
self.widget.add_widget(self.filter)
|
self.widget.add_widget(self.filter)
|
||||||
|
|
||||||
def show_page(self,o,d):
|
|
||||||
super().show_page(o,data)
|
|
||||||
d = DictObject(**d)
|
|
||||||
self.total_cnt = d.total
|
|
||||||
self.calculateTotalPage()
|
|
||||||
self.clearer()
|
|
||||||
for r in d.rows:
|
|
||||||
self.adder(r)
|
|
||||||
self.loading = False
|
|
||||||
|
|
||||||
def loadFirstPage(self,o=None):
|
def loadFirstPage(self,o=None):
|
||||||
if self.curpage == 1:
|
if self.curpage == 1:
|
||||||
print('return not loading')
|
print('return not loading')
|
||||||
|
@ -7,6 +7,7 @@ from .vplayer import VPlayer
|
|||||||
from .form import Form, StrSearchForm
|
from .form import Form, StrSearchForm
|
||||||
from .boxViewer import BoxViewer
|
from .boxViewer import BoxViewer
|
||||||
from .pagescontainer import PageContainer
|
from .pagescontainer import PageContainer
|
||||||
|
from .hostimage import HostImage
|
||||||
|
|
||||||
r = Factory.register
|
r = Factory.register
|
||||||
r('PageContainer', PageContainer)
|
r('PageContainer', PageContainer)
|
||||||
@ -36,6 +37,7 @@ r('PressableLabel', PressableLabel)
|
|||||||
r('Tree',Tree)
|
r('Tree',Tree)
|
||||||
r('TextTree',TextTree)
|
r('TextTree',TextTree)
|
||||||
r('PopupMenu',PopupMenu)
|
r('PopupMenu',PopupMenu)
|
||||||
|
r('HostImage',HostImage)
|
||||||
if platform == 'android':
|
if platform == 'android':
|
||||||
r('PhoneButton',PhoneButton)
|
r('PhoneButton',PhoneButton)
|
||||||
r('AWebView',AWebView)
|
r('AWebView',AWebView)
|
||||||
|
@ -89,15 +89,14 @@ class HttpClient:
|
|||||||
pre = '/'.join(parts)
|
pre = '/'.join(parts)
|
||||||
return pre
|
return pre
|
||||||
|
|
||||||
def webcall(self,url,method="GET",params={},files={},headers={}):
|
def _webcall(self,url,method="GET",
|
||||||
|
params={},
|
||||||
|
files={},
|
||||||
|
headers={}
|
||||||
|
stream=False):
|
||||||
app = App.get_running_app()
|
app = App.get_running_app()
|
||||||
domain = self.url2domain(url)
|
domain = self.url2domain(url)
|
||||||
sessionid = hostsessions.get(domain,None)
|
sessionid = hostsessions.get(domain,None)
|
||||||
print('hostsessions=', hostsessions,
|
|
||||||
'sessionid=',sessionid,
|
|
||||||
'domain=',domain,
|
|
||||||
'url=',url
|
|
||||||
)
|
|
||||||
if sessionid:
|
if sessionid:
|
||||||
headers.update({'session':sessionid})
|
headers.update({'session':sessionid})
|
||||||
elif app.getAuthHeader():
|
elif app.getAuthHeader():
|
||||||
@ -114,21 +113,8 @@ class HttpClient:
|
|||||||
if resp.status_code == 200:
|
if resp.status_code == 200:
|
||||||
h = resp.headers.get('Set-Cookie',None)
|
h = resp.headers.get('Set-Cookie',None)
|
||||||
if h:
|
if h:
|
||||||
print('*************set-Cookie=',h,'domain=',domain)
|
|
||||||
sessionid = h.split(';')[0]
|
sessionid = h.split(';')[0]
|
||||||
hostsessions[domain] = sessionid
|
hostsessions[domain] = sessionid
|
||||||
try:
|
|
||||||
data = resp.json()
|
|
||||||
if type(data) != type({}):
|
|
||||||
return data
|
|
||||||
status = data.get('status',None)
|
|
||||||
if status is None:
|
|
||||||
return data
|
|
||||||
if status == 'OK':
|
|
||||||
return data['data']
|
|
||||||
return data
|
|
||||||
except:
|
|
||||||
return resp.text
|
|
||||||
if resp.status_code == 401:
|
if resp.status_code == 401:
|
||||||
print('NeedLogin:',url)
|
print('NeedLogin:',url)
|
||||||
raise NeedLogin
|
raise NeedLogin
|
||||||
@ -136,12 +122,46 @@ class HttpClient:
|
|||||||
if resp.status_code == 403:
|
if resp.status_code == 403:
|
||||||
raise InsufficientPrivilege
|
raise InsufficientPrivilege
|
||||||
|
|
||||||
print('Error', url, method,
|
if resp.status_code != 200:
|
||||||
params, resp.status_code,
|
print('Error', url, method,
|
||||||
type(resp.status_code))
|
params, resp.status_code,
|
||||||
raise HTTPError(resp.status_code)
|
type(resp.status_code))
|
||||||
|
raise HTTPError(resp.status_code)
|
||||||
|
return resp
|
||||||
|
|
||||||
def __call__(self,url,method="GET",params={},headers={},files={},callback=None,errback=None):
|
|
||||||
|
def webcall(self,url,method="GET",
|
||||||
|
params={},
|
||||||
|
files={},
|
||||||
|
headers={},
|
||||||
|
stream=False):
|
||||||
|
resp = self._webcall(url,method=method,
|
||||||
|
params=params,
|
||||||
|
files=files,
|
||||||
|
headers=headers,
|
||||||
|
stream=stream)
|
||||||
|
if stream:
|
||||||
|
return resp
|
||||||
|
try:
|
||||||
|
data = resp.json()
|
||||||
|
if type(data) != type({}):
|
||||||
|
return data
|
||||||
|
status = data.get('status',None)
|
||||||
|
if status is None:
|
||||||
|
return data
|
||||||
|
if status == 'OK':
|
||||||
|
return data['data']
|
||||||
|
return data
|
||||||
|
except:
|
||||||
|
return resp.text
|
||||||
|
|
||||||
|
def __call__(self,url,method="GET",
|
||||||
|
params={},
|
||||||
|
headers={},
|
||||||
|
files={},
|
||||||
|
stream=False,
|
||||||
|
callback=None,
|
||||||
|
errback=None):
|
||||||
def cb(t,resp):
|
def cb(t,resp):
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
@ -161,6 +181,7 @@ class HttpClient:
|
|||||||
"method":method,
|
"method":method,
|
||||||
"params":params,
|
"params":params,
|
||||||
"files":files,
|
"files":files,
|
||||||
|
"stream":stream,
|
||||||
"headers":headers
|
"headers":headers
|
||||||
}
|
}
|
||||||
self.workers.add(self.webcall,callback,errback,kwargs=kwargs)
|
self.workers.add(self.webcall,callback,errback,kwargs=kwargs)
|
||||||
|
Loading…
Reference in New Issue
Block a user