diff --git a/lib/pynma/__init__.py b/lib/pynma/__init__.py index f90424eb70e977fa6f417a29fc944a6fba32e65d..a75b42855b632e050325c9d3517891cb094d086f 100644 --- a/lib/pynma/__init__.py +++ b/lib/pynma/__init__.py @@ -1,4 +1,4 @@ #!/usr/bin/python -from pynma import PyNMA +from .pynma import PyNMA diff --git a/lib/pynma/pynma.py b/lib/pynma/pynma.py index fc7d8de2eeb4cf90ec5e6ceae4fb60c6925fd3ac..2fc55560af9624dc4a7526aec27b6e5bbebef03a 100644 --- a/lib/pynma/pynma.py +++ b/lib/pynma/pynma.py @@ -1,12 +1,20 @@ #!/usr/bin/python from xml.dom.minidom import parseString -from httplib import HTTPSConnection -from urllib import urlencode -__version__ = "0.1" +try: + from http.client import HTTPSConnection +except ImportError: + from httplib import HTTPSConnection -API_SERVER = 'nma.usk.bz' +try: + from urllib.parse import urlencode +except ImportError: + from urllib import urlencode + +__version__ = "1.0" + +API_SERVER = 'www.notifymyandroid.com' ADD_PATH = '/publicapi/notify' USER_AGENT="PyNMA/v%s"%__version__ @@ -18,14 +26,14 @@ def uniq_preserve(seq): # Dave Kirby def uniq(seq): # Not order preserving - return {}.fromkeys(seq).keys() + return list({}.fromkeys(seq).keys()) class PyNMA(object): """PyNMA(apikey=[], developerkey=None) - takes 2 optional arguments: - - (opt) apykey: might me a string containing 1 key or an array of keys - - (opt) developerkey: where you can store your developer key - """ +takes 2 optional arguments: + - (opt) apykey: might me a string containing 1 key or an array of keys + - (opt) developerkey: where you can store your developer key +""" def __init__(self, apikey=[], developerkey=None): self._developerkey = None @@ -60,19 +68,20 @@ class PyNMA(object): if type(developerkey) == str and len(developerkey) == 48: self._developerkey = developerkey - def push(self, application="", event="", description="", url="", priority=0, batch_mode=False): + def push(self, application="", event="", description="", url="", contenttype=None, priority=0, batch_mode=False, html=False): """Pushes a message on the registered API keys. - takes 5 arguments: - - (req) application: application name [256] - - (req) event: event name [1000] - - (req) description: description [10000] - - (opt) url: url [512] - - (opt) priority: from -2 (lowest) to 2 (highest) (def:0) - - (opt) batch_mode: call API 5 by 5 (def:False) - - Warning: using batch_mode will return error only if all API keys are bad - cf: http://nma.usk.bz/api.php - """ +takes 5 arguments: + - (req) application: application name [256] + - (req) event: event name [1000] + - (req) description: description [10000] + - (opt) url: url [512] + - (opt) contenttype: Content Type (act: None (plain text) or text/html) + - (opt) priority: from -2 (lowest) to 2 (highest) (def:0) + - (opt) batch_mode: push to all keys at once (def:False) + - (opt) html: shortcut for contenttype=text/html +Warning: using batch_mode will return error only if all API keys are bad + cf: http://nma.usk.bz/api.php +""" datas = { 'application': application[:256].encode('utf8'), 'event': event[:1024].encode('utf8'), @@ -82,7 +91,10 @@ class PyNMA(object): if url: datas['url'] = url[:512] - + + if contenttype == "text/html" or html == True: # Currently only accepted content type + datas['content-type'] = "text/html" + if self._developerkey: datas['developerkey'] = self._developerkey @@ -94,10 +106,9 @@ class PyNMA(object): res = self.callapi('POST', ADD_PATH, datas) results[key] = res else: - for i in range(0, len(self._apikey), 5): - datas['apikey'] = ",".join(self._apikey[i:i+5]) - res = self.callapi('POST', ADD_PATH, datas) - results[datas['apikey']] = res + datas['apikey'] = ",".join(self._apikey) + res = self.callapi('POST', ADD_PATH, datas) + results[datas['apikey']] = res return results def callapi(self, method, path, args): @@ -110,7 +121,7 @@ class PyNMA(object): try: res = self._parse_reponse(resp.read()) - except Exception, e: + except Exception as e: res = {'type': "pynmaerror", 'code': 600, 'message': str(e) @@ -124,12 +135,12 @@ class PyNMA(object): for elem in root.childNodes: if elem.nodeType == elem.TEXT_NODE: continue if elem.tagName == 'success': - res = dict(elem.attributes.items()) + res = dict(list(elem.attributes.items())) res['message'] = "" res['type'] = elem.tagName return res if elem.tagName == 'error': - res = dict(elem.attributes.items()) + res = dict(list(elem.attributes.items())) res['message'] = elem.firstChild.nodeValue res['type'] = elem.tagName return res