pax_global_header00006660000000000000000000000064145401310600014504gustar00rootroot0000000000000052 comment=3fa62b1fcdfb4b13411558e1ee4ed208756489e4 sh0oki-israel-rail-api-3fa62b1/000077500000000000000000000000001454013106000162605ustar00rootroot00000000000000sh0oki-israel-rail-api-3fa62b1/.gitignore000066400000000000000000000022721454013106000202530ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ .idea/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ sh0oki-israel-rail-api-3fa62b1/.travis.yml000066400000000000000000000001661454013106000203740ustar00rootroot00000000000000language: python python: - '3.6' install: - python setup.py install script: - python -m unittest discover tests sh0oki-israel-rail-api-3fa62b1/LICENSE000066400000000000000000000020471454013106000172700ustar00rootroot00000000000000MIT License Copyright (c) 2018 Elisha Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. sh0oki-israel-rail-api-3fa62b1/MANIFEST.in000066400000000000000000000001311454013106000200110ustar00rootroot00000000000000# Include the README include *.md # Include the stations file include stations.txt sh0oki-israel-rail-api-3fa62b1/README.md000066400000000000000000000021151454013106000175360ustar00rootroot00000000000000# Israel Rail API [![image](https://img.shields.io/pypi/v/israel-rail-api.svg)](https://pypi.org/project/israel-rail-api/) [![image](https://img.shields.io/pypi/l/israel-rail-api.svg)](https://pypi.org/project/israel-rail-api/) [![Build Status](https://travis-ci.org/sh0oki/israel-rail-api.svg?branch=master)](https://travis-ci.org/sh0oki/israel-rail-api) This is a unofficial wrapping of the API of Israeli Rail network in Python. Use this script for checking your own train schedule, integrating with Alexa, and so on! ## Installing Tested with Python 3.11, should probably work fine with other versions too. pip install israel-rail-api ## Usage import israelrailapi s = israelrailapi.TrainSchedule() print(s.query('Tel Aviv University', 'Jerusalem Yitzhak Navon')) A simple test, to make sure the script is working is included in `schedule.py`: python3 schedule.py "tel aviv hahagana" "ben gurion airport" 2023-06-24 0900 ## Contributing We'd love your contributions! Fire up a (tested!) Pull request, and we'll be happy to approve it. sh0oki-israel-rail-api-3fa62b1/israelrailapi/000077500000000000000000000000001454013106000211015ustar00rootroot00000000000000sh0oki-israel-rail-api-3fa62b1/israelrailapi/__init__.py000066400000000000000000000003531454013106000232130ustar00rootroot00000000000000import israelrailapi.schedule import israelrailapi.train_station import israelrailapi.api try: import israelrailapi.stations except ImportError: pass from .schedule import TrainSchedule __all__ = ['TrainSchedule'] sh0oki-israel-rail-api-3fa62b1/israelrailapi/api.py000066400000000000000000000073471454013106000222370ustar00rootroot00000000000000import time import requests from israelrailapi.train_station import station_name_to_id # API key bundled in main.js of rail.co.il API_KEY = "4b0d355121fe4e0bb3d86e902efe9f20" USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 ' \ 'Safari/605.1.15' API_BASE = 'https://israelrail.azurefd.net/rjpa-prod/api/v1' DEFAULT_HEADERS = {'User-Agent': USER_AGENT, "ocp-apim-subscription-key": API_KEY} class TrainRoutePart(object): def __init__(self, data): self.data = data self.src = data['orignStation'] self.dst = data['destinationStation'] self.arrival = data['arrivalTime'] self.departure = data['departureTime'] self.platform = data['originPlatform'] self.dst_platform = data['destPlatform'] @staticmethod def parse_time(t): return time.strptime(t, "%d/%m/%Y %H:%M:%S") def __repr__(self): return "%s (%s) to %s (%s)" % ( station_name_to_id(self.src), self.departure, station_name_to_id(self.dst), self.arrival) class TrainRoute(object): def __init__(self, data): self.trains = self.parse(data) self.start_time = self.trains[0].departure self.end_time = self.trains[-1].arrival @staticmethod def parse(data): result = [] for t in data: result.append(TrainRoutePart(t)) return result def __repr__(self): return "%d trains in route, starting %s, arriving %s: %s\n" % (len(self.trains), self.start_time, self.end_time, self.trains) class IsraelRailApi(object): def __init__(self, url, params, headers=None): self.arguments = None if headers is None: headers = DEFAULT_HEADERS self.url = '/'.join((API_BASE, url)) self.params = params self.headers = headers def prepare_arguments(self, arguments): unknown_args = arguments.keys() - self.params.keys() if len(unknown_args) > 0: raise KeyError('Unknown arguments %s' % (unknown_args,)) for k in self.params: if k not in arguments: if 'default' in self.params[k]: arguments[k] = self.params[k]['default'] elif self.params[k]['required'] is not False: raise KeyError('Required argument %s not provided' % (k,)) return arguments def parse(self, result): return result def request(self, **kwargs): self.arguments = self.prepare_arguments(kwargs) return self.parse(requests.get(self.url, params=self.arguments, headers=self.headers)) class GetRoutesApi(IsraelRailApi): def __init__(self): super().__init__('timetable/searchTrainLuzForDateTime', {'fromStation': {}, 'toStation': {}, 'date': {}, 'hour': {'default': '09:00'}, 'scheduleType': {'default': 1}, 'systemType': {"default": 2}, "languageId": {"default": "English"} }) def parse(self, raw_result): raw_result.raise_for_status() result = raw_result.json()['result'] size = result['numOfResultsToShow'] index = result['startFromIndex'] routes = result['travels'][index: index + size] return [TrainRoute(r['trains']) for r in routes] sh0oki-israel-rail-api-3fa62b1/israelrailapi/schedule.py000066400000000000000000000027541454013106000232570ustar00rootroot00000000000000import logging import sys import time from israelrailapi.api import GetRoutesApi from israelrailapi.train_station import translate_station class TrainSchedule(object): @staticmethod def query(src_station, dst_station, start_date=None, start_hour=None): src_station = translate_station(src_station) dst_station = translate_station(dst_station) if start_date is None: start_date = time.strftime("%Y-%m-%d") if start_hour is None: start_hour = "09:00" start_date = start_date.strip().replace('-', '').replace('/', '').replace('.', '') start_hour = start_hour.strip().replace(':', '').replace('-', '') start_hour = f"{start_hour[:2]}:{start_hour[2:]}" start_date = f"{start_date[:4]}-{start_date[4:6]}-{start_date[6:8]}" logging.info("Query: %s->%s (%s %s)" % (src_station, dst_station, start_date, start_hour)) result = GetRoutesApi().request(fromStation=src_station, toStation=dst_station, date=start_date, hour=start_hour) logging.info(result) return result if '__main__' == __name__: logging.basicConfig(level=logging.DEBUG) t = TrainSchedule() if len(sys.argv) == 5: q = t.query(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]) print(q) else: print("Usage: %s " % (sys.argv[0],)) sh0oki-israel-rail-api-3fa62b1/israelrailapi/stations.py000066400000000000000000000455161454013106000233320ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- STATIONS = {'3700': {'Heb': 'תל אביב - סבידור מרכז', 'Eng': 'Tel Aviv-Savidor Center', 'Rus': 'Тель-Авив - Мерказ - Центральная', 'Arb': 'تل ابيب – ساڤيدور المركز'}, '3500': {'Heb': 'הרצליה', 'Eng': 'Hertsliya', 'Rus': 'Герцлия', 'Arb': 'هرتسليا'}, '3400': {'Heb': 'בית יהושע', 'Eng': "Bet Yehoshu'a", 'Rus': 'Бейт-Иегошуа ', 'Arb': 'بيت يهوشوع'}, '3300': {'Heb': 'נתניה', 'Eng': 'Netanya', 'Rus': 'Нетания', 'Arb': 'نتانيا'}, '3100': {'Heb': 'חדרה - מערב', 'Eng': 'Hadera-West', 'Rus': 'Хадера - Маарав', 'Arb': 'الخضيرة - غرب '}, '2800': {'Heb': 'בנימינה', 'Eng': 'Binyamina', 'Rus': 'Биньямина', 'Arb': 'بنيامينا'}, '2820': {'Heb': 'קיסריה - פרדס חנה', 'Eng': 'Caesarea-Pardes Hana', 'Rus': 'Кейсария - Пардес-Хана', 'Arb': 'قيساريا - بارديس حنا'}, '2500': {'Heb': 'עתלית', 'Eng': 'Atlit', 'Rus': 'Атлит', 'Arb': 'عتليت'}, '2200': {'Heb': 'חיפה - בת גלים', 'Eng': 'Haifa-Bat Galim', 'Rus': 'Хайфа - Бат-Галим', 'Arb': 'حيفا - بات چاليم'}, '1300': {'Heb': 'חוצות המפרץ', 'Eng': 'Hutsot HaMifrats', 'Rus': 'Хоцот ха-Мифрац ', 'Arb': 'حوتسوت همفراتس'}, '700': {'Heb': 'קריית חיים', 'Eng': 'Kiryat Hayim', 'Rus': 'Кирьят-Хаим', 'Arb': 'كريات حاييم'}, '1400': {'Heb': 'קריית מוצקין', 'Eng': 'Kiryat Motzkin', 'Rus': 'Кирьят-Моцкин', 'Arb': 'كريات موتسكين'}, '1500': {'Heb': 'עכו', 'Eng': 'Ako', 'Rus': 'Акко ', 'Arb': 'عكا'}, '2300': {'Heb': "חיפה - חוף הכרמל (ש' רזיאל)", 'Eng': 'Haifa-Hof HaKarmel (Razi`el)', 'Rus': 'Хайфа Хоф ха-Кармель', 'Arb': 'حيفا - شاطئ الكرمل'}, '8700': {'Heb': "כפר סבא - נורדאו (א' קוסטיוק)", 'Eng': 'Kfar Sava-Nordau (A.Kostyuk)', 'Rus': 'Кфар-Саба – Нордау (А. Костюк)', 'Arb': 'كفار سابا - نورداو'}, '1600': {'Heb': 'נהריה', 'Eng': 'Nahariya', 'Rus': 'Нагария', 'Arb': 'نهاريا'}, '6500': {'Heb': 'ירושלים - גן החיות התנכי', 'Eng': 'Jerusalem-Biblical Zoo', 'Rus': 'Иерусалим – зоопарк', 'Arb': 'القدس - حديقة الحيوان التوراتية'}, '6300': {'Heb': 'בית שמש', 'Eng': 'Bet Shemesh', 'Rus': 'Бейт Шемеш', 'Arb': 'بيت شيمش'}, '7000': {'Heb': 'קריית גת', 'Eng': 'Kiryat Gat', 'Rus': 'Кирьят-Гат ', 'Arb': 'كريات چات'}, '5000': {'Heb': 'לוד', 'Eng': 'Lod', 'Rus': 'Лод', 'Arb': 'اللد'}, '7300': {'Heb': 'באר שבע- צפון/אוניברסיטה', 'Eng': "Be'er Sheva-North/University", 'Rus': 'Беер-Шева Цафон', 'Arb': 'بئر السبع - شمال/الجامعة'}, '4800': {'Heb': 'כפר חב"ד', 'Eng': 'Kfar Habad', 'Rus': 'Кфар ХАБАД', 'Arb': 'كفار حباد'}, '4600': {'Heb': 'תל אביב - השלום', 'Eng': 'Tel Aviv-HaShalom', 'Rus': 'Тель-Авив - ха-Шалом', 'Arb': 'تل أبيب - السلام'}, '2100': {'Heb': 'חיפה- מרכז השמונה', 'Eng': 'Haifa Center-HaShmona', 'Rus': 'Хайфа - Мерказ - Центральная', 'Arb': 'حيفا المركز - هشمونا'}, '5010': {'Heb': 'רמלה', 'Eng': 'Ramla', 'Rus': 'Рамле', 'Arb': 'الرملة'}, '8800': {'Heb': 'ראש העין - צפון', 'Eng': "Rosh Ha'Ayin-North", 'Rus': 'Рош ха-Айн Цафон', 'Arb': 'روش هعاين - شمال'}, '5300': {'Heb': 'באר יעקב', 'Eng': "Be'er Ya'akov", 'Rus': 'Беер-Яаков', 'Arb': 'بئير يعكوف'}, '5200': {'Heb': "רחובות (א' הדר) ", 'Eng': 'Rehovot (E. Hadar)', 'Rus': 'Реховот- им. А. Хадара', 'Arb': 'رحوڤوت'}, '5410': {'Heb': 'יבנה מזרח', 'Eng': 'Yavne-East', 'Rus': 'Явне-Восток', 'Arb': 'ياڤنه - شرق'}, '9100': {'Heb': 'ראשון לציון - הראשונים', 'Eng': 'Rishon LeTsiyon-HaRishonim', 'Rus': 'Ришон ле-Цион - Ха-Ришоним ', 'Arb': 'ريشون لتسيون - هريشونيم'}, '5800': {'Heb': "אשדוד עד הלום (מ' בר כוכבא)", 'Eng': 'Ashdod-Ad Halom (M.Bar Kochva)', 'Rus': 'Ашдод-ад-Халом (М. Бар Кохва)', 'Arb': 'أشدود - عاد هلوم'}, '4250': {'Heb': 'פתח תקווה - סגולה', 'Eng': 'Petah Tikva-Segula', 'Rus': 'Петах-Тиква - Сгула', 'Arb': 'بيتح تكڤا - سچوله'}, '4100': {'Heb': 'בני ברק', 'Eng': 'Bnei Brak', 'Rus': 'Бней-Брак', 'Arb': 'بني براك'}, '3600': {'Heb': 'תל אביב - אוניברסיטה', 'Eng': 'Tel Aviv-University', 'Rus': 'Тель-Авив - Университет', 'Arb': 'تل أبيب - الجامعة'}, '7320': {'Heb': 'באר שבע - מרכז', 'Eng': "Be'er Sheva-Center", 'Rus': 'Беер-Шева Мерказ', 'Arb': 'بئر السبع - المركز'}, '1220': {'Heb': 'מרכזית המפרץ (לב המפרץ)', 'Eng': 'HaMifrats Central Station', 'Rus': 'Центральная станция Ха-Мифрац', 'Arb': 'همفراتس المركزية'}, '4900': {'Heb': 'תל אביב - ההגנה', 'Eng': 'Tel Aviv-HaHagana', 'Rus': 'Тель-Авив - ха-Хагана ', 'Arb': 'تل أبيب - ههچناه'}, '8600': {'Heb': 'נמל תעופה בן גוריון', 'Eng': 'Ben Gurion Airport', 'Rus': 'Бен-Гурион Аэропорт', 'Arb': 'مطار بن چوريون'}, '6700': {'Heb': 'ירושלים - מלחה', 'Eng': 'Jerusalem-Malha', 'Rus': 'Иерусалим - Малха', 'Arb': 'القدس - المالحه'}, '5900': {'Heb': 'אשקלון', 'Eng': 'Ashkelon', 'Rus': 'Ашкелон ', 'Arb': 'أشكلون'}, '7500': {'Heb': 'דימונה', 'Eng': 'Dimona', 'Rus': 'Димона', 'Arb': 'ديمونا'}, '9200': {'Heb': 'הוד השרון - סוקולוב', 'Eng': 'Hod HaSharon-Sokolov', 'Rus': 'Ход Хашарон - Соколов', 'Arb': 'هود هشارون - سوكولوڤ'}, '4170': {'Heb': 'פתח תקווה - קריית אריה', 'Eng': 'Petah Tikva-Kiryat Arye', 'Rus': 'Петах Тиква – Кирьят Арье', 'Arb': 'بيتح تكڤا - كريات أريه'}, '5150': {'Heb': 'לוד גני אביב', 'Eng': 'Lod-Gane Aviv', 'Rus': 'Лод - Ганей Авив', 'Arb': 'اللد - چاني أڤيڤ'}, '8550': {'Heb': 'להבים - רהט', 'Eng': 'Lehavim-Rahat', 'Rus': 'Леавим - Рахат', 'Arb': 'لهاڤيم - رهط'}, '300': {'Heb': 'פאתי מודיעין', 'Eng': "Pa'ate Modi'in", 'Rus': 'Патей Модиин', 'Arb': 'بأتي موديعين'}, '400': {'Heb': 'מודיעין - מרכז', 'Eng': "Modi'in-Center", 'Rus': 'Модиин центр ', 'Arb': 'موديعين - المركز'}, '4640': {'Heb': 'צומת חולון', 'Eng': 'Holon Junction', 'Rus': 'Холон - Развязка Холон', 'Arb': 'مفترق حولون'}, '4660': {'Heb': 'חולון - וולפסון', 'Eng': 'Holon-Wolfson', 'Rus': 'Холон - Вольфсон', 'Arb': 'حولون - ڤولفسون'}, '4680': {'Heb': 'בת ים - יוספטל', 'Eng': 'Bat Yam-Yoseftal', 'Rus': 'Бат Ям - Йосеф Таль', 'Arb': 'بات يام - يوسفطال'}, '4690': {'Heb': 'בת ים - קוממיות', 'Eng': 'Bat Yam-Komemiyut', 'Rus': 'Бат Ям - Комемуют', 'Arb': 'بات يام - كوميميوت'}, '9800': {'Heb': 'ראשון לציון-משה דיין', 'Eng': 'Rishon LeTsiyon-Moshe Dayan', 'Rus': 'Ришон-Ле-Цион станция им. Моше Даяна', 'Arb': 'ريشون لتسيون -موشي ديان'}, '9000': {'Heb': 'יבנה מערב', 'Eng': 'Yavne-West', 'Rus': 'Явне-Запад', 'Arb': 'ياڤني - غرب'}, '9600': {'Heb': 'שדרות', 'Eng': 'Sderot', 'Rus': 'Сдерот', 'Arb': 'سديروت'}, '9650': {'Heb': 'נתיבות', 'Eng': 'Netivot', 'Rus': 'Нетивот', 'Arb': 'نتيفوت'}, '9700': {'Heb': 'אופקים', 'Eng': 'Ofakim', 'Rus': 'Офаким', 'Arb': 'أوفاكيم'}, '3310': {'Heb': 'נתניה - ספיר', 'Eng': 'Netanya-Sapir', 'Rus': 'Нетания – Сапир', 'Arb': 'نتانيا - سبير'}, '1240': {'Heb': 'יקנעם - כפר יהושע', 'Eng': "Yokne'am-Kfar Yehoshu'a", 'Rus': 'Йокнеам – Кфар-Иегошуа', 'Arb': 'يوكنعام – كفار يهوشوع'}, '1250': {'Heb': 'מגדל העמק - כפר ברוך', 'Eng': "Migdal Ha'emek-Kfar Barukh", 'Rus': 'Мигдаль-Ха-Эмек – Кфар Барух', 'Arb': 'مجدال هعيمك – كفار باروخ'}, '1260': {'Heb': 'עפולה ר.איתן', 'Eng': 'Afula R.Eitan', 'Rus': 'Афула Р. Эйтан', 'Arb': 'العفولة ر. ايتان'}, '1280': {'Heb': 'בית שאן', 'Eng': "Beit She'an", 'Rus': 'Бейт Шеан', 'Arb': 'بيت شآن'}, '1820': {'Heb': 'אחיהוד', 'Eng': 'Ahihud', 'Rus': 'Ахихуд', 'Arb': 'احيهود'}, '1840': {'Heb': 'כרמיאל', 'Eng': 'Karmiel', 'Rus': 'Кармиэль', 'Arb': 'كرميئيل'}, '2940': {'Heb': 'רעננה מערב', 'Eng': "Ra'anana West", 'Rus': 'Раанана-Вест', 'Arb': 'رعنانا ويست'}, '2960': {'Heb': 'רעננה דרום', 'Eng': "Ra'anana South", 'Rus': 'Раанана Южный', 'Arb': 'رعنانا الجنوبية'}, '6150': {'Heb': 'קרית מלאכי - יואב', 'Eng': 'Kiryat Malakhi – Yoav', 'Rus': 'Кирьят Малахи-Йоав', 'Arb': 'كريات ملاخي – يوآڤ'}, '680': {'Heb': 'ירושלים - יצחק נבון', 'Eng': 'Jerusalem - Yitzhak Navon', 'Rus': 'Иерусалим - Ицхак Навон', 'Arb': 'أورشليم – يتسحاق ناڤون'}, '6900': {'Heb': 'מזכרת בתיה', 'Eng': 'Mazkeret Batya', 'Rus': 'Мазкерет Батья', 'Arb': 'مزكيرت باتيا'}} STATION_INDEX = {'תל אביב סבידור מרכז': '3700', 'tel aviv savidor center': '3700', 'тель авив мерказ центральная': '3700', 'تل ابيب – ساڤيدور المركز': '3700', 'הרצליה': '3500', 'hertsliya': '3500', 'герцлия': '3500', 'هرتسليا': '3500', 'בית יהושע': '3400', 'bet yehoshua': '3400', 'бейт иегошуа': '3400', 'بيت يهوشوع': '3400', 'נתניה': '3300', 'netanya': '3300', 'нетания': '3300', 'نتانيا': '3300', 'חדרה מערב': '3100', 'hadera west': '3100', 'хадера маарав': '3100', 'الخضيرة غرب': '3100', 'בנימינה': '2800', 'binyamina': '2800', 'биньямина': '2800', 'بنيامينا': '2800', 'קיסריה פרדס חנה': '2820', 'caesarea pardes hana': '2820', 'кейсария пардес хана': '2820', 'قيساريا بارديس حنا': '2820', 'עתלית': '2500', 'atlit': '2500', 'атлит': '2500', 'عتليت': '2500', 'חיפה בת גלים': '2200', 'haifa bat galim': '2200', 'хайфа бат галим': '2200', 'حيفا بات چاليم': '2200', 'חוצות המפרץ': '1300', 'hutsot hamifrats': '1300', 'хоцот ха мифрац': '1300', 'حوتسوت همفراتس': '1300', 'קריית חיים': '700', 'kiryat hayim': '700', 'кирьят хаим': '700', 'كريات حاييم': '700', 'קריית מוצקין': '1400', 'kiryat motzkin': '1400', 'кирьят моцкин': '1400', 'كريات موتسكين': '1400', 'עכו': '1500', 'ako': '1500', 'акко': '1500', 'عكا': '1500', 'חיפה חוף הכרמל (ש רזיאל)': '2300', 'haifa hof hakarmel (razi`el)': '2300', 'хайфа хоф ха кармель': '2300', 'حيفا شاطئ الكرمل': '2300', 'כפר סבא נורדאו (א קוסטיוק)': '8700', 'kfar sava nordau (a.kostyuk)': '8700', 'кфар саба – нордау (а. костюк)': '8700', 'كفار سابا نورداو': '8700', 'נהריה': '1600', 'nahariya': '1600', 'нагария': '1600', 'نهاريا': '1600', 'ירושלים גן החיות התנכי': '6500', 'jerusalem biblical zoo': '6500', 'иерусалим – зоопарк': '6500', 'القدس حديقة الحيوان التوراتية': '6500', 'בית שמש': '6300', 'bet shemesh': '6300', 'бейт шемеш': '6300', 'بيت شيمش': '6300', 'קריית גת': '7000', 'kiryat gat': '7000', 'кирьят гат': '7000', 'كريات چات': '7000', 'לוד': '5000', 'lod': '5000', 'лод': '5000', 'اللد': '5000', 'באר שבע צפון/אוניברסיטה': '7300', 'beer sheva north/university': '7300', 'беер шева цафон': '7300', 'بئر السبع شمال/الجامعة': '7300', 'כפר חב"ד': '4800', 'kfar habad': '4800', 'кфар хабад': '4800', 'كفار حباد': '4800', 'תל אביב השלום': '4600', 'tel aviv hashalom': '4600', 'тель авив ха шалом': '4600', 'تل أبيب السلام': '4600', 'חיפה מרכז השמונה': '2100', 'haifa center hashmona': '2100', 'хайфа мерказ центральная': '2100', 'حيفا المركز هشمونا': '2100', 'רמלה': '5010', 'ramla': '5010', 'рамле': '5010', 'الرملة': '5010', 'ראש העין צפון': '8800', 'rosh haayin north': '8800', 'рош ха айн цафон': '8800', 'روش هعاين شمال': '8800', 'באר יעקב': '5300', 'beer yaakov': '5300', 'беер яаков': '5300', 'بئير يعكوف': '5300', 'רחובות (א הדר)': '5200', 'rehovot (e. hadar)': '5200', 'реховот им. а. хадара': '5200', 'رحوڤوت': '5200', 'יבנה מזרח': '5410', 'yavne east': '5410', 'явне восток': '5410', 'ياڤنه شرق': '5410', 'ראשון לציון הראשונים': '9100', 'rishon letsiyon harishonim': '9100', 'ришон ле цион ха ришоним': '9100', 'ريشون لتسيون هريشونيم': '9100', 'אשדוד עד הלום (מ בר כוכבא)': '5800', 'ashdod ad halom (m.bar kochva)': '5800', 'ашдод ад халом (м. бар кохва)': '5800', 'أشدود عاد هلوم': '5800', 'פתח תקווה סגולה': '4250', 'petah tikva segula': '4250', 'петах тиква сгула': '4250', 'بيتح تكڤا سچوله': '4250', 'בני ברק': '4100', 'bnei brak': '4100', 'бней брак': '4100', 'بني براك': '4100', 'תל אביב אוניברסיטה': '3600', 'tel aviv university': '3600', 'тель авив университет': '3600', 'تل أبيب الجامعة': '3600', 'באר שבע מרכז': '7320', 'beer sheva center': '7320', 'беер шева мерказ': '7320', 'بئر السبع المركز': '7320', 'מרכזית המפרץ (לב המפרץ)': '1220', 'hamifrats central station': '1220', 'центральная станция ха мифрац': '1220', 'همفراتس المركزية': '1220', 'תל אביב ההגנה': '4900', 'tel aviv hahagana': '4900', 'тель авив ха хагана': '4900', 'تل أبيب ههچناه': '4900', 'נמל תעופה בן גוריון': '8600', 'ben gurion airport': '8600', 'бен гурион аэропорт': '8600', 'مطار بن چوريون': '8600', 'ירושלים מלחה': '6700', 'jerusalem malha': '6700', 'иерусалим малха': '6700', 'القدس المالحه': '6700', 'אשקלון': '5900', 'ashkelon': '5900', 'ашкелон': '5900', 'أشكلون': '5900', 'דימונה': '7500', 'dimona': '7500', 'димона': '7500', 'ديمونا': '7500', 'הוד השרון סוקולוב': '9200', 'hod hasharon sokolov': '9200', 'ход хашарон соколов': '9200', 'هود هشارون سوكولوڤ': '9200', 'פתח תקווה קריית אריה': '4170', 'petah tikva kiryat arye': '4170', 'петах тиква – кирьят арье': '4170', 'بيتح تكڤا كريات أريه': '4170', 'לוד גני אביב': '5150', 'lod gane aviv': '5150', 'лод ганей авив': '5150', 'اللد چاني أڤيڤ': '5150', 'להבים רהט': '8550', 'lehavim rahat': '8550', 'леавим рахат': '8550', 'لهاڤيم رهط': '8550', 'פאתי מודיעין': '300', 'paate modiin': '300', 'патей модиин': '300', 'بأتي موديعين': '300', 'מודיעין מרכז': '400', 'modiin center': '400', 'модиин центр': '400', 'موديعين المركز': '400', 'צומת חולון': '4640', 'holon junction': '4640', 'холон развязка холон': '4640', 'مفترق حولون': '4640', 'חולון וולפסון': '4660', 'holon wolfson': '4660', 'холон вольфсон': '4660', 'حولون ڤولفسون': '4660', 'בת ים יוספטל': '4680', 'bat yam yoseftal': '4680', 'бат ям йосеф таль': '4680', 'بات يام يوسفطال': '4680', 'בת ים קוממיות': '4690', 'bat yam komemiyut': '4690', 'бат ям комемуют': '4690', 'بات يام كوميميوت': '4690', 'ראשון לציון משה דיין': '9800', 'rishon letsiyon moshe dayan': '9800', 'ришон ле цион станция им. моше даяна': '9800', 'ريشون لتسيون موشي ديان': '9800', 'יבנה מערב': '9000', 'yavne west': '9000', 'явне запад': '9000', 'ياڤني غرب': '9000', 'שדרות': '9600', 'sderot': '9600', 'сдерот': '9600', 'سديروت': '9600', 'נתיבות': '9650', 'netivot': '9650', 'нетивот': '9650', 'نتيفوت': '9650', 'אופקים': '9700', 'ofakim': '9700', 'офаким': '9700', 'أوفاكيم': '9700', 'נתניה ספיר': '3310', 'netanya sapir': '3310', 'нетания – сапир': '3310', 'نتانيا سبير': '3310', 'יקנעם כפר יהושע': '1240', 'yokneam kfar yehoshua': '1240', 'йокнеам – кфар иегошуа': '1240', 'يوكنعام – كفار يهوشوع': '1240', 'מגדל העמק כפר ברוך': '1250', 'migdal haemek kfar barukh': '1250', 'мигдаль ха эмек – кфар барух': '1250', 'مجدال هعيمك – كفار باروخ': '1250', 'עפולה ר.איתן': '1260', 'afula r.eitan': '1260', 'афула р. эйтан': '1260', 'العفولة ر. ايتان': '1260', 'בית שאן': '1280', 'beit shean': '1280', 'бейт шеан': '1280', 'بيت شآن': '1280', 'אחיהוד': '1820', 'ahihud': '1820', 'ахихуд': '1820', 'احيهود': '1820', 'כרמיאל': '1840', 'karmiel': '1840', 'кармиэль': '1840', 'كرميئيل': '1840', 'רעננה מערב': '2940', 'raanana west': '2940', 'раанана вест': '2940', 'رعنانا ويست': '2940', 'רעננה דרום': '2960', 'raanana south': '2960', 'раанана южный': '2960', 'رعنانا الجنوبية': '2960', 'קרית מלאכי יואב': '6150', 'kiryat malakhi – yoav': '6150', 'кирьят малахи йоав': '6150', 'كريات ملاخي – يوآڤ': '6150', 'ירושלים יצחק נבון': '680', 'jerusalem yitzhak navon': '680', 'иерусалим ицхак навон': '680', 'أورشليم – يتسحاق ناڤون': '680', 'מזכרת בתיה': '6900', 'mazkeret batya': '6900', 'мазкерет батья': '6900', 'مزكيرت باتيا': '6900'} sh0oki-israel-rail-api-3fa62b1/israelrailapi/train_station.py000066400000000000000000000015641454013106000243370ustar00rootroot00000000000000import logging try: from israelrailapi.stations import STATIONS, STATION_INDEX except ImportError: logging.warning("Unable to load station list") from stations import STATIONS, STATION_INDEX def cleanup_name(n): n = n.lower().strip().replace('\'', '').replace('-', ' ') return ' '.join(n.split()) def lookup_station(n): return STATION_INDEX[cleanup_name(n)] def translate_station(station_name): # Station name can be: int (station id), string (station id), string (station name) station_name = str(station_name).lower() if station_name in STATIONS: return STATIONS.stations[station_name] return lookup_station(station_name) def station_name_to_id(station_id, default_language='Eng'): return STATIONS[str(station_id)][default_language] if __name__ == '__main__': print(STATION_INDEX) sh0oki-israel-rail-api-3fa62b1/setup.cfg000066400000000000000000000001021454013106000200720ustar00rootroot00000000000000[metadata] description-file = README.md license_file = LICENSE sh0oki-israel-rail-api-3fa62b1/setup.py000066400000000000000000000025621454013106000177770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import os from setuptools import setup def make_stations(): with open(os.path.join(os.path.split(__file__)[0], 'stations.txt'), 'r', encoding='utf8') as station_file: def cleanup_name(n): n = n.lower().strip().replace('\'', '').replace('-', ' ') return ' '.join(n.split()) raw = json.load(station_file)['Data']['Data']['CustomPropertys'] stations = {x.pop('Id'): {l: n[0] for l, n in x.items()} for x in raw} # Create reverse dict for indexed query station_index = {} for st in stations: for n in stations[st].values(): station_index[cleanup_name(n)] = st open('israelrailapi/stations.py', 'w', encoding='utf8').write("""#!/usr/bin/env python # -*- coding: utf-8 -*- STATIONS = %s STATION_INDEX = %s """ % (repr(stations), repr(station_index))) make_stations() setup( name='israel-rail-api', version='0.1.2', packages=['israelrailapi'], url='https://github.com/sh0oki/israel-rail-api', install_requires=['requests', 'pytz'], license='MIT', author='sh0oki', description='Israeli Rail unofficial API', long_description=open('README.md', 'r').read(), long_description_content_type='text/markdown' ) sh0oki-israel-rail-api-3fa62b1/stations.txt000066400000000000000000000240551454013106000206730ustar00rootroot00000000000000{"MessageType":2,"Message":null,"Data":{"MessageType":2,"Message":null,"Data":{"CustomPropertys":[{"Id":"3700","Heb":["תל אביב - סבידור מרכז"],"Eng":["Tel Aviv-Savidor Center"],"Rus":["Тель-Авив - Мерказ - Центральная"],"Arb":["تل ابيب – ساڤيدور المركز"]},{"Id":"3500","Heb":["הרצליה"],"Eng":["Hertsliya"],"Rus":["Герцлия"],"Arb":["هرتسليا"]},{"Id":"3400","Heb":["בית יהושע"],"Eng":["Bet Yehoshu'a"],"Rus":["Бейт-Иегошуа "],"Arb":["بيت يهوشوع"]},{"Id":"3300","Heb":["נתניה"],"Eng":["Netanya"],"Rus":["Нетания"],"Arb":["نتانيا"]},{"Id":"3100","Heb":["חדרה - מערב"],"Eng":["Hadera-West"],"Rus":["Хадера - Маарав"],"Arb":["الخضيرة - غرب "]},{"Id":"2800","Heb":["בנימינה"],"Eng":["Binyamina"],"Rus":["Биньямина"],"Arb":["بنيامينا"]},{"Id":"2820","Heb":["קיסריה - פרדס חנה"],"Eng":["Caesarea-Pardes Hana"],"Rus":["Кейсария - Пардес-Хана"],"Arb":["قيساريا - بارديس حنا"]},{"Id":"2500","Heb":["עתלית"],"Eng":["Atlit"],"Rus":["Атлит"],"Arb":["عتليت"]},{"Id":"2200","Heb":["חיפה - בת גלים"],"Eng":["Haifa-Bat Galim"],"Rus":["Хайфа - Бат-Галим"],"Arb":["حيفا - بات چاليم"]},{"Id":"1300","Heb":["חוצות המפרץ"],"Eng":["Hutsot HaMifrats"],"Rus":["Хоцот ха-Мифрац "],"Arb":["حوتسوت همفراتس"]},{"Id":"700","Heb":["קריית חיים"],"Eng":["Kiryat Hayim"],"Rus":["Кирьят-Хаим"],"Arb":["كريات حاييم"]},{"Id":"1400","Heb":["קריית מוצקין"],"Eng":["Kiryat Motzkin"],"Rus":["Кирьят-Моцкин"],"Arb":["كريات موتسكين"]},{"Id":"1500","Heb":["עכו"],"Eng":["Ako"],"Rus":["Акко "],"Arb":["عكا"]},{"Id":"2300","Heb":["חיפה - חוף הכרמל (ש' רזיאל)"],"Eng":["Haifa-Hof HaKarmel (Razi`el)"],"Rus":["Хайфа Хоф ха-Кармель"],"Arb":["حيفا - شاطئ الكرمل"]},{"Id":"8700","Heb":["כפר סבא - נורדאו (א' קוסטיוק)"],"Eng":["Kfar Sava-Nordau (A.Kostyuk)"],"Rus":["Кфар-Саба – Нордау (А. Костюк)"],"Arb":["كفار سابا - نورداو"]},{"Id":"1600","Heb":["נהריה"],"Eng":["Nahariya"],"Rus":["Нагария"],"Arb":["نهاريا"]},{"Id":"6500","Heb":["ירושלים - גן החיות התנכי"],"Eng":["Jerusalem-Biblical Zoo"],"Rus":["Иерусалим – зоопарк"],"Arb":["القدس - حديقة الحيوان التوراتية"]},{"Id":"6300","Heb":["בית שמש"],"Eng":["Bet Shemesh"],"Rus":["Бейт Шемеш"],"Arb":["بيت شيمش"]},{"Id":"7000","Heb":["קריית גת"],"Eng":["Kiryat Gat"],"Rus":["Кирьят-Гат "],"Arb":["كريات چات"]},{"Id":"5000","Heb":["לוד"],"Eng":["Lod"],"Rus":["Лод"],"Arb":["اللد"]},{"Id":"7300","Heb":["באר שבע- צפון/אוניברסיטה"],"Eng":["Be'er Sheva-North/University"],"Rus":["Беер-Шева Цафон"],"Arb":["بئر السبع - شمال/الجامعة"]},{"Id":"4800","Heb":["כפר חב\"ד"],"Eng":["Kfar Habad"],"Rus":["Кфар ХАБАД"],"Arb":["كفار حباد"]},{"Id":"4600","Heb":["תל אביב - השלום"],"Eng":["Tel Aviv-HaShalom"],"Rus":["Тель-Авив - ха-Шалом"],"Arb":["تل أبيب - السلام"]},{"Id":"2100","Heb":["חיפה- מרכז השמונה"],"Eng":["Haifa Center-HaShmona"],"Rus":["Хайфа - Мерказ - Центральная"],"Arb":["حيفا المركز - هشمونا"]},{"Id":"5010","Heb":["רמלה"],"Eng":["Ramla"],"Rus":["Рамле"],"Arb":["الرملة"]},{"Id":"8800","Heb":["ראש העין - צפון"],"Eng":["Rosh Ha'Ayin-North"],"Rus":["Рош ха-Айн Цафон"],"Arb":["روش هعاين - شمال"]},{"Id":"5300","Heb":["באר יעקב"],"Eng":["Be'er Ya'akov"],"Rus":["Беер-Яаков"],"Arb":["بئير يعكوف"]},{"Id":"5200","Heb":["רחובות (א' הדר) "],"Eng":["Rehovot (E. Hadar)"],"Rus":["Реховот- им. А. Хадара"],"Arb":["رحوڤوت"]},{"Id":"5410","Heb":["יבנה מזרח"],"Eng":["Yavne-East"],"Rus":["Явне-Восток"],"Arb":["ياڤنه - شرق"]},{"Id":"9100","Heb":["ראשון לציון - הראשונים"],"Eng":["Rishon LeTsiyon-HaRishonim"],"Rus":["Ришон ле-Цион - Ха-Ришоним "],"Arb":["ريشون لتسيون - هريشونيم"]},{"Id":"5800","Heb":["אשדוד עד הלום (מ' בר כוכבא)"],"Eng":["Ashdod-Ad Halom (M.Bar Kochva)"],"Rus":["Ашдод-ад-Халом (М. Бар Кохва)"],"Arb":["أشدود - عاد هلوم"]},{"Id":"4250","Heb":["פתח תקווה - סגולה"],"Eng":["Petah Tikva-Segula"],"Rus":["Петах-Тиква - Сгула"],"Arb":["بيتح تكڤا - سچوله"]},{"Id":"4100","Heb":["בני ברק"],"Eng":["Bnei Brak"],"Rus":["Бней-Брак"],"Arb":["بني براك"]},{"Id":"3600","Heb":["תל אביב - אוניברסיטה"],"Eng":["Tel Aviv-University"],"Rus":["Тель-Авив - Университет"],"Arb":["تل أبيب - الجامعة"]},{"Id":"7320","Heb":["באר שבע - מרכז"],"Eng":["Be'er Sheva-Center"],"Rus":["Беер-Шева Мерказ"],"Arb":["بئر السبع - المركز"]},{"Id":"1220","Heb":["מרכזית המפרץ (לב המפרץ)"],"Eng":["HaMifrats Central Station"],"Rus":["Центральная станция Ха-Мифрац"],"Arb":["همفراتس المركزية"]},{"Id":"4900","Heb":["תל אביב - ההגנה"],"Eng":["Tel Aviv-HaHagana"],"Rus":["Тель-Авив - ха-Хагана "],"Arb":["تل أبيب - ههچناه"]},{"Id":"8600","Heb":["נמל תעופה בן גוריון"],"Eng":["Ben Gurion Airport"],"Rus":["Бен-Гурион Аэропорт"],"Arb":["مطار بن چوريون"]},{"Id":"6700","Heb":["ירושלים - מלחה"],"Eng":["Jerusalem-Malha"],"Rus":["Иерусалим - Малха"],"Arb":["القدس - المالحه"]},{"Id":"5900","Heb":["אשקלון"],"Eng":["Ashkelon"],"Rus":["Ашкелон "],"Arb":["أشكلون"]},{"Id":"7500","Heb":["דימונה"],"Eng":["Dimona"],"Rus":["Димона"],"Arb":["ديمونا"]},{"Id":"9200","Heb":["הוד השרון - סוקולוב"],"Eng":["Hod HaSharon-Sokolov"],"Rus":["Ход Хашарон - Соколов"],"Arb":["هود هشارون - سوكولوڤ"]},{"Id":"4170","Heb":["פתח תקווה - קריית אריה"],"Eng":["Petah Tikva-Kiryat Arye"],"Rus":["Петах Тиква – Кирьят Арье"],"Arb":["بيتح تكڤا - كريات أريه"]},{"Id":"5150","Heb":["לוד גני אביב"],"Eng":["Lod-Gane Aviv"],"Rus":["Лод - Ганей Авив"],"Arb":["اللد - چاني أڤيڤ"]},{"Id":"8550","Heb":["להבים - רהט"],"Eng":["Lehavim-Rahat"],"Rus":["Леавим - Рахат"],"Arb":["لهاڤيم - رهط"]},{"Id":"300","Heb":["פאתי מודיעין"],"Eng":["Pa'ate Modi'in"],"Rus":["Патей Модиин"],"Arb":["بأتي موديعين"]},{"Id":"400","Heb":["מודיעין - מרכז"],"Eng":["Modi'in-Center"],"Rus":["Модиин центр "],"Arb":["موديعين - المركز"]},{"Id":"4640","Heb":["צומת חולון"],"Eng":["Holon Junction"],"Rus":["Холон - Развязка Холон"],"Arb":["مفترق حولون"]},{"Id":"4660","Heb":["חולון - וולפסון"],"Eng":["Holon-Wolfson"],"Rus":["Холон - Вольфсон"],"Arb":["حولون - ڤولفسون"]},{"Id":"4680","Heb":["בת ים - יוספטל"],"Eng":["Bat Yam-Yoseftal"],"Rus":["Бат Ям - Йосеф Таль"],"Arb":["بات يام - يوسفطال"]},{"Id":"4690","Heb":["בת ים - קוממיות"],"Eng":["Bat Yam-Komemiyut"],"Rus":["Бат Ям - Комемуют"],"Arb":["بات يام - كوميميوت"]},{"Id":"9800","Heb":["ראשון לציון-משה דיין"],"Eng":["Rishon LeTsiyon-Moshe Dayan"],"Rus":["Ришон-Ле-Цион станция им. Моше Даяна"],"Arb":["ريشون لتسيون -موشي ديان"]},{"Id":"9000","Heb":["יבנה מערב"],"Eng":["Yavne-West"],"Rus":["Явне-Запад"],"Arb":["ياڤني - غرب"]},{"Id":"9600","Heb":["שדרות"],"Eng":["Sderot"],"Rus":["Сдерот"],"Arb":["سديروت"]},{"Id":"9650","Heb":["נתיבות"],"Eng":["Netivot"],"Rus":["Нетивот"],"Arb":["نتيفوت"]},{"Id":"9700","Heb":["אופקים"],"Eng":["Ofakim"],"Rus":["Офаким"],"Arb":["أوفاكيم"]},{"Id":"3310","Heb":["נתניה - ספיר"],"Eng":["Netanya-Sapir"],"Rus":["Нетания – Сапир"],"Arb":["نتانيا - سبير"]},{"Id":"1240","Heb":["יקנעם - כפר יהושע"],"Eng":["Yokne'am-Kfar Yehoshu'a"],"Rus":["Йокнеам – Кфар-Иегошуа"],"Arb":["يوكنعام – كفار يهوشوع"]},{"Id":"1250","Heb":["מגדל העמק - כפר ברוך"],"Eng":["Migdal Ha'emek-Kfar Barukh"],"Rus":["Мигдаль-Ха-Эмек – Кфар Барух"],"Arb":["مجدال هعيمك – كفار باروخ"]},{"Id":"1260","Heb":["עפולה ר.איתן"],"Eng":["Afula R.Eitan"],"Rus":["Афула Р. Эйтан"],"Arb":["العفولة ر. ايتان"]},{"Id":"1280","Heb":["בית שאן"],"Eng":["Beit She'an"],"Rus":["Бейт Шеан"],"Arb":["بيت شآن"]},{"Id":"1820","Heb":["אחיהוד"],"Eng":["Ahihud"],"Rus":["Ахихуд"],"Arb":["احيهود"]},{"Id":"1840","Heb":["כרמיאל"],"Eng":["Karmiel"],"Rus":["Кармиэль"],"Arb":["كرميئيل"]},{"Id":"2940","Heb":["רעננה מערב"],"Eng":["Ra'anana West"],"Rus":["Раанана-Вест"],"Arb":["رعنانا ويست"]},{"Id":"2960","Heb":["רעננה דרום"],"Eng":["Ra'anana South"],"Rus":["Раанана Южный"],"Arb":["رعنانا الجنوبية"]},{"Id":"6150","Heb":["קרית מלאכי - יואב"],"Eng":["Kiryat Malakhi – Yoav"],"Rus":["Кирьят Малахи-Йоав"],"Arb":["كريات ملاخي – يوآڤ"]},{"Id":"680","Heb":["ירושלים - יצחק נבון"],"Eng":["Jerusalem - Yitzhak Navon"],"Rus":["Иерусалим - Ицхак Навон"],"Arb":["أورشليم – يتسحاق ناڤون"]},{"Id": "6900","Heb": ["מזכרת בתיה"],"Eng": ["Mazkeret Batya"],"Rus": ["Мазкерет Батья"],"Arb": ["مزكيرت باتيا"]}]}}}sh0oki-israel-rail-api-3fa62b1/tests/000077500000000000000000000000001454013106000174225ustar00rootroot00000000000000sh0oki-israel-rail-api-3fa62b1/tests/test_api.py000066400000000000000000000017441454013106000216120ustar00rootroot00000000000000import unittest from israelrailapi import api TEST_API_NAME = 'MyApi' TEST_PARAMS = {'required': {}, 'notRequired': {'required': False}, 'default': {'default': 5} } class ApiTest(unittest.TestCase): def setUp(self) -> None: super().setUp() self.rail_test = api.IsraelRailApi(TEST_API_NAME, TEST_PARAMS) def test_setup(self): self.assertEqual(self.rail_test.url, api.API_BASE + "/" + TEST_API_NAME) def test_request_args(self): result = self.rail_test.prepare_arguments({'required': 'Hello'}) self.assertEqual(result, {'required': 'Hello', 'default': 5}) with self.assertRaises(KeyError): self.rail_test.prepare_arguments({'notRequired': 'Hello'}) with self.assertRaises(KeyError): self.rail_test.prepare_arguments({'required': 'Hello', 'notRequired': 'Hello', 'random': 7}) if __name__ == '__main__': unittest.main() sh0oki-israel-rail-api-3fa62b1/tests/test_train_station.py000066400000000000000000000012471454013106000237150ustar00rootroot00000000000000import unittest from israelrailapi import train_station KNOWN_STATIONS = {'Jerusalem- yitzhak navon': 680, 'Dimona': 7500} class ApiTest(unittest.TestCase): def test_station_lookup(self): # Testing known stations, not ideal but... for name, station_id in KNOWN_STATIONS.items(): self.assertEqual(str(station_id), train_station.lookup_station(name)) def failed_station_lookup(self): with self.assertRaises(KeyError): train_station.lookup_station('NY Penn') with self.assertRaises(KeyError): train_station.lookup_station['-700'] if __name__ == '__main__': unittest.main()