SignalBoxes.collect_non_national_rail_codes

SignalBoxes.collect_non_national_rail_codes(confirmation_required=True, verbose=False, raise_error=False)[source]

Collects signal box prefix codes for non-national rail from the source web page.

This method retrieves the target URL from the catalogue, prompts for user confirmation if required and delegates data parsing to _collect_non_national_rail_codes.

Parameters:
  • confirmation_required (bool) – Whether user confirmation is required before proceeding; defaults to True.

  • verbose (bool | int) – Whether to print progress to the console; defaults to False.

  • raise_error (bool) – Whether to raise an exception if data collection fails; defaults to False.

Returns:

A dictionary containing non-national rail signal box prefix codes and last updated date, or None if collection fails.

Return type:

dict | None

Raises:

ValueError – If the catalogue is unavailable or missing the target URL when raise_error is True.

Examples:

>>> from pyrcs.other_assets import SignalBoxes  # from pyrcs import SignalBoxes

>>> sb = SignalBoxes()

>>> nnr_codes: dict = sb.collect_non_national_rail_codes(verbose=True)
Proceed with collecting data of "non-national rail signal box prefix codes"?
 [No]|Yes: yes
Collecting the data ... Done.

>>> list(nnr_codes)
['Non-National Rail', 'Last updated date']

>>> nnr_codes_dat = nnr_codes['Non-National Rail']
>>> type(nnr_codes_dat)
dict
>>> list(nnr_codes_dat)
['Croydon Tramlink signals',
 'Docklands Light Railway signals',
 'Edinburgh Tramway signals',
 'Glasgow Subway signals',
 'London Underground signals',
 'Luas signals',
 'Manchester Metrolink signals',
 'Midland Metro signals',
 'Nottingham Tram signals',
 'Sheffield Supertram signals',
 'Tyne & Wear Metro signals',
 "Heritage, minor and miniature railways and other 'special' signals"]

>>> lu_signals_codes = nnr_codes_dat['London Underground signals']
>>> type(lu_signals_codes)
dict
>>> list(lu_signals_codes)
['Codes', 'Notes']

>>> lu_signals_codes_df = lu_signals_codes['Codes']
>>> lu_signals_codes_df.shape
(485, 5)
>>> lu_signals_codes_df.head()
  Code  ... Became or taken over by (where known)
0  BMX  ...                                     -
1    A  ...                                     -
2    S  ...                                     -
3    X  ...                                     -
4    R  ...                                     -
[5 rows x 5 columns]