testsAndMisc/python_pkg/polish_license_plates/license_plate_data.py
Copilot 7a211649b9 Add Polish license plate Anki flashcard generator with Wikipedia data extraction and caching (#4)
* Initial plan

* Add Polish license plate Anki generator with bidirectional cards

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Add comprehensive README for Polish license plates package

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Fix license plate data: correct WT (Wawer) and WWY (Wyszków) mappings

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Add Wikipedia scraper for automatic license plate data extraction

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Improve fetch_license_plates: add constants and update User-Agent

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Add caching to Wikipedia scraper to avoid unnecessary requests

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

* Add error handling for cache file operations

Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kuhyx <147418882+kuhyx@users.noreply.github.com>
2026-01-18 14:30:22 +01:00

490 lines
12 KiB
Python

"""Database of Polish car license plate registration codes.
This module contains a comprehensive mapping of Polish vehicle registration
plate codes to their corresponding locations (cities, powiats, voivodeships).
Polish license plates use a system where:
- First letter indicates the voivodeship (province)
- Following 1-2 letters indicate the specific city or powiat (county)
The database is organized by voivodeships in alphabetical order:
- B: Podlaskie
- C: Kujawsko-Pomorskie
- D: Dolnośląskie
- E: Łódzkie
- F: Lubuskie
- G: Pomorskie
- K: Małopolskie
- L: Lubelskie
- N: Warmińsko-Mazurskie
- O: Opolskie
- P: Wielkopolskie
- R: Podkarpackie
- S: Śląskie
- T: Świętokrzyskie
- W: Mazowieckie
- Z: Zachodniopomorskie
Data source:
Wikipedia - Vehicle registration plates of Poland
https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Poland
Note:
This data can be automatically updated by running:
python -m python_pkg.polish_license_plates.fetch_license_plates
Examples:
WA = Warszawa (Warsaw)
KR = Kraków
GD = Gdańsk
"""
from __future__ import annotations
LICENSE_PLATE_CODES: dict[str, str] = {
"DA": "Wrocław Fabryczna",
"DB": "Wałbrzych",
"DC": "Wrocław Śródmieście",
"DD": "Dzierżoniów",
"DE": "Wrocław Psie Pole",
"DF": "Wrocław Krzyki",
"DG": "Głogów",
"DH": "Wrocław Stare Miasto",
"DJ": "Jelenia Góra",
"DK": "Kłodzko",
"DL": "Legnica",
"DLB": "Lubań",
"DLE": "Legnica powiat",
"DMI": "Milicz",
"DN": "Wrocław Nowy Dwór",
"DO": "Oława",
"DP": "Polkowice",
"DR": "Wrocław Krzyki",
"DS": "Świdnica",
"DSR": "Środa Śląska",
"DSW": "Świebodzice",
"DT": "Twardogóra",
"DTR": "Trzebnica",
"DW": "Wałbrzych powiat",
"DWL": "Wołów",
"DWR": "Wrocław",
"DZ": "Zgorzelec",
"DZA": "Ząbkowice Śląskie",
"DZG": "Zgorzelec powiat",
"CB": "Bydgoszcz",
"CBR": "Brodnica",
"CC": "Chełmno",
"CD": "Świecie",
"CE": "Inowrocław",
"CG": "Grudziądz",
"CH": "Chojnice",
"CI": "Inowrocław powiat",
"CL": "Lipno",
"CMG": "Mogilno",
"CN": "Nakło nad Notecią",
"CR": "Radziejów",
"CT": "Toruń",
"CTR": "Toruń powiat",
"CTU": "Tuchola",
"CW": "Włocławek",
"CWA": "Wąbrzeźno",
"CWL": "Włocławek powiat",
"CZ": "Żnin",
"LB": "Biała Podlaska",
"LBI": "Biłgoraj",
"LC": "Chełm",
"LCH": "Chełm powiat",
"LHR": "Hrubieszów",
"LI": "Janów Lubelski",
"LKR": "Kraśnik",
"LKS": "Krasnystaw",
"LL": "Lublin",
"LLE": "Łęczna",
"LLU": "Łuków",
"LM": "Biała Podlaska powiat",
"LOP": "Opole Lubelskie",
"LPA": "Parczew",
"LPU": "Puławy",
"LRA": "Radzyń Podlaski",
"LRY": "Ryki",
"LSI": "Świdnik",
"LT": "Tomaszów Lubelski",
"LU": "Lublin powiat",
"LWL": "Włodawa",
"LZ": "Zamość",
"LZA": "Zamość powiat",
"FG": "Gorzów Wielkopolski",
"FKR": "Krosno Odrzańskie",
"FMI": "Międzyrzecz",
"FNW": "Nowa Sól",
"FSD": "Strzelce-Drezdenko",
"FSL": "Słubice",
"FSU": "Sulęcin",
"FSW": "Świebodzin",
"FWS": "Wschowa",
"FZ": "Zielona Góra",
"FZG": "Zielona Góra powiat",
"FZI": "Żagań",
"FZY": "Żary",
"EA": "Bełchatów",
"EB": "Łódź Bałuty",
"EBE": "Bełchatów powiat",
"EBR": "Brzeziny",
"EC": "Łęczyca",
"ED": "Łódź Śródmieście",
"EE": "Łódź Górna",
"EG": "Głowno",
"EK": "Kutno",
"EKU": "Kutno powiat",
"EL": "Łask",
"ELA": "Łowicz",
"ELE": "Łęczyca powiat",
"ELW": "Łowicz powiat",
"EM": "Opoczno",
"EO": "Opoczno powiat",
"EP": "Piotrków Trybunalski",
"EPA": "Pajęczno",
"EPD": "Poddębice",
"EPI": "Piotrków Trybunalski powiat",
"ER": "Rawa Mazowiecka",
"ERA": "Radomsko",
"ERW": "Rawa Mazowiecka powiat",
"ES": "Sieradz",
"ESI": "Sieradz powiat",
"ESK": "Skierniewice",
"ESR": "Skierniewice powiat",
"ET": "Tomaszów Mazowiecki",
"EW": "Wieluń",
"EWI": "Wieluń powiat",
"EZ": "Zduńska Wola",
"EZD": "Zgierz",
"KA": "Kraków Krowodrza",
"KB": "Bochnia",
"KBC": "Brzesko",
"KC": "Chrzanów",
"KCH": "Chrzanów powiat",
"KD": "Kraków Nowa Huta",
"KDA": "Dąbrowa Tarnowska",
"KE": "Kraków Śródmieście",
"KG": "Gorlice",
"KH": "Kraków Podgórze",
"KI": "Miechów",
"KK": "Kraków Śródmieście",
"KL": "Limanowa",
"KLI": "Limanowa powiat",
"KM": "Myślenice",
"KN": "Nowy Sącz",
"KNS": "Nowy Sącz powiat",
"KNT": "Nowy Targ",
"KO": "Olkusz",
"KOL": "Olkusz powiat",
"KOS": "Oświęcim",
"KP": "Proszowice",
"KR": "Kraków",
"KRA": "Kraków powiat",
"KS": "Sucha Beskidzka",
"KT": "Tarnów",
"KTA": "Tarnów powiat",
"KTT": "Tatry",
"KW": "Wadowice",
"KWA": "Wadowice powiat",
"WA": "Warszawa",
"WB": "Warszawa Bemowo",
"WBR": "Białobrzegi",
"WC": "Ciechanów",
"WCI": "Ciechanów powiat",
"WD": "Warszawa Praga Południe",
"WE": "Warszawa Praga Północ",
"WF": "Garwolin",
"WG": "Grodzisk Mazowiecki",
"WGM": "Grójec",
"WGO": "Gostynin",
"WGR": "Garwolin powiat",
"WH": "Warszawa Mokotów",
"WI": "Pruszków",
"WJ": "Józefów",
"WK": "Kozienice",
"WL": "Legionowo",
"WLI": "Lipsko",
"WLS": "Łosice",
"WM": "Mińsk Mazowiecki",
"WMA": "Maków Mazowiecki",
"WML": "Mława",
"WN": "Warszawa Białołęka",
"WND": "Nowy Dwór Mazowiecki",
"WO": "Otwock",
"WOR": "Ostrołęka",
"WOS": "Ostrów Mazowiecka",
"WOT": "Otwock powiat",
"WP": "Piaseczno",
"WPI": "Płońsk",
"WPL": "Płock",
"WPN": "Przasnysz",
"WPR": "Przysucha",
"WPU": "Pułtusk",
"WPY": "Płońsk powiat",
"WPZ": "Przasnysz powiat",
"WR": "Radom",
"WRA": "Radom powiat",
"WS": "Siedlce",
"WSC": "Sokołów Podlaski",
"WSE": "Siedlce powiat",
"WSI": "Sierpc",
"WSK": "Sochaczew",
"WSZ": "Szydłowiec",
"WT": "Warszawa Wawer",
"WU": "Warszawa Ursus",
"WV": "Ostrołęka powiat",
"WW": "Warszawa Ochota",
"WWL": "Wołomin",
"WWY": "Wyszków",
"WX": "Warszawa Ursynów",
"WY": "Warszawa Wola",
"WZ": "Żyrardów",
"WZW": "Zwoleń",
"OA": "Brzeg",
"OB": "Namysłów",
"OGL": "Głubczyce",
"OK": "Kędzierzyn-Koźle",
"OKL": "Kluczbork",
"OKR": "Krapkowice",
"OL": "Nysa",
"ONA": "Namysłów powiat",
"ONY": "Nysa powiat",
"OP": "Opole",
"OO": "Opole powiat",
"OOL": "Olesno",
"OPO": "Prudnik",
"OST": "Strzelce Opolskie",
"RB": "Brzozów",
"RBI": "Biłgoraj",
"RC": "Rzeszów Centrum",
"RD": "Dębica",
"RDE": "Dębica powiat",
"RJ": "Jarosław",
"RJA": "Jarosław powiat",
"RJS": "Jasło",
"RK": "Krosno",
"RKL": "Kolbuszowa",
"RKR": "Krosno powiat",
"RL": "Leżajsk",
"RLE": "Lesko",
"RLS": "Lubaczów",
"RLU": "Łańcut",
"RM": "Mielec",
"RMI": "Mielec powiat",
"RN": "Nisko",
"RP": "Przemyśl",
"RPR": "Przemyśl powiat",
"RPZ": "Przeworsk",
"RR": "Rzeszów",
"RRS": "Ropczyce-Sędziszów",
"RRZ": "Rzeszów powiat",
"RSA": "Sanok",
"RSN": "Sanok powiat",
"RSR": "Stalowa Wola",
"RST": "Strzyżów",
"RTA": "Tarnobrzeg",
"RZ": "Rzeszów",
"BA": "Augustów",
"BBI": "Białystok",
"BC": "Hajnówka",
"BD": "Bielsk Podlaski",
"BE": "Wysokie Mazowieckie",
"BG": "Grajewo",
"BGR": "Grajewo powiat",
"BH": "Hajnówka powiat",
"BHA": "Hajnówka",
"BI": "Białystok",
"BIA": "Białystok powiat",
"BJ": "Kolno",
"BK": "Kolno powiat",
"BKL": "Kolno",
"BL": "Łomża",
"BLM": "Łomża powiat",
"BLS": "Łomża",
"BM": "Mońki",
"BMN": "Mońki powiat",
"BO": "Sokółka",
"BP": "Zambrów",
"BPI": "Piątnica",
"BR": "Siemiatycze",
"BS": "Sokółka powiat",
"BSE": "Sejny",
"BSI": "Siemiatycze powiat",
"BSK": "Sokółka",
"BSU": "Suwałki",
"BT": "Suwałki powiat",
"BWM": "Wysokie Mazowieckie powiat",
"BZA": "Zambrów powiat",
"GA": "Gdańsk",
"GB": "Bytów",
"GBY": "Bytów powiat",
"GC": "Chojnice",
"GCH": "Chojnice powiat",
"GCZ": "Człuchów",
"GD": "Gdańsk",
"GDA": "Gdańsk powiat",
"GDY": "Gdynia",
"GI": "Kościerzyna",
"GKA": "Kartuzy",
"GKS": "Kościerzyna powiat",
"GKW": "Kwidzyn",
"GL": "Lębork",
"GLE": "Lębork powiat",
"GMB": "Malbork",
"GND": "Nowy Dwór Gdański",
"GP": "Puck",
"GPU": "Puck powiat",
"GS": "Słupsk",
"GSL": "Słupsk powiat",
"GSP": "Starogard Gdański",
"GST": "Sztum",
"GT": "Tczew",
"GTB": "Tczew powiat",
"GW": "Wejherowo",
"GWE": "Wejherowo powiat",
"SA": "Sosnowiec",
"SB": "Bielsko-Biała",
"SBB": "Bielsko-Biała powiat",
"SBE": "Będzin",
"SBI": "Bieruń-Lędziny",
"SC": "Chorzów",
"SCH": "Cieszyn",
"SCI": "Cieszyn powiat",
"SD": "Dąbrowa Górnicza",
"SF": "Racibórz",
"SG": "Gliwice",
"SGI": "Gliwice powiat",
"SH": "Chorzów",
"SI": "Siemianowice Śląskie",
"SJ": "Jastrzębie-Zdrój",
"SJZ": "Jastrzębie-Zdrój",
"SK": "Katowice",
"SKA": "Katowice powiat",
"SKL": "Kłobuck",
"SKT": "Lubliniec",
"SL": "Rybnik",
"SLU": "Lubliniec powiat",
"SM": "Mysłowice",
"SMI": "Mikołów",
"SML": "Myszków",
"SN": "Nowy Targ",
"SO": "Sosnowiec powiat",
"SP": "Piekary Śląskie",
"SPI": "Pszczyna",
"SPS": "Pszczyna powiat",
"SR": "Rybnik powiat",
"SRC": "Racibórz powiat",
"SRY": "Rybnik",
"SS": "Świętochłowice",
"ST": "Tychy",
"STA": "Tarnowskie Góry",
"STG": "Tarnowskie Góry powiat",
"SW": "Wodzisław Śląski",
"SWD": "Wodzisław Śląski powiat",
"SY": "Ruda Śląska",
"SZ": "Zabrze",
"SZA": "Zawiercie",
"SZO": "Żory",
"SZY": "Żywiec",
"TB": "Busko-Zdrój",
"TBU": "Busko-Zdrój powiat",
"TJE": "Jędrzejów",
"TK": "Kielce",
"TKA": "Kazimierza Wielka",
"TKI": "Kielce powiat",
"TKN": "Końskie",
"TKO": "Końskie powiat",
"TOS": "Ostrołęka",
"TPI": "Pińczów",
"TSA": "Sandomierz",
"TSK": "Skarżysko-Kamienna",
"TST": "Starachowice",
"TWL": "Włoszczowa",
"NBA": "Bartoszyce",
"NBR": "Braniewo",
"NDZ": "Działdowo",
"NE": "Elbląg",
"NEL": "Elbląg powiat",
"NEB": "Ełk",
"NEK": "Ełk powiat",
"NG": "Giżycko",
"NGI": "Giżycko powiat",
"NGO": "Gołdap",
"NI": "Iława",
"NKE": "Kętrzyn",
"NL": "Lidzbark Warmiński",
"NMR": "Mrągowo",
"NNI": "Nidzica",
"NO": "Olsztyn",
"NOE": "Olecko",
"NOL": "Olsztyn powiat",
"NOS": "Ostróda",
"NPI": "Pisz",
"NSZ": "Szczytno",
"NW": "Węgorzewo",
"PCD": "Czarnków-Trzcianka",
"PCH": "Chodzież",
"PGN": "Gniezno",
"PGO": "Gostyń",
"PGR": "Grodzisk Wielkopolski",
"PIA": "Piła",
"PJ": "Jarocin",
"PJA": "Jarocin powiat",
"PK": "Kępno",
"PKA": "Kalisz",
"PKL": "Kalisz powiat",
"PKN": "Koło",
"PKO": "Konin",
"PKS": "Kościan",
"PL": "Leszno",
"PLE": "Leszno powiat",
"PMI": "Międzychód",
"PNT": "Nowy Tomyśl",
"PO": "Poznań",
"POB": "Oborniki",
"POL": "Ostrów Wielkopolski",
"POP": "Opole",
"POS": "Ostrzeszów",
"POT": "Ostrów Wielkopolski powiat",
"PP": "Pleszew",
"PPI": "Piła powiat",
"PPL": "Pleszew powiat",
"PRA": "Poznań powiat",
"PRS": "Rawicz",
"PSE": "Śrem",
"PSL": "Słupca",
"PSR": "Środa Wielkopolska",
"PSZ": "Szamotuły",
"PT": "Turek",
"PTU": "Turek powiat",
"PW": "Wągrowiec",
"PWA": "Wągrowiec powiat",
"PWL": "Wolsztyn",
"PWR": "Września",
"PZ": "Poznań",
"PZL": "Złotów",
"ZBI": "Białogard",
"ZCH": "Choszczno",
"ZG": "Gryfice",
"ZGR": "Gryfino",
"ZI": "Stargard",
"ZK": "Kołobrzeg",
"ZKA": "Kamień Pomorski",
"ZKL": "Kołobrzeg powiat",
"ZKO": "Koszalin",
"ZKS": "Koszalin powiat",
"ZL": "Łobez",
"ZM": "Myślibórz",
"ZPL": "Pyrzyce",
"ZPO": "Police",
"ZS": "Szczecin",
"ZSL": "Sławno",
"ZST": "Stargard powiat",
"ZSW": "Świnoujście",
"ZSZ": "Szczecinek",
"ZW": "Wałcz",
"ZZ": "Szczecin powiat",
}