def get_root_data_dir() -> str: """ Return the directory where the mephisto data is expected to go """ global loaded_data_dir if loaded_data_dir is None: default_data_dir = os.path.join(get_root_dir(), "data") actual_data_dir = get_config_arg(CORE_SECTION, DATA_STORAGE_KEY) if actual_data_dir is None: data_dir_location = input( "Please enter the full path to a location to store Mephisto run data. By default this " f"would be at '{default_data_dir}'. This dir should NOT be on a distributed file " "store. Press enter to use the default: " ).strip() if len(data_dir_location) == 0: data_dir_location = default_data_dir data_dir_location = os.path.expanduser(data_dir_location) os.makedirs(data_dir_location, exist_ok=True) # Check to see if there is existing data to possibly move to the data dir: database_loc = os.path.join(default_data_dir, "database.db") if os.path.exists(database_loc) and data_dir_location != default_data_dir: should_migrate = ( input( "We have found an existing database in the default data directory, do you want to " f"copy any existing data from the default location to {data_dir_location}? (y)es/no: " ) .lower() .strip() ) if len(should_migrate) == 0 or should_migrate[0] == "y": copy_tree(default_data_dir, data_dir_location) print( "Mephisto data successfully copied, once you've confirmed the migration worked, " "feel free to remove all of the contents in " f"{default_data_dir} EXCEPT for `README.md`." ) add_config_arg(CORE_SECTION, DATA_STORAGE_KEY, data_dir_location) loaded_data_dir = get_config_arg(CORE_SECTION, DATA_STORAGE_KEY) if not os.path.isdir(loaded_data_dir): raise NotADirectoryError( f"The provided Mephisto data directory {loaded_data_dir} as set in " f"{DEFAULT_CONFIG_FILE} is not a directory! Please locate your Mephisto " f"data directory and update {DEFAULT_CONFIG_FILE} to point to it." ) return loaded_data_dir
def create_hit_type( client: MTurkClient, task_config: "TaskConfig", qualifications: List[Dict[str, Any]], auto_approve_delay: Optional[int] = 7 * 24 * 3600, # default 1 week ) -> str: """Create a HIT type to be used to generate HITs of the requested params""" hit_title = task_config.task_title hit_description = task_config.task_description hit_keywords = ",".join(task_config.task_tags) hit_reward = task_config.task_reward assignment_duration_in_seconds = task_config.assignment_duration_in_seconds existing_qualifications = convert_mephisto_qualifications(client, qualifications) # If the user hasn't specified a location qualification, we assume to # restrict the HIT to some english-speaking countries. locale_requirements: List[Any] = [] has_locale_qual = False if existing_qualifications is not None: for q in existing_qualifications: if q["QualificationTypeId"] == MTURK_LOCALE_REQUIREMENT: has_locale_qual = True locale_requirements += existing_qualifications if not has_locale_qual and not client_is_sandbox(client): allowed_locales = get_config_arg("mturk", "allowed_locales") if allowed_locales is None: allowed_locales = [ {"Country": "US"}, {"Country": "CA"}, {"Country": "GB"}, {"Country": "AU"}, {"Country": "NZ"}, ] locale_requirements.append( { "QualificationTypeId": MTURK_LOCALE_REQUIREMENT, "Comparator": "In", "LocaleValues": allowed_locales, "ActionsGuarded": "DiscoverPreviewAndAccept", } ) # Create the HIT type response = client.create_hit_type( AutoApprovalDelayInSeconds=auto_approve_delay, AssignmentDurationInSeconds=assignment_duration_in_seconds, Reward=str(hit_reward), Title=hit_title, Keywords=hit_keywords, Description=hit_description, QualificationRequirements=locale_requirements, ) hit_type_id = response["HITTypeId"] return hit_type_id