Skip to content

Paths

DefaultPaths

Stores the default locations of the various configuration .yaml files so they are all in one place.

Source code in june/paths.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
class DefaultPaths:
    """Stores the default locations of the various configuration .yaml files so they are all in one place.  

    """
        # self.default_sector_beta_filename = (
        #     paths.configs_path / "defaults/interaction/sector_beta.yaml"
        # )
        # self.default_hierarchy_filename = (
        #     paths.data_path / "input/geography/area_super_area_region.csv"
        # )
        # self.default_area_coord_filename = (
        #     paths.data_path / "input/geography/area_coordinates_sorted.csv"
        # )
        # self.default_superarea_coord_filename = (
        #     paths.data_path / "input/geography/super_area_coordinates_sorted.csv"
        # )
        # self.default_area_socioeconomic_index_filename = (
        #     paths.data_path / "input/geography/socioeconomic_index.csv"
        # )
    def __find_path_for_name(name: str, look_in_package=True) -> Path:
        """Get a path input using a flag when the program is run.

        If no such argument is given default to the directory above
        the june with the name of the flag appended.

        e.g. --data indicates where the data folder is and defaults
        to june/../data

        Args:
            name (str): A string such as "data" which corresponds to the flag --data
            look_in_package (bool, optional): (Default value = True)

        Returns:
            A path: 

        """
        flag = f"--{name}"
        try:
            path = Path(argv[argv.index(flag) + 1])
            if not path.exists():
                raise FileNotFoundError(f"No such folder {path}")
        except (IndexError, ValueError):
            path = find_default(name, look_in_package=look_in_package)
            logger.warning(f"No {flag} argument given - defaulting to:\n{path}")

        return path


    @classmethod
    def get_default_data_path(cls):
        try:
            data_path = cls.__find_path_for_name("data", look_in_package=True)
        except FileNotFoundError:
            answer = input(
                "I couldn't find any data folder, do you want me to download it for you? (y/N) "
            )
            if answer == "y":
                script_path = Path(__file__).parent.parent / "scripts" / "get_june_data.sh"
                with open(script_path, "rb") as file:
                    script = file.read()
                    rc = subprocess.call(script, shell=True)
                data_path = cls.__find_path_for_name("data", look_in_package=True)
            else:
                print("Could not find any data folder.")

        return data_path


    @classmethod
    def get_default_config_path(cls):
        return cls.__find_path_for_name("configs")

    @classmethod
    def get_default_areas_map_path(cls):
        return cls.get_default_data_path() / "input/geography/area_super_area_region.csv"

    @classmethod
    def get_default_hobbies_path(cls):
        return cls.get_default_config_path() / "defaults/demography/hobbies.yaml"

    @classmethod
    def get_default_demography_data_path(cls):
        return cls.get_default_data_path()  / "input/demography"

    @classmethod
    def get_default_demography(cls, sex: str):
        if sex == 'male':
            return cls.get_default_demography_data_path() / "sampled_single_year_male_ew.csv"
        elif sex == 'female':
            return cls.get_default_demography_data_path() / "sampled_single_year_female_ew.csv"

    @classmethod
    def get_default_ethnicity_structure(cls):
        return cls.get_default_demography_data_path() / "ethnicity_structure.csv"

    @classmethod
    def get_default_comorbidities(cls, sex: str):
        if sex == 'male':
            return cls.get_default_demography_data_path() / "uk_male_comorbidities.csv"
        elif sex == 'female':
            return cls.get_default_demography_data_path() / "uk_female_comorbidities.csv"

__find_path_for_name(name, look_in_package=True)

Get a path input using a flag when the program is run.

If no such argument is given default to the directory above the june with the name of the flag appended.

e.g. --data indicates where the data folder is and defaults to june/../data

Parameters:

Name Type Description Default
name str

A string such as "data" which corresponds to the flag --data

required
look_in_package bool

(Default value = True)

True

Returns:

Type Description
Path

A path:

Source code in june/paths.py
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
def __find_path_for_name(name: str, look_in_package=True) -> Path:
    """Get a path input using a flag when the program is run.

    If no such argument is given default to the directory above
    the june with the name of the flag appended.

    e.g. --data indicates where the data folder is and defaults
    to june/../data

    Args:
        name (str): A string such as "data" which corresponds to the flag --data
        look_in_package (bool, optional): (Default value = True)

    Returns:
        A path: 

    """
    flag = f"--{name}"
    try:
        path = Path(argv[argv.index(flag) + 1])
        if not path.exists():
            raise FileNotFoundError(f"No such folder {path}")
    except (IndexError, ValueError):
        path = find_default(name, look_in_package=look_in_package)
        logger.warning(f"No {flag} argument given - defaulting to:\n{path}")

    return path

find_default(name, look_in_package=True)

Get a default path when no command line argument is passed.

  • First attempt to find the folder in the current working directory.
  • If it is not found there then try the directory in which June lives.
  • Finally, try the directory above the current working directory. This is for the build pipeline.

This means that tests will find the configuration regardless of whether they are run together or individually.

Parameters:

Name Type Description Default
name str

The name of some folder

required
look_in_package bool

(Default value = True)

True

Returns:

Type Description
Path

The full path to that directory:

Source code in june/paths.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def find_default(name: str, look_in_package=True) -> Path:
    """Get a default path when no command line argument is passed.

    - First attempt to find the folder in the current working directory.
    - If it is not found there then try the directory in which June lives.
    - Finally, try the directory above the current working directory. This
    is for the build pipeline.

    This means that tests will find the configuration regardless of whether
    they are run together or individually.

    Args:
        name (str): The name of some folder
        look_in_package (bool, optional): (Default value = True)

    Returns:
        The full path to that directory: 

    """
    directories_to_look = [working_directory, working_directory_parent]
    if look_in_package:
        directories_to_look.append(project_directory)
        directories_to_look.append(project_directory.parent)
    for directory in directories_to_look:
        path = directory / name
        if os.path.exists(path):
            return path
    raise FileNotFoundError(f"Could not find a default path for {name}")

path_for_name(name, look_in_package=True)

Get a path input using a flag when the program is run.

If no such argument is given default to the directory above the june with the name of the flag appended.

e.g. --data indicates where the data folder is and defaults to june/../data

Parameters:

Name Type Description Default
name str

A string such as "data" which corresponds to the flag --data

required
look_in_package bool

(Default value = True)

True

Returns:

Type Description
Path

A path:

Source code in june/paths.py
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def path_for_name(name: str, look_in_package=True) -> Path:
    """Get a path input using a flag when the program is run.

    If no such argument is given default to the directory above
    the june with the name of the flag appended.

    e.g. --data indicates where the data folder is and defaults
    to june/../data

    Args:
        name (str): A string such as "data" which corresponds to the flag --data
        look_in_package (bool, optional): (Default value = True)

    Returns:
        A path: 

    """
    flag = f"--{name}"
    try:
        path = Path(argv[argv.index(flag) + 1])
        if not path.exists():
            raise FileNotFoundError(f"No such folder {path}")
    except (IndexError, ValueError):
        path = find_default(name, look_in_package=look_in_package)
        logger.warning(f"No {flag} argument given - defaulting to:\n{path}")

    return path