def dhis2_connection_form(self): dhis2_conn = get_dhis2_connection(self.request.domain) initial = { 'server_url': dhis2_conn.server_url, 'username': dhis2_conn.username, 'password': dhis2_conn.password, 'skip_cert_verify': dhis2_conn.skip_cert_verify, } if dhis2_conn else {} if self.request.method == 'POST': return Dhis2ConnectionForm(self.request.POST, initial=initial) return Dhis2ConnectionForm(initial=initial)
def send_datasets(domain_name, send_now=False, send_date=None): """ Sends a data set of data values in the following format: { "dataSet": "dataSetID", "completeDate": "date", "period": "period", "orgUnit": "orgUnitID", "attributeOptionCombo", "aocID", "dataValues": [ { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "1", "comment": "comment1" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "2", "comment": "comment2" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "3", "comment": "comment3" } ] } See DHIS2 API docs for more details: https://docs.dhis2.org/master/en/developer/html/webapi_data_values.html """ if not send_date: send_date = datetime.today() dhis2_conn = get_dhis2_connection(domain_name) dataset_maps = get_dataset_maps(domain_name) if not dhis2_conn or not dataset_maps: return # Nothing to do api = JsonApiRequest( dhis2_conn.server_url, dhis2_conn.username, bz2.decompress(b64decode(dhis2_conn.password)), domain_name=domain_name, ) endpoint = 'dataValueSets' for dataset_map in dataset_maps: if send_now or dataset_map.should_send_on_date(send_date): try: dataset = dataset_map.get_dataset(send_date) except Exception as err: domain_log_level = getattr(dhis2_conn, 'log_level', logging.INFO) log_level = logging.ERROR if log_level >= domain_log_level: JsonApiLog.log( log_level, api, str(err), response_status=None, response_body=None, method_func=api.post, request_url=api.get_request_url(endpoint), ) else: api.post(endpoint, dataset)
def save(self, domain_name): try: dhis2_conn = get_dhis2_connection(domain_name) if dhis2_conn is None: dhis2_conn = Dhis2Connection(domain=domain_name) dhis2_conn.server_url = self.cleaned_data['server_url'] dhis2_conn.username = self.cleaned_data['username'] if self.cleaned_data['password']: # Don't save it if it hasn't been changed. Use simple symmetric encryption. We don't need it to be # strong, considering we'd have to store the algorithm and the key together anyway; it just # shouldn't be plaintext. dhis2_conn.password = b64encode(bz2.compress(self.cleaned_data['password'])) dhis2_conn.save() return True except Exception as err: logging.error('Unable to save DHIS2 connection: %s' % err) return False
def request_wrapper(self, *args, **kwargs): dhis2_conn = get_dhis2_connection(self.domain_name) domain_log_level = getattr(dhis2_conn, 'log_level', logging.INFO) log_level = logging.INFO request_error = '' response_status = None response_body = '' try: response = func(self, *args, **kwargs) response_status = response.status_code response_body = response.content except Exception as err: log_level = logging.ERROR request_error = str(err) raise err else: return response finally: if log_level >= domain_log_level: JsonApiLog.log(log_level, self, request_error, response_status, response_body, *args, **kwargs)
def send_datasets(domain_name, send_now=False, send_date=None): """ Sends a data set of data values in the following format: { "dataSet": "dataSetID", "completeDate": "date", "period": "period", "orgUnit": "orgUnitID", "attributeOptionCombo", "aocID", "dataValues": [ { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "1", "comment": "comment1" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "2", "comment": "comment2" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "3", "comment": "comment3" } ] } See DHIS2 API docs for more details: https://docs.dhis2.org/master/en/developer/html/webapi_data_values.html """ if not send_date: send_date = datetime.today() dhis2_conn = get_dhis2_connection(domain_name) dataset_maps = get_dataset_maps(domain_name) if not dhis2_conn or not dataset_maps: return # Nothing to do requests = Requests( domain_name, dhis2_conn.server_url, dhis2_conn.username, bz2.decompress(b64decode(dhis2_conn.password)), verify=not dhis2_conn.skip_cert_verify, ) endpoint = 'dataValueSets' for dataset_map in dataset_maps: if send_now or dataset_map.should_send_on_date(send_date): dataset = dataset_map.get_dataset(send_date) requests.post(endpoint, json=dataset)
def send_datasets(domain_name, send_now=False, send_date=None): """ Sends a data set of data values in the following format: { "dataSet": "dataSetID", "completeDate": "date", "period": "period", "orgUnit": "orgUnitID", "attributeOptionCombo", "aocID", "dataValues": [ { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "1", "comment": "comment1" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "2", "comment": "comment2" }, { "dataElement": "dataElementID", "categoryOptionCombo": "cocID", "value": "3", "comment": "comment3" } ] } See DHIS2 API docs for more details: https://docs.dhis2.org/master/en/developer/html/webapi_data_values.html """ if not send_date: send_date = datetime.today() dhis2_conn = get_dhis2_connection(domain_name) dataset_maps = get_dataset_maps(domain_name) if not dhis2_conn or not dataset_maps: return # Nothing to do requests = Requests( domain_name, dhis2_conn.server_url, dhis2_conn.username, bz2.decompress(b64decode(dhis2_conn.password)), ) endpoint = 'dataValueSets' for dataset_map in dataset_maps: if send_now or dataset_map.should_send_on_date(send_date): dataset = dataset_map.get_dataset(send_date) requests.post(endpoint, json=dataset)
def dhis2_connection_form(self): dhis2_conn = get_dhis2_connection(self.request.domain) initial = dict(dhis2_conn) if dhis2_conn else {} if self.request.method == 'POST': return Dhis2ConnectionForm(self.request.POST, initial=initial) return Dhis2ConnectionForm(initial=initial)
def dhis2_connection_form(self): dhis2_conn = get_dhis2_connection(self.request.domain) initial = dict(dhis2_conn) if dhis2_conn else {} if self.request.method == 'POST': return Dhis2ConnectionForm(self.request.POST, initial=initial) return Dhis2ConnectionForm(initial=initial)