Ejemplo n.º 1
0
    def validate(self):
        validators.validate_string(self.pipeline_name, "pipeline_name")

        validators.validate_list(self.raw_data_sources, "raw_data_sources")
        for i, raw_data_source in enumerate(self.raw_data_sources):
            assert isinstance(
                raw_data_source, RawDataSource
            ), f"raw_data_sources[{i}] is not of type of RawDataSource"
            raw_data_source.validate()

        assert isinstance(self.phone_number_uuid_table, PhoneNumberUuidTable)
        self.phone_number_uuid_table.validate()

        validators.validate_list(self.rapid_pro_key_remappings,
                                 "rapid_pro_key_remappings")
        for i, remapping in enumerate(self.rapid_pro_key_remappings):
            assert isinstance(remapping, RapidProKeyRemapping), \
                f"rapid_pro_key_mappings[{i}] is not of type RapidProKeyRemapping"
            remapping.validate()

        validators.validate_datetime(self.project_start_date,
                                     "project_start_date")
        validators.validate_datetime(self.project_end_date, "project_end_date")

        validators.validate_bool(self.filter_test_messages,
                                 "filter_test_messages")
        validators.validate_bool(self.move_ws_messages, "move_ws_messages")

        if self.drive_upload is not None:
            assert isinstance(self.drive_upload, DriveUpload), \
                "drive_upload is not of type DriveUpload"
            self.drive_upload.validate()

        validators.validate_string(self.memory_profile_upload_url_prefix,
                                   "memory_profile_upload_url_prefix")
    def validate(self):
        validators.validate_string(self.rapid_pro_domain, "rapid_pro_domain")
        validators.validate_string(self.rapid_pro_token_file_url, "rapid_pro_token_file_url")

        validators.validate_list(self.activation_flow_names, "activation_flow_names")
        for i, activation_flow_name in enumerate(self.activation_flow_names):
            validators.validate_string(activation_flow_name, f"activation_flow_names[{i}")

        validators.validate_list(self.survey_flow_names, "survey_flow_names")
        for i, survey_flow_name in enumerate(self.survey_flow_names):
            validators.validate_string(survey_flow_name, f"survey_flow_names[{i}")

        validators.validate_list(self.rapid_pro_test_contact_uuids, "rapid_pro_test_contact_uuids")
        for i, contact_uuid in enumerate(self.rapid_pro_test_contact_uuids):
            validators.validate_string(contact_uuid, f"rapid_pro_test_contact_uuids[{i}]")

        validators.validate_list(self.rapid_pro_key_remappings, "rapid_pro_key_remappings")
        for i, remapping in enumerate(self.rapid_pro_key_remappings):
            assert isinstance(remapping, RapidProKeyRemapping), \
                f"rapid_pro_key_mappings[{i}] is not of type RapidProKeyRemapping"
            remapping.validate()

        if self.drive_upload is not None:
            assert isinstance(self.drive_upload, DriveUpload), \
                "drive_upload is not of type DriveUpload"
            self.drive_upload.validate()
Ejemplo n.º 3
0
    def validate(self):
        validators.validate_string(self.time_key, "time_key")
        validators.validate_string(self.show_pipeline_key_to_remap_to, "show_pipeline_key_to_remap_to")
        validators.validate_datetime(self.range_start_inclusive, "range_start_inclusive")
        validators.validate_datetime(self.range_end_exclusive, "range_end_exclusive")

        if self.time_to_adjust_to is not None:
            validators.validate_datetime(self.time_to_adjust_to, "time_to_adjust_to")
Ejemplo n.º 4
0
    def validate(self):
        validators.validate_string(self.drive_credentials_file_url, "drive_credentials_file_url")
        assert urlparse(self.drive_credentials_file_url).scheme == "gs", "DriveCredentialsFileURL needs to be a gs " \
                                                                         "URL (i.e. of the form gs://bucket-name/file)"

        validators.validate_string(self.production_upload_path, "production_upload_path")
        validators.validate_string(self.messages_upload_path, "messages_upload_path")
        validators.validate_string(self.individuals_upload_path, "individuals_upload_path")
        validators.validate_string(self.analysis_graphs_dir, "analysis_graphs_dir")
Ejemplo n.º 5
0
    def validate(self):
        validators.validate_string(self.origin_id, "origin_id")
        validators.validate_string(self.name, "name")
        validators.validate_string(self.origin_type, "origin_type")

        if self.metadata is not None:
            validators.validate_dict(self.metadata, "metadata")
            for k, v in self.metadata.items():
                validators.validate_string(k, "self.metadata key")
                validators.validate_string(v, "self.metadata[{}]".format(v))
    def validate(self):
        validators.validate_string(self.rapid_pro_domain, "rapid_pro_domain")
        validators.validate_string(self.rapid_pro_token_file_url,
                                   "rapid_pro_token_file_url")

        validators.validate_list(self.rapid_pro_key_remappings,
                                 "rapid_pro_key_remappings")
        for i, remapping in enumerate(self.rapid_pro_key_remappings):
            assert isinstance(remapping, RapidProKeyRemapping), \
                f"self.rapid_pro_key_mappings[{i}] is not of type RapidProKeyRemapping"
            remapping.validate()
    def validate(self):
        validators.validate_string(self.page_id, "page_id")
        validators.validate_url(self.token_file_url,
                                "token_file_url",
                                scheme="gs")

        validators.validate_list(self.datasets, "datasets")
        for i, dataset in enumerate(self.datasets):
            assert isinstance(
                dataset, FacebookDataset
            ), f"datasets[{i}] is not of type FacebookDataset"
            dataset.validate()
Ejemplo n.º 8
0
    def validate(self):
        validators.validate_string(self.scheme_id, f"CodeScheme id '{self.scheme_id}'")
        validators.validate_string(self.name, f"'name' property of CodeScheme with id '{self.scheme_id}'")
        validators.validate_string(self.version, f"'version' property of CodeScheme with id '{self.scheme_id}'")

        validators.validate_list(self.codes, f"'codes' property of CodeScheme with id '{self.scheme_id}'")
        for i, code in enumerate(self.codes):
            assert isinstance(code, Code), f"'codes[{i}]' of CodeScheme with id '{self.scheme_id}' is not of type Code"
            code.validate()

        self._validate_code_values_unique([c.code_id for c in self.codes], "code_id")
        self._validate_code_values_unique([c.numeric_value for c in self.codes], "numeric_value")
        self._validate_code_values_unique([c.string_value for c in self.codes], "string_value")
        self._validate_code_values_unique([c.control_code for c in self.codes if c.code_type == CodeTypes.CONTROL], "control_code")
        self._validate_code_values_unique([c.meta_code for c in self.codes if c.code_type == CodeTypes.META], "meta_code")

        match_values = []
        for code in self.codes:
            if code.match_values is not None:
                match_values.extend(code.match_values)
        self._validate_code_values_unique(match_values, "match value")

        if self.documentation is not None:
            validators.validate_dict(
                self.documentation, f"'documentation' property of CodeScheme with id '{self.scheme_id}")
            validators.validate_string(
                self.documentation.get("URI"), f"'documentation[URI]' property of CodeScheme with id '{self.scheme_id}'")
Ejemplo n.º 9
0
    def validate(self):
        validators.validate_string(self.scheme_id, "scheme_id")
        validators.validate_string(self.code_id, "code_id")
        validators.validate_utc_iso_string(self.date_time_utc, "date_time_utc")

        if self.checked is not None:
            validators.validate_bool(self.checked, "checked")

        if self.confidence is not None:
            # Not type-checking self.confidence is a float, because Firebase can return either an int or a float.
            # Relying on >= and <= not being defined between numeric and non-numeric types to get an 'is-numeric'
            # type-check as a side-effect of the >= and <= tests.
            assert 0 <= self.confidence <= 1, "self.confidence ({}) is not in range [0, 1]".format(
                self.confidence)

        if self.label_set is not None:
            validators.validate_int(self.label_set, "label_set")

        assert isinstance(self.origin,
                          Origin), "self.origin not of type Origin"
        self.origin.validate()
Ejemplo n.º 10
0
    def validate(self):
        validators.validate_string(self.message_id, "message_id")
        validators.validate_string(self.text, "text")
        validators.validate_utc_iso_string(self.creation_date_time_utc,
                                           "creation_date_time_utc")
        validators.validate_list(self.labels, "labels")

        for i, label in enumerate(self.labels):
            assert isinstance(
                label, Label), "self.labels[{}] is not of type Label".format(i)
            label.validate()

        if self.sequence_number is not None:
            validators.validate_int(self.sequence_number, "sequence_number")

        if self.last_updated is not None:
            try:
                validators.validate_datetime(self.last_updated, "last_updated")
            except AssertionError:
                assert self.last_updated == firestore.firestore.SERVER_TIMESTAMP, \
                    f"last_updated '{self.last_updated} is not a valid datetime or Firestore sentinel"
    def validate(self):
        validators.validate_string(self.pipeline_name, "pipeline_name")

        validators.validate_list(self.raw_data_sources, "raw_data_sources")
        for i, raw_data_source in enumerate(self.raw_data_sources):
            assert isinstance(
                raw_data_source, RawDataSource
            ), f"raw_data_sources[{i}] is not of type RawDataSource"
            raw_data_source.validate()

        assert isinstance(self.uuid_table, UuidTable)
        self.uuid_table.validate()

        validators.validate_list(self.source_key_remappings,
                                 "source_key_remappings")
        for i, remapping in enumerate(self.source_key_remappings):
            assert isinstance(remapping, SourceKeyRemapping), \
                f"source_key_mappings[{i}] is not of type SourceKeyRemapping"
            remapping.validate()

        validators.validate_datetime(self.project_start_date,
                                     "project_start_date")
        validators.validate_datetime(self.project_end_date, "project_end_date")

        validators.validate_bool(self.filter_test_messages,
                                 "filter_test_messages")
        validators.validate_bool(self.move_ws_messages, "move_ws_messages")

        if self.drive_upload is not None:
            assert isinstance(self.drive_upload, DriveUpload), \
                "drive_upload is not of type DriveUpload"
            self.drive_upload.validate()

        validators.validate_url(self.memory_profile_upload_bucket,
                                "memory_profile_upload_bucket", "gs")
        validators.validate_url(self.data_archive_upload_bucket,
                                "data_archive_upload_bucket", "gs")
        validators.validate_string(self.bucket_dir_path, "bucket_dir_path")
Ejemplo n.º 12
0
    def from_firebase_map(cls, data):
        scheme_id = data["SchemeID"]
        name = data["Name"]
        version = data["Version"]

        codes = []
        for code_map in data["Codes"]:
            code = Code.from_firebase_map(code_map)
            assert code.code_id not in code_map.keys(), \
                "Non-unique Code Id found in code scheme: {}".format(code.code_id)
            codes.append(code)

        documentation = None
        if "Documentation" in data.keys():
            doc_map = data["Documentation"]
            documentation = {
                "URI": validators.validate_string(doc_map["URI"])
            }

        return cls(scheme_id, name, version, codes, documentation)
 def validate(self):
     validators.validate_string(self.name, "name")
     validators.validate_list(self.post_ids, "post_ids")
     for i, post_id in enumerate(self.post_ids):
         validators.validate_string(post_id, f"post_ids[{i}]")
 def validate(self):
     validators.validate_bool(self.is_activation_message,
                              "is_activation_message")
     validators.validate_string(self.source_key, "source_key")
     validators.validate_string(self.pipeline_key, "pipeline_key")
Ejemplo n.º 15
0
    def validate(self):
        validators.validate_string(self.rapid_pro_domain, "rapid_pro_domain")
        validators.validate_string(self.rapid_pro_token_file_url,
                                   "rapid_pro_token_file_url")

        validators.validate_list(self.activation_flow_names,
                                 "activation_flow_names")
        for i, activation_flow_name in enumerate(self.activation_flow_names):
            validators.validate_string(activation_flow_name,
                                       f"activation_flow_names[{i}]")

        validators.validate_list(self.survey_flow_names, "survey_flow_names")
        for i, survey_flow_name in enumerate(self.survey_flow_names):
            validators.validate_string(survey_flow_name,
                                       f"survey_flow_names[{i}]")

        if self.recovery_csv_urls is not None:
            validators.validate_list(self.recovery_csv_urls,
                                     "recovery_csv_urls")
            for i, recovery_csv_url in enumerate(self.recovery_csv_urls):
                validators.validate_string(recovery_csv_url,
                                           f"recovery_csv_urls[{i}]")

        validators.validate_list(self.rapid_pro_test_contact_uuids,
                                 "rapid_pro_test_contact_uuids")
        for i, contact_uuid in enumerate(self.rapid_pro_test_contact_uuids):
            validators.validate_string(contact_uuid,
                                       f"rapid_pro_test_contact_uuids[{i}]")

        assert isinstance(self.phone_number_uuid_table, PhoneNumberUuidTable)
        self.phone_number_uuid_table.validate()

        validators.validate_list(self.rapid_pro_key_remappings,
                                 "rapid_pro_key_remappings")
        for i, remapping in enumerate(self.rapid_pro_key_remappings):
            assert isinstance(remapping, RapidProKeyRemapping), \
                f"rapid_pro_key_mappings[{i}] is not of type RapidProKeyRemapping"
            remapping.validate()

        validators.validate_datetime(self.project_start_date,
                                     "project_start_date")
        validators.validate_datetime(self.project_end_date, "project_end_date")

        validators.validate_bool(self.filter_test_messages,
                                 "filter_test_messages")

        if self.filter_operator is not None:
            validators.validate_string(self.filter_operator, "filter_operator")

        if self.drive_upload is not None:
            assert isinstance(self.drive_upload, DriveUpload), \
                "drive_upload is not of type DriveUpload"
            self.drive_upload.validate()

        validators.validate_string(self.flow_definitions_upload_url_prefix,
                                   "flow_definitions_upload_url_prefix")
Ejemplo n.º 16
0
 def validate(self):
     validators.validate_url(self.firebase_credentials_file_url,
                             "firebase_credentials_file_url",
                             scheme="gs")
     validators.validate_string(self.table_name, "table_name")
Ejemplo n.º 17
0
 def validate(self):
     validators.validate_string(self.label, "label")
     validators.validate_datetime(self.start_date, "start_date")
     validators.validate_datetime(self.end_date, "end_date")
Ejemplo n.º 18
0
    def validate(self):
        validators.validate_string(self.code_id, f"Code id '{self.code_id}'")
        validators.validate_string(self.display_text, f"'display_text' property of Code with id '{self.code_id}'")

        validators.validate_string(self.code_type, f"'code_type' property of Code with id '{self.code_id}'")
        assert self.code_type in self.VALID_CODE_TYPES, f"'code_type' property '{self.code_type}' of Code with id " \
                                                        f"'{self.code_id}' is not one of {self.VALID_CODE_TYPES}"
        if self.code_type == CodeTypes.CONTROL:
            validators.validate_string(self.control_code, f"'control_code' property of Code with id '{self.code_id}'")
        if self.code_type == CodeTypes.META:
            validators.validate_string(self.meta_code, f"'meta_code' property of Code with id '{self.code_id}'")

        if self.shortcut is not None:
            validators.validate_string(self.shortcut, f"'shortcut' property of Code with id '{self.code_id}'")
            assert len(self.shortcut) == 1, f"'shortcut' property '{self.shortcut}' of Code with id '{self.code_id}' " \
                                            f"is not a single character"

        validators.validate_int(self.numeric_value, f"'numeric_value' property of Code with id '{self.code_id}'")
        validators.validate_string(self.string_value, f"'string_value' property of Code with id '{self.code_id}'")
        validators.validate_bool(self.visible_in_coda, f"'visible_in_coda' property of Code with id '{self.code_id}'")

        if self.color is not None:
            validators.validate_string(self.color, f"'color' property of Code with id '{self.code_id}'")

        if self.match_values is not None:
            validators.validate_list(self.match_values, f"'match_values' property of Code with id '{self.code_id}'")
            for i, match_value in enumerate(self.match_values):
                validators.validate_string(match_value, f"'match_values[{i}]' property of Code with id '{self.code_id}'")
Ejemplo n.º 19
0
    def validate(self):
        validators.validate_string(self.domain, "domain")
        validators.validate_string(self.token_file_url, "token_file_url")
        validators.validate_string(self.contacts_file_name,
                                   "contacts_file_name")

        validators.validate_list(self.activation_flow_names,
                                 "activation_flow_names")
        for i, activation_flow_name in enumerate(self.activation_flow_names):
            validators.validate_string(activation_flow_name,
                                       f"activation_flow_names[{i}]")

        validators.validate_list(self.survey_flow_names, "survey_flow_names")
        for i, survey_flow_name in enumerate(self.survey_flow_names):
            validators.validate_string(survey_flow_name,
                                       f"survey_flow_names[{i}]")

        validators.validate_list(self.test_contact_uuids, "test_contact_uuids")
        for i, contact_uuid in enumerate(self.test_contact_uuids):
            validators.validate_string(contact_uuid,
                                       f"test_contact_uuids[{i}]")
 def validate(self):
     validators.validate_string(self.rapid_pro_key, "rapid_pro_key")
     validators.validate_string(self.pipeline_key, "pipeline_key")
Ejemplo n.º 21
0
 def validate(self):
     validators.validate_bool(self.is_activation_message,
                              "is_activation_message")
     validators.validate_string(self.rapid_pro_key, "rapid_pro_key")
     validators.validate_string(self.pipeline_key, "pipeline_key")
    def test_validate_string(self):
        validators.validate_string("Test")
        validators.validate_string("åø")

        self._expect_validation_failure(lambda: validators.validate_string(4),
                                        " not a string")