Example #1
0
 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)
Example #2
0
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)
Example #3
0
 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
Example #4
0
 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)
Example #5
0
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)
Example #6
0
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)
Example #7
0
 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)
Example #8
0
 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)