Source code for httpwriter

#!/usr/bin/env python
"""
.. module:: httpwriter.py
   :platform: Unix, Windows
   :synopsis: Ulyxes - an open source project to drive total stations and
       publish observation results.
       GPL v2.0 license
       Copyright (C) 2010- Zoltan Siki <siki.zoltan@epito.bme.hu>

.. moduleauthor:: Zoltan Siki <siki.zoltan@epito.bme.hu>
"""

import logging
try:
    from urllib.request import urlopen, Request # for python 3
    from urllib.parse import urlencode
    from urllib.error import HTTPError, URLError
except ImportError:
    from urllib import urlencode
    from urllib2 import urlopen, Request        # for python 2
    from urllib2 import HTTPError
from writer import Writer

[docs] class HttpWriter(Writer): """ Class to write observations to a web server (HTTP GET/POST) :param name: name of writer (str) :param angle: angle unit to use (str) :param dist: distance and coordinate format (str) :param dt: date/time format (str), default ansi :param filt: list of allowed keys (list) :param url: url to server side script (str) :param mode: GET/POST """ def __init__(self, name=None, angle='GON', dist='.3f', dt='%Y-%m-%d %H:%M:%S', filt=None, url='http://localhost/monitoring/get.php', mode='GET'): """ Constructor """ super().__init__(name, angle, dist, dt, filt) self.url = url self.mode = mode
[docs] def WriteData(self, data): """ Write observation data to server :param data: dictionary with observation data :returns: server answer or negative error code """ par = {} if data is None or self.DropData(data): logging.warning(" empty or inappropiate data not written") return -1 # add datetime and/or id data = self.ExtendData(data) for key, val in data.items(): if self.filt is None or key in self.filt: par[key] = self.StrVal(val) if self.mode == 'GET': try: res = urlopen(self.url + '?' + urlencode(par)).read() if len(res.strip()) == 0: res = 0 else: res = int(res) except HTTPError as err: logging.error("http error %d %s ", err.code, err.msg) res = -err.code except URLError: logging.error("URL error") res = -2 else: try: d = urlencode(par).encode('ascii') req = Request(self.url, d) res = urlopen(req).read() if len(res.strip()) == 0: res = 0 else: res = int(res) except HTTPError as err: logging.error("http error %d %s ", err.code, err.msg) res = -err.code except URLError: logging.error("URL error") res = -2 return res
if __name__ == "__main__": myfile = HttpWriter(mode='GET', url="http://localhos/get.php") dd = {'id': '111', 'east': 123, 'north': 543, 'datetime': '2023-11-20 17:00:03'} print(myfile.WriteData(dd))