def get_params_in_query(query_string): params = parse_qs(query_string) # Unpickle pickled data if "_pickle_" in params: unpickled = pickle.loads(binascii.unhexlify(params.pop("_pickle_"))) params.update(unpickled) return params
def get_params_in_query(query_string): """Get parameters dict from Kodi query (sys.argv[2]) Args: query_string (str): Query string passed to the addon (e.g. ?foo=bar&baz=quux) Returns: dict: Paramters found in the query string """ params = parse_qs(query_string) # Unpickle pickled data if "_pickle_" in params: unpickled = pickle.loads(binascii.unhexlify(params.pop("_pickle_"))) params.update(unpickled) return params
def parse_params(self, raw_params): if raw_params.startswith("_pickle_="): # Decode params using binascii & json raw_params = pickle.loads(binascii.unhexlify(raw_params[9:])) else: # Decode params using urlparse.parse_qs raw_params = parse_qs(raw_params) # Populate dict of params self.params.update(raw_params) # Construct separate dictionaries for callback and support params for key, value in self.params.items(): if key.startswith(u"_") and key.endswith(u"_"): self.support_params[key] = value else: self.callback_params[key] = value
def parse_args(self): """Extract arguments given by Kodi""" _, _, route, raw_params, _ = urlparse.urlsplit(sys.argv[0] + sys.argv[2]) self.selector = route if len(route) > 1 else "root" self.handle = int(sys.argv[1]) if raw_params: params = parse_qs(raw_params) self.params.update(params) # Unpickle pickled data if "_pickle_" in params: unpickled = pickle.loads(binascii.unhexlify(self.params.pop("_pickle_"))) self.params.update(unpickled) # Construct a separate dictionary for callback specific parameters self.callback_params = {key: value for key, value in self.params.items() if not (key.startswith(u"_") and key.endswith(u"_"))}
def parse_args(self, redirect=None): """Extract arguments given by Kodi""" _, _, route, raw_params, _ = urlparse.urlsplit(redirect if redirect else sys.argv[0] + sys.argv[2]) self.selector = route if len(route) > 1 else "root" self.handle = int(sys.argv[1]) if raw_params: params = parse_qs(raw_params) self.params.update(params) # Unpickle pickled data if "_pickle_" in params: unpickled = pickle.loads(binascii.unhexlify(self.params.pop("_pickle_"))) self.params.update(unpickled) # Construct a separate dictionary for callback specific parameters self.callback_params = {key: value for key, value in self.params.items() if not (key.startswith(u"_") and key.endswith(u"_"))}
def tags(plugin, url): """ List tags for a video. site: https://www.watchmojo.com/video/id/19268/ :param Route plugin: Tools related to Route callbacks. :param unicode url: The url to a video. """ plugin.category = plugin.localize(TAGS) url = url_constructor(url) source = urlquick.get(url) # Parse all video tags root_elem = source.parse("div", attrs={"id": "tags"}) for elem in root_elem.iterfind("a"): url = elem.get("href") urlparams = utils.parse_qs(url) if "q" in urlparams: search_term = urlparams["q"] item = Listitem() item.label = elem.text.title() item.set_callback(search_results, search_term) yield item
def test_parse_qs_fail(self): with self.assertRaises(ValueError): utils.parse_qs("q=search&safe=no&safe=yes")
def test_parse_qs_part(self): ret = utils.parse_qs("q=search&safe=no") self.assertIsInstance(ret, dict) self.assertDictEqual(ret, {u"q": u"search", u"safe": u"no"})
def test_parse_qs_full(self): ret = utils.parse_qs("http://example.com/path?q=search&safe=no") self.assertIsInstance(ret, dict) self.assertDictEqual(ret, {u"q": u"search", u"safe": u"no"})