Exemplo n.º 1
0
                           )
        xbmc.sleep(1000)
        torr_info = jsonrq.get_torrent_info(info_hash)


if __name__ == '__main__':
    if sys.argv[1] == 'pause':
        jsonrq.pause_torrent(sys.argv[2])
    elif sys.argv[1] == 'resume':
        jsonrq.resume_torrent(sys.argv[2])
    elif sys.argv[1] == 'delete' and xbmcgui.Dialog().yesno(
            _('Confirm delete'),
            _('Do you really want to delete the torrent?')):
        jsonrq.remove_torrent(sys.argv[2], False)
    elif sys.argv[1] == 'delete_with_files'and xbmcgui.Dialog().yesno(
            _('Confirm delete'),
            _('Do you really want to delete the torrent with files?'),
            _('Warning: The files will be deleted permanently!')):
        jsonrq.remove_torrent(sys.argv[2], True)
    elif sys.argv[1] == 'pause_all':
        jsonrq.pause_all()
    elif sys.argv[1] == 'resume_all':
        jsonrq.resume_all()
    elif sys.argv[1] == 'show_info':
        show_torrent_info(sys.argv[2])
    elif sys.argv[1] == 'restore_finished':
        jsonrq.restore_finished(sys.argv[2])
    else:
        addon.log_debug('Command cancelled or invalid command: {0}'.format(sys.argv[1]))
    xbmc.executebuiltin('Container.Refresh')
Exemplo n.º 2
0
class WebClient(requests.Session):
    _secret_data = ['password']

    def __init__(self, headers=None, cookie_file=None):
        super(WebClient, self).__init__()

        if cookie_file is not None:
            self.cookies = cookielib.LWPCookieJar(cookie_file)
            if os.path.exists(cookie_file):
                self.cookies.load(ignore_discard=True, ignore_expires=True)

        if headers is not None:
            self.headers.update(headers)

        self._addon = Addon()

    def __save_cookies(self):
        if isinstance(self.cookies, cookielib.LWPCookieJar) \
                and self.cookies.filename:
            self.cookies.save(ignore_expires=True, ignore_discard=True)

    def post(self, url, **kwargs):

        func = super(WebClient, self).post
        return self._run(func, url, **kwargs)

    def get(self, url, **kwargs):

        func = super(WebClient, self).get
        return self._run(func, url, **kwargs)

    def put(self, url, **kwargs):

        func = super(WebClient, self).put
        return self._run(func, url, **kwargs)

    def delete(self, url, **kwargs):

        func = super(WebClient, self).delete
        return self._run(func, url, **kwargs)

    def _run(self, func, url, **kwargs):

        try:
            r = func(url, **kwargs)
            r.raise_for_status()
        except (requests.HTTPError, requests.ConnectionError) as e:
            self._log_error(e)
            raise WebClientError(e)
        else:
            self._log_debug(r)
            if r.headers.get('set-cookie') is not None:
                self.__save_cookies()
            return r

    def _log_debug(self, response):
        debug_info = []

        request = getattr(response, 'request', None)

        if request is not None:
            request_info = self._get_request_info(request)
            if request:
                debug_info.append(request_info)

        if response is not None:
            response_info = self._get_response_info(response)
            if response_info:
                debug_info.append(response_info)

        self._addon.log_debug('\n'.join(debug_info))

    def _log_error(self, error):
        error_info = [str(error)]

        response = getattr(error, 'response', None)
        request = getattr(error, 'request', None)

        if request is not None:
            request_info = self._get_request_info(request)
            if request:
                error_info.append(request_info)

        if response is not None:
            response_info = self._get_response_info(response)
            if response_info:
                error_info.append(response_info)

        self._addon.log_error('\n'.join(error_info))

    @staticmethod
    def _get_response_info(response):
        response_info = ['Response info', 'Status code: {0}'.format(response.status_code),
                         'Reason: {0}'.format(response.reason)]
        if not PY26:
            response_info.append('Elapsed: {0:.4f} sec'.format(response.elapsed.total_seconds()))
        if response.url:
            response_info.append('URL: {0}'.format(response.url))
        if response.headers:
            response_info.append('Headers: {0}'.format(response.headers))

        if response.text \
                and response.encoding:
            response_info.append('Content: {0}'.format(response.text))

        return '\n'.join(response_info)

    @classmethod
    def _get_request_info(cls, request):
        request_info = ['Request info', 'Method: {0}'.format(request.method)]

        if request.url:
            request_info.append('URL: {0}'.format(request.url))
        if request.headers:
            request_info.append('Headers: {0}'.format(request.headers))
        if request.body:
            try:
                j = json.loads(request.body)
                for field in cls._secret_data:
                    if j.get(field) is not None:
                        j[field] = '<SECRET>'
                data = json.dumps(j)
            except ValueError:
                data = request.body
                for param in data.split('&'):
                    if '=' in param:
                        field, value = param.split('=')
                        if field in cls._secret_data:
                            data = data.replace(param, '{0}=<SECRET>'.format(field))
            request_info.append('Data: {0}'.format(data))

        return '\n'.join(request_info)
Exemplo n.º 3
0
librorrent_addon.set_setting('custom_version', orig_custom_version)
librorrent_addon.set_setting('set_version', orig_set_version)
# ======

if addon.enable_limits:
    wsgi_app.limits_timer.start()
if addon.persistent:
    wsgi_app.save_resume_timer.start()
httpd = create_server(wsgi_app.app, port=addon.server_port)
httpd.timeout = 0.1
start_trigger = True
while not kodi_monitor.abortRequested():
    httpd.handle_request()
    if start_trigger:
        addon.log_notice('Torrent Server started')
        xbmcgui.Dialog().notification('YATP', _('Torrent server started.'),
                                      addon.icon, 3000, False)
        start_trigger = False
addon.log_debug('Stopping Torrent Server...')
addon.log_debug('Close server socket')
httpd.socket.close()
addon.log_debug('Abort buffering')
wsgi_app.torrent_client.abort_buffering()
addon.log_debug('Stop timers')
if addon.enable_limits:
    wsgi_app.limits_timer.abort()
if addon.persistent:
    wsgi_app.save_resume_timer.abort()
addon.log_notice('Torrent Server stopped')
Exemplo n.º 4
0
        xbmc.sleep(1000)
        torr_info = jsonrq.get_torrent_info(info_hash)


if __name__ == '__main__':
    if sys.argv[1] == 'pause':
        jsonrq.pause_torrent(sys.argv[2])
    elif sys.argv[1] == 'resume':
        jsonrq.resume_torrent(sys.argv[2])
    elif sys.argv[1] == 'delete' and xbmcgui.Dialog().yesno(
            _('Confirm delete'),
            _('Do you really want to delete the torrent?')):
        jsonrq.remove_torrent(sys.argv[2], False)
    elif sys.argv[1] == 'delete_with_files' and xbmcgui.Dialog().yesno(
            _('Confirm delete'),
            _('Do you really want to delete the torrent with files?'),
            _('Warning: The files will be deleted permanently!')):
        jsonrq.remove_torrent(sys.argv[2], True)
    elif sys.argv[1] == 'pause_all':
        jsonrq.pause_all()
    elif sys.argv[1] == 'resume_all':
        jsonrq.resume_all()
    elif sys.argv[1] == 'show_info':
        show_torrent_info(sys.argv[2])
    elif sys.argv[1] == 'restore_finished':
        jsonrq.restore_finished(sys.argv[2])
    else:
        addon.log_debug('Command cancelled or invalid command: {0}'.format(
            sys.argv[1]))
    xbmc.executebuiltin('Container.Refresh')