在公共交通网络上使用站点和公共汽车/车辆的数据类
pybuses-entities的Python项目详细描述
pybus实体
作为公共交通系统项目的一部分使用的数据类,包括车站和公共汽车。
虽然pybus实体专注于总线,但它几乎可以与任何工作的公共交通系统一起使用 以类似的方式。
该项目依赖于两个基本类:
- 停车:公共汽车停下来接送乘客的实际地点
- 公共汽车:一种移动的车辆,有一定的停车路线并在那里停车
本项目主要为python vigobusapi和vigobus telegrabot开发。 两个协同工作的项目(第一个是中间api,第二个是telegram bot后端 使用来自那个api的数据)。 在这个公共交通系统中,公共汽车停在各站,每一站我们都能得到公共汽车的名单 在他们到达之前的剩余时间。
这些类的有趣之处在于,它们可以生成一个json输出,可以通过我们的api提供服务, 然后转换回我们客户机中的类实例。
要求
- python=3.6
- 侏儒
安装
pip install pybuses-entities
更改日志
- 0.0.2:
- 添加选项以删除空列表&;实体的get_dict()方法上的空dict(默认为true)
- 将"Source"字段添加到AdvancedStop和BuseResult
- 为站点添加新的排序方法:按stopid排序,按距离排序
- 添加/改进文档字符串
- 0.0.1-初始版本
对象定义
stop和bus对象继承自pydantic。创建类的新实例时,其参数 必须以夸尔格的身份通过。 传递的额外Kwargs参数被忽略,因此这些类可以很好地将JSON用作输入和输出数据。
stop类和bus类都有两个从它们的基类继承的高级类级别,提供 更高级的属性。
可以以类似的方式创建自定义类,以满足每个特定项目的需要 以及公共交通系统,继承自这些基本类。
停止
属性
- stopid:此停止的唯一标识符(必需,int)
- 名称:此站的规范、可读名称,通常是其位置(必需,str)
- 纬度,经度:此站点的位置作为经纬度坐标(可选,浮点)
高级停止
- 已创建:首次创建或注册此停止定义时(可选,datetime/str/int/float)
- 已更新:上次更新此停止定义时(可选,datetime/str/int/float)1
- 原始名称:当停止名称从外部数据源提取并由我们更改时, 我们可以将其原始名称保留在此属性上(可选,str)1
- 标记:此站点的额外标记(可选,str列表)
- 附加名称:此站点的可选附加名称,例如原始名称的翻译或 用户常用的替代名称(可选,str列表)
- 距离:从该站点到某个点的距离。例如,当给出 在某个位置附近有哪些站点(可选,浮动)
- 源:从中提取数据的数据源的名称(可选,str)
1时间戳可以是:datetime对象、str表示或int/float epoch时间戳
示例
经典对象声明:
frompybusentimportStopstop_1=Stop(stopid=1,name="The Red Keep")stop_6960=Stop(stopid=6960,name="Praza do Rei",lat=42.235056274709,lon=-8.72675751435639)
json/kwargs声明(高级停止示例):
frompybusentimportAdvancedStopstop_data={"stopid":6660,"name":"Porta do Sol","lat":42.2379152928961,"lon":-8.72484658707515,"created":1529137067,"updated":1560673067,"original_name":"Porta Do Sol, s/n",# 1"tags":["center","centre""zentrum","center","casco viejo","old town"],# 2"extra_names":["puerta del sol","sun gate"],# 3"distance":25.38}stop=AdvancedStop(**stop_data)
1原始名称可以是提供停止信息的原始数据源给出的名称, 我们换成了更好看的格式
2由于该站位于市中心,我们使用了"中心"、"中心"等标签; 它也靠近老城区,因此使用了"老城区"之类的标记
"太阳门"到底是什么意思?西班牙语"puerta del sol"的直译, 不要在生产中做这些无用的翻译吗?)
总线
属性
- busid:此总线的唯一标识符(可选,str)-如果未提供,则自动生成busid 作为线路和线路的MD5和
- 线路:总线线路(必需,str)
- 路线:公交路线(必选,str)
- 时间:巴士到达某一站的剩余时间(可选,int/float/datetime/timedelta)1
高级总线
- 到达:巴士何时到达某一站(可选,int/float/datetime/timedelta)12
- 发车:巴士何时从某一站发车(可选,int/float/datetime/timedelta)12
- 站点:本车将停靠的站点列表(可选,站点对象列表)
1巴士剩余/到达/离开时间可以指定为相对时间 (从现在开始到到达/离开的时间)或绝对时间(datetime对象或int/float epoch时间戳)。 相对时间可以设置为int、float或timedelta,具体取决于表示该时间的方式。
2当运输系统区分到港和离港(例如许多列车网络)时,
使用AdvancedBus 经典对象声明: json/kwargs声明(advancedbus示例): 静态总线声明及其停止路径(AdvancedBus示例): 当我们想要返回一个更加上下文化的总线列表时,使用这个类。buseResult不从总线继承。
以下字段可用于为总线结果提供上下文: 可以继承stop、advancedstop、bus和advancedbus来创建具有新属性的自定义类
或更改基本属性。 如果不是专门为支持不同的数据类型而设计,那么涉及某些逻辑的属性可能会有问题
或者在设计为需要时是可选的。 例如,您可以跳过总线上的线路或路由,站点ID仍将自动生成,因为这种情况
被考虑过。
如果不是,则不可能在没有线路/路由的情况下实例化总线,因为这两个方法都是按顺序需要的
生成停止ID。 "我的总线网络没有行号,只有路由-我将创建一个没有行号的自定义总线类
(更像是,该行不是必需的)" "在我的公交网络中,公交车有一个标志,可以知道他们是否为行动不便的乘客提供了特殊的座位
(默认为false)" "在我的公交网络上,站牌上有字母,所以必须成为一个字符串" 定义了一组基于站点和总线的异常。它们不包含逻辑。到达时间而不是
时间
示例
fromdatetimeimportdatetimefrompybusentimportBus# Bus 15C (Mohawk Avenue - Bunker Hill Street) will arrive in 5 minutesbus=Bus(line="15C",route="Mohawk Avenue - Bunker Hill Street",time=5)# Bus 21 (Algonquin) will arrive in 1 minute and 30 secondsbus=Bus(line=21,route="Algonquin",time=timedelta(minutes=1,seconds=30))print(type(bus.line))# Line is casted to string although declared as int# Bus 5B (Dukes - Bohan) will arrive at 14h52# Creating a datetime object can be a bit more tricky since it requires the date# Get today date and replace time with the arrival timedt=datetime.now().replace(hour=14,minute=52,second=0,microsecond=0)bus=Bus(line="5B",route="Dukes - Bohan",time=dt)# It can be easier if your data source provides an epoch timestampepoch=1529137067dt=datetime.fromtimestamp(epoch)bus=Bus(line="5B",route="Dukes - Bohan",time=dt)
frompybusentimportAdvancedBusbus_data={"line":5,"route":"Middle Park - East Holland","arrival":5,"departure":7}bus=AdvancedBus(**bus_data)
frompybusentimportAdvancedBus# Define the route of the buses Line 5, Route 'Middle Park - East Holland'bus=AdvancedBus(line="5",route="Middle Park - East Holland",stops=[Stop(stopid=1231,name="Middle Park East"),Stop(stopid=1232,name="Middle Park West"),Stop(stopid=1233,name="Lancaster Avenue"),Stop(stopid=1234,name="East Holland South"),Stop(stopid=1235,name="East Holland North")])
总线结果
属性
示例
frompybusentimportBusesResultresult=BusesResult(buses=[Bus(line="5",route="Middle Park - East Holland",time=3),Bus(line="15C",route="Dukes - Bohan",time=9),Bus(line="5",route="Middle Park - East Holland",time=48),],stop=Stop(stopid=12812,name="Middle Park (Entrance)"),more_buses_available=True)
自定义类
示例
frompybusentimportBusclassMyBus(Bus):line:Optional[str]
frompybusentimportBusclassMyBus(Bus):reduced_mobility:bool=False
pip install pybuses-entities
0
例外情况
推荐PyPI第三方库