From d7505ed13c53b9496f2f2cf2d0f51ac97479197f Mon Sep 17 00:00:00 2001 From: Iakov Miikhoparkin Date: Sun, 3 May 2020 19:29:19 +0300 Subject: [PATCH 1/3] handle case of single meeting in list --- bigbluebutton_api_python/responses/getmeetings.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bigbluebutton_api_python/responses/getmeetings.py b/bigbluebutton_api_python/responses/getmeetings.py index 37967ec..cf6c18b 100644 --- a/bigbluebutton_api_python/responses/getmeetings.py +++ b/bigbluebutton_api_python/responses/getmeetings.py @@ -1,3 +1,4 @@ +from typing import Iterable from .base import BaseResponse from ..core.meeting import Meeting @@ -11,6 +12,9 @@ def get_meetings(self): except KeyError: pass - for meetingXml in self.get_field("meetings")["meeting"]: + meetingsXml = self.get_field("meetings")["meeting"] + if not isinstance(meetingsXml, Iterable): + meetingsXml = [meetingsXml] + for meetingXml in meetingsXml: meetings.append(Meeting(meetingXml)) return meetings \ No newline at end of file From 36939c1e1664a5dadee2b7ccdf56693cc25e12ae Mon Sep 17 00:00:00 2001 From: Iakov Miikhoparkin Date: Sun, 10 May 2020 21:58:48 +0300 Subject: [PATCH 2/3] bigfixes --- bigbluebutton_api_python/bigbluebutton.py | 6 +++++- bigbluebutton_api_python/parameters/bbbmodule.py | 8 ++++---- bigbluebutton_api_python/responses/getmeetings.py | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/bigbluebutton_api_python/bigbluebutton.py b/bigbluebutton_api_python/bigbluebutton.py index b300cbf..f598775 100644 --- a/bigbluebutton_api_python/bigbluebutton.py +++ b/bigbluebutton_api_python/bigbluebutton.py @@ -134,7 +134,11 @@ def __send_api_request(self, api_call, params={}, data=None): if data is None: response = urlopen(url).read() else: - response = urlopen(url, data=urlencode(data).encode()).read() + if isinstance(data, str): + data_str = data + else: + data_str = urlencode(data) + response = urlopen(url, data=data_str.encode()).read() try: rawXml = parse(response)["response"] diff --git a/bigbluebutton_api_python/parameters/bbbmodule.py b/bigbluebutton_api_python/parameters/bbbmodule.py index 20df5e2..e9e440f 100644 --- a/bigbluebutton_api_python/parameters/bbbmodule.py +++ b/bigbluebutton_api_python/parameters/bbbmodule.py @@ -14,7 +14,7 @@ def __init__(self): def add_slide(self, type, value, name = None): if type == self.URL: self.__urls.append(value) - elif type == self.files: + elif type == self.FILE: self.__files.append(value) elif type == self.base64s: self.__base64s.append([name, value]) @@ -42,8 +42,8 @@ def __slides_to_xml(self): for single_file in self.__files: if os.path.exists(single_file): xml += "" - with open(single_file, 'r') as f: - xml += base64.encodestring(f.read()) + with open(single_file, 'rb',) as f: + xml += base64.encodebytes(f.read()).decode() xml += "" - + xml += "" return xml \ No newline at end of file diff --git a/bigbluebutton_api_python/responses/getmeetings.py b/bigbluebutton_api_python/responses/getmeetings.py index cf6c18b..6fc8346 100644 --- a/bigbluebutton_api_python/responses/getmeetings.py +++ b/bigbluebutton_api_python/responses/getmeetings.py @@ -1,4 +1,4 @@ -from typing import Iterable +from typing import List from .base import BaseResponse from ..core.meeting import Meeting @@ -13,7 +13,7 @@ def get_meetings(self): pass meetingsXml = self.get_field("meetings")["meeting"] - if not isinstance(meetingsXml, Iterable): + if not isinstance(meetingsXml, List): meetingsXml = [meetingsXml] for meetingXml in meetingsXml: meetings.append(Meeting(meetingXml)) From dd232348b5a69af37977ca344f15fcad0da2d27d Mon Sep 17 00:00:00 2001 From: Iakov Miikhoparkin Date: Sat, 16 May 2020 19:44:28 +0300 Subject: [PATCH 3/3] fix checksum generation for unicode literals --- bigbluebutton_api_python/util/urlbuilder.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bigbluebutton_api_python/util/urlbuilder.py b/bigbluebutton_api_python/util/urlbuilder.py index 348a561..2322743 100644 --- a/bigbluebutton_api_python/util/urlbuilder.py +++ b/bigbluebutton_api_python/util/urlbuilder.py @@ -1,5 +1,6 @@ from hashlib import sha1 +from urllib import request from re import match class UrlBuilder: @@ -22,7 +23,7 @@ def buildUrl(self, api_call, params={}): value = "true" if value else "false" else: value = str(value) - url += key + "=" + value + "&" + url += key + "=" + request.quote(value.encode('utf-8')) + "&" url += "checksum=" + self.__get_checksum(api_call, params) return url @@ -34,8 +35,9 @@ def __get_checksum(self, api_call, params={}): value = "true" if value else "false" else: value = str(value) - secret_str += key + "=" + value + "&" + secret_str += key + "=" + request.quote(value.encode('utf-8')) + "&" if secret_str.endswith("&"): secret_str = secret_str[:-1] secret_str += self.securitySalt + request.quote(secret_str, 'utf-8') return sha1(secret_str.encode('utf-8')).hexdigest()