Skip to content

Commit af0fe9c

Browse files
authored
1.0.1rc2 (#41)
1 parent fc9512b commit af0fe9c

File tree

3 files changed

+77
-29
lines changed

3 files changed

+77
-29
lines changed

pyrcs/data/.metadata

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"Author": "Qian Fu",
66
"Affiliation": "School of Engineering, University of Birmingham",
77
"Email": "q.fu@bham.ac.uk",
8-
"Version": "1.0.1rc1",
8+
"Version": "1.0.1rc2",
99
"License": "MIT License",
1010
"First release": "August 2019"
1111
}

pyrcs/line_data/elr_mileage.py

+15-22
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ def _parse_mileages(mileages):
9595
miles_chains = mileage_.map(mileage_to_mile_chain) # Warning: Might contain issues!
9696

9797
else:
98-
# miles_chains = mileage.map(lambda x: re.sub(r'/?\d+\.\d+km/?', '', x))
9998
miles_chains = mileage.str.replace(r'/?\d+\.\d+km/?', '', regex=True)
10099
mileage_ = miles_chains.map(mile_chain_to_mileage)
101100

@@ -123,13 +122,6 @@ def _parse_mileages(mileages):
123122

124123

125124
def _parse_node(node):
126-
# node_x = node_x.replace(
127-
# ' with Freightliner terminal', ' & Freightliner Terminal').replace(
128-
# ' with curve to', ' with').replace(
129-
# ' (0.37 long)', '')
130-
# pat = re.compile(
131-
# r'\w+.*( \(\d+\.\d+\))?(/| and \w+)? with '
132-
# r'([A-Z]){3}(\d)?( \(\d+\.\d+\))?')
133125
pat = re.compile(r'\w+.*( \(\d+\.\d+\))?(/| and \w+)? with ([A-Z]).*(\d)?( \(\d+\.\d+\))?')
134126

135127
if re.match(pat, node):
@@ -954,29 +946,30 @@ def collect_mileage_file(self, elr, parsed=True, confirmation_required=True, dum
954946

955947
elr_ = remove_punctuation(elr).upper()
956948

957-
if elr_ != '':
958-
949+
if elr_:
959950
if confirmed(f"To collect mileage file of \"{elr_}\"\n?", confirmation_required):
960-
961-
if verbose == 2:
962-
print(f"Collecting mileage file of \"{elr_}\"", end=" ... ")
951+
if verbose in {True, 1}:
952+
message_ = "Collecting the mileage file"
953+
if not confirmation_required:
954+
message_ += f' of "{elr_}"'
955+
print(message_, end=" ... ")
963956

964957
try:
965958
url = home_page_url() + f'/elrs/_mileages/{elr_[0]}/{elr_}.shtm'.lower()
966959
source = requests.get(url=url, headers=fake_requests_headers())
967960

968961
except Exception as e:
969962
print_inst_conn_err(verbose=verbose, e=e)
963+
return None
970964

971-
else:
972-
try:
973-
return self._collect_mileage_file(
974-
source=source, elr=elr_, parsed=parsed, dump_it=dump_it,
975-
verbose=verbose)
965+
try:
966+
return self._collect_mileage_file(
967+
source=source, elr=elr_, parsed=parsed, dump_it=dump_it,
968+
verbose=verbose)
976969

977-
except Exception as e:
978-
_print_failure_message(
979-
e=e, prefix="Errors:", verbose=verbose, raise_error=raise_error)
970+
except Exception as e:
971+
_print_failure_message(
972+
e=e, prefix="Errors:", verbose=verbose, raise_error=raise_error)
980973

981974
def fetch_mileage_file(self, elr, update=False, dump_dir=None, verbose=False,
982975
raise_error=False):
@@ -1293,6 +1286,6 @@ def get_conn_mileages(self, start_elr, end_elr, update=False, **kwargs):
12931286
start_dest_mileage, conn_orig_mileage = '', ''
12941287

12951288
else:
1296-
return [''] * 5
1289+
return tuple([''] * 5)
12971290

12981291
return start_dest_mileage, conn_elr, conn_orig_mileage, conn_dest_mileage, end_orig_mileage

tests/test_elr_mileage.py

+61-6
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,28 @@
1010
from pyrcs.line_data import ELRMileages
1111

1212

13+
def test__parse_mileages():
14+
from pyrcs.line_data.elr_mileage import _parse_mileages
15+
16+
test_data = [['8.69 km', '10.12 km'], ['8.69', '10.12']]
17+
18+
for i, dat in enumerate(test_data):
19+
test_mileages = pd.Series(data=dat, index=[0, 1], name='Mileage')
20+
parsed_mileage = _parse_mileages(test_mileages)
21+
assert parsed_mileage.columns.tolist() == ['Mileage', 'Mileage_Note', 'Miles_Chains']
22+
if i == 0:
23+
assert parsed_mileage['Mileage_Note'].str.contains('km').all()
24+
else:
25+
assert parsed_mileage['Mileage_Note'].tolist() == ['', '']
26+
27+
1328
class TestELRMileages:
1429

1530
@pytest.fixture(scope='class')
1631
def em(self):
1732
return ELRMileages()
1833

19-
def test_collect_elr(self, em, capfd):
34+
def test_collect_elr(self, em, capfd, monkeypatch):
2035
test_initials = ['a', 'q']
2136
for initial in test_initials:
2237
elr_codes = em.collect_elr(initial=initial, confirmation_required=False, verbose=True)
@@ -27,11 +42,27 @@ def test_collect_elr(self, em, capfd):
2742
assert f'beginning with "{test_initial}"' in out and "Done." in out
2843

2944
assert isinstance(elr_codes, dict)
30-
assert list(elr_codes.keys()) == [test_initial, 'Last updated date']
45+
assert list(elr_codes.keys()) == [test_initial, em.KEY_TO_LAST_UPDATED_DATE]
3146

3247
elrs_codes_dat = elr_codes[test_initial]
3348
assert isinstance(elrs_codes_dat, pd.DataFrame)
3449

50+
test_initial = 'B'
51+
52+
monkeypatch.setattr('builtins.input', lambda _: "No")
53+
elr_codes = em.collect_elr(initial='b', verbose=True)
54+
assert elr_codes is None
55+
56+
monkeypatch.setattr('builtins.input', lambda _: "Yes")
57+
elr_codes = em.collect_elr(initial=test_initial, verbose=True)
58+
out, _ = capfd.readouterr()
59+
assert "Collecting the data" in out and "Done." in out
60+
61+
assert isinstance(elr_codes, dict)
62+
assert list(elr_codes.keys()) == [test_initial, em.KEY_TO_LAST_UPDATED_DATE]
63+
elrs_codes_dat = elr_codes[test_initial]
64+
assert isinstance(elrs_codes_dat, pd.DataFrame)
65+
3566
@pytest.mark.parametrize('update', [False, True])
3667
def test_fetch_elr(self, em, update):
3768
elrs_codes = em.fetch_elr(update=update, verbose=True)
@@ -42,24 +73,45 @@ def test_fetch_elr(self, em, update):
4273
elrs_codes_dat = elrs_codes[em.KEY]
4374
assert isinstance(elrs_codes_dat, pd.DataFrame)
4475

45-
def test_collect_mileage_file(self, em):
46-
test_elrs = ['CJD', 'GAM', 'SLD', 'ELR']
76+
def test_collect_mileage_file(self, em, monkeypatch, capfd):
77+
test_elrs = ['GAM', 'SLD', 'ELR']
4778
for test_elr in test_elrs:
4879
test_mileage_file = em.collect_mileage_file(
4980
elr=test_elr, confirmation_required=False, verbose=True)
50-
81+
out, _ = capfd.readouterr()
82+
assert f'Collecting the mileage file of "{test_elr}" ... Done.' in out
5183
assert isinstance(test_mileage_file, dict)
5284
assert list(test_mileage_file.keys()) == ['ELR', 'Line', 'Sub-Line', 'Mileage', 'Notes']
5385
assert isinstance(test_mileage_file['Mileage'], pd.DataFrame)
5486

87+
test_elr = 'CJD'
88+
89+
monkeypatch.setattr('builtins.input', lambda _: "No")
90+
test_mileage_file = em.collect_mileage_file(elr=test_elr, verbose=True)
91+
assert test_mileage_file is None
92+
93+
monkeypatch.setattr('builtins.input', lambda _: "Yes")
94+
test_mileage_file = em.collect_mileage_file(elr='CJD', verbose=True)
95+
out, _ = capfd.readouterr()
96+
assert 'Collecting the mileage file ... Done.' in out and "Done." in out
97+
assert isinstance(test_mileage_file, dict)
98+
assert list(test_mileage_file.keys()) == ['ELR', 'Line', 'Sub-Line', 'Mileage', 'Notes']
99+
assert isinstance(test_mileage_file['Mileage'], pd.DataFrame)
100+
55101
@pytest.mark.parametrize('update', [False, True])
56-
def test_fetch_mileage_file(self, em, update):
102+
def test_fetch_mileage_file(self, em, update, tmp_path, capfd):
57103
test_elrs = ['AAL', 'MLA']
58104
for test_elr in test_elrs:
59105
test_mileage_file = em.fetch_mileage_file(elr=test_elr, update=update, verbose=True)
60106
assert isinstance(test_mileage_file, dict)
61107
assert isinstance(test_mileage_file['Mileage'], (pd.DataFrame, dict))
62108

109+
test_mileage_file = em.fetch_mileage_file(elr='AAL', verbose=2, dump_dir=tmp_path)
110+
out, _ = capfd.readouterr()
111+
assert "Saving" in out and "Done." in out
112+
assert isinstance(test_mileage_file, dict)
113+
assert isinstance(test_mileage_file['Mileage'], (pd.DataFrame, dict))
114+
63115
def test_search_conn(self, em):
64116
elr_1, elr_2 = 'AAM', 'ANZ'
65117

@@ -78,6 +130,9 @@ def test_get_conn_mileages(self, em):
78130
conn = em.get_conn_mileages(start_elr='MAC3', end_elr='DBP1')
79131
assert conn == ('', '', '', '', '')
80132

133+
conn = em.get_conn_mileages(start_elr='MAC4', end_elr='DBP4')
134+
assert conn == ('', '', '', '', '')
135+
81136

82137
if __name__ == '__main__':
83138
pytest.main()

0 commit comments

Comments
 (0)