def _get_user_case_fields(commcare_user): def valid_element_name(name): try: ElementTree.fromstring('<{}/>'.format(name)) return True except ElementTree.ParseError: return False # remove any keys that aren't valid XML element names fields = { k: v for k, v in commcare_user.user_data.items() if valid_element_name(k) } # language or phone_number can be null and will break # case submission fields.update({ 'name': commcare_user.name or commcare_user.raw_username, 'username': commcare_user.raw_username, 'email': commcare_user.email, 'language': commcare_user.language or '', 'phone_number': commcare_user.phone_number or '' }) add_inferred_export_properties.delay( 'UserSave', commcare_user.domain, USERCASE_TYPE, fields.keys(), ) return fields
def _submit_caseblocks(domain, case_type, caseblocks): err = False if caseblocks: try: form, cases = submit_case_blocks( [cb.as_string() for cb in caseblocks], domain, username, user_id, ) if form.is_error: errors.add(error=ImportErrors.ImportErrorMessage, row_number=form.problem) except Exception: err = True errors.add(error=ImportErrors.ImportErrorMessage, row_number=caseblocks[0]._id) else: properties = set().union(*map( lambda c: set(c.dynamic_case_properties().keys()), cases)) add_inferred_export_properties.delay( 'CaseImporter', domain, case_type, properties, ) return err
def submit_and_process_caseblocks(self, caseblocks): if not caseblocks: return self.pre_submit_hook() try: form, cases = self.submit_case_blocks(caseblocks) if form.is_error: raise Exception("Form error during case import: {}".format( form.problem)) except Exception: notify_exception( None, "Case Importer: Uncaught failure submitting caseblocks") for row_number, case in caseblocks: self.results.add_error(row_number, exceptions.ImportErrorMessage()) else: if self.record_form_callback: self.record_form_callback(form.form_id) properties = { p for c in cases for p in c.dynamic_case_properties().keys() } if self.config.case_type and len(properties): add_inferred_export_properties.delay( 'CaseImporter', self.domain, self.config.case_type, properties, ) else: _soft_assert = soft_assert(notify_admins=True) _soft_assert( len(properties) == 0, 'error adding inferred export properties in domain ' '({}): {}'.format(self.domain, ", ".join(properties)))
def _user_case_changed(self, fields): field_names = list(fields) if _domain_has_new_fields(self.domain, field_names): add_inferred_export_properties.delay( 'UserSave', self.domain, USERCASE_TYPE, field_names, )
def _user_case_changed(self, fields): field_names = list(fields) if _domain_has_new_fields(self.domain, field_names): add_inferred_export_properties.delay( 'UserSave', self.domain, USERCASE_TYPE, field_names, )
def _submit_caseblocks(domain, case_type, caseblocks): err = False if caseblocks: try: form, cases = submit_case_blocks( [cb.case.as_string().decode('utf-8') for cb in caseblocks], domain, username, user_id, device_id=__name__ + ".do_import", ) if form.is_error: errors.add( error=ImportErrors.ImportErrorMessage, row_number=form.problem ) except Exception: err = True for row_number, case in caseblocks: errors.add( error=ImportErrors.ImportErrorMessage, row_number=row_number ) else: if record_form_callback: record_form_callback(form.form_id) properties = set().union(*[set(c.dynamic_case_properties().keys()) for c in cases]) if case_type and len(properties): add_inferred_export_properties.delay( 'CaseImporter', domain, case_type, properties, ) else: _soft_assert = soft_assert(notify_admins=True) _soft_assert( len(properties) == 0, 'error adding inferred export properties in domain ' '({}): {}'.format(domain, ", ".join(properties)) ) return err
def _submit_caseblocks(domain, case_type, caseblocks): err = False if caseblocks: try: form, cases = submit_case_blocks( [cb.case.as_string() for cb in caseblocks], domain, username, user_id, ) if form.is_error: errors.add( error=ImportErrors.ImportErrorMessage, row_number=form.problem ) except Exception: err = True for row_number, case in caseblocks: errors.add( error=ImportErrors.ImportErrorMessage, row_number=row_number ) else: if record_form_callback: record_form_callback(form.form_id) properties = set().union(*map(lambda c: set(c.dynamic_case_properties().keys()), cases)) if case_type and len(properties): add_inferred_export_properties.delay( 'CaseImporter', domain, case_type, properties, ) else: _soft_assert = soft_assert(notify_admins=True) _soft_assert( len(properties) == 0, 'error adding inferred export properties in domain ' '({}): {}'.format(domain, ", ".join(properties)) ) return err
def _submit_caseblocks(domain, case_type, caseblocks): err = False if caseblocks: try: form, cases = submit_case_blocks( [cb.as_string() for cb in caseblocks], domain, username, user_id, ) if form.is_error: errors.add( error=ImportErrors.ImportErrorMessage, row_number=form.problem ) except Exception: err = True errors.add( error=ImportErrors.ImportErrorMessage, row_number=caseblocks[0].case_id ) else: properties = set().union(*map(lambda c: set(c.dynamic_case_properties().keys()), cases)) if case_type and len(properties): add_inferred_export_properties.delay( 'CaseImporter', domain, case_type, properties, ) else: _soft_assert = soft_assert(notify_admins=True) _soft_assert( len(properties) == 0, 'error adding inferred export properties in domain ' '({}): {}'.format(domain, ", ".join(properties)) ) return err
def _get_user_case_fields(commcare_user): def valid_element_name(name): try: ElementTree.fromstring("<{}/>".format(name)) return True except ElementTree.ParseError: return False # remove any keys that aren't valid XML element names fields = {k: v for k, v in commcare_user.user_data.items() if valid_element_name(k)} # language or phone_number can be null and will break # case submission fields.update( { "name": commcare_user.name or commcare_user.raw_username, "username": commcare_user.raw_username, "email": commcare_user.email, "language": commcare_user.language or "", "phone_number": commcare_user.phone_number or "", } ) add_inferred_export_properties.delay("UserSave", commcare_user.domain, USERCASE_TYPE, fields.keys()) return fields