-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTaskKeyParser.py
More file actions
52 lines (40 loc) · 2.03 KB
/
Copy pathTaskKeyParser.py
File metadata and controls
52 lines (40 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""Helper functions to parse a task_key or task_group_key into components
Task key contains 'task:station:<id>:order:<id>:<item_id>:<idx>'
"""
from collections import namedtuple
from .Item import ItemId
from .Order import OrderId
from .Station import StationId
TaskIds = namedtuple('TaskIds', ['station_id', 'order_id', 'item_id', 'idx'])
TaskSubKeys = namedtuple(
'TaskSubKeys', ['task_group_key', 'station_key', 'order_key', 'item_id', 'idx'])
# Task key: 'task:station:<id>:order:<id>:<item_id>:<idx>'
def parse_task_key_to_ids(task_key) -> TaskIds:
"""Returns TaskIds(station_id, order_id, item_id, idx)"""
_, _, station_id, _, order_id, item_id, idx = task_key.split(':')
return TaskIds(
StationId(int(station_id)), OrderId(int(order_id)), ItemId(int(item_id)), int(idx))
def parse_task_key_to_keys(task_key) -> TaskSubKeys:
"""Returns TaskSubKeys(task_group_key, station_key, order_key, item_id, idx)"""
_, _, station_id, _, order_id, item_id, idx = task_key.split(':')
return TaskSubKeys(f'task:station:{station_id}:order:{order_id}', f'station:{station_id}',
f'order:{order_id}', ItemId(int(item_id)), int(idx))
def parse_task_key_to_group(task_key: str):
"""Return (task_group_key, item_id, idx).
Task key contains 'task:station:<id>:order:<id>:<item_id>:<idx>'
"""
task_group_key, item_id, idx = task_key.rsplit(':', 2)
return (task_group_key, ItemId(int(item_id)), int(idx))
# Task group key: 'task:station:<id>:order:<id>'
def parse_task_group_key_to_ids(task_group_key: str):
"""Return (station_id, order_id)
Task group key contains 'task:station:<id>:order:<id>'
"""
_, _, station_id, _, order_id = task_group_key.split(':')
return (StationId(int(station_id)), OrderId(int(order_id)))
def parse_task_group_key(task_group_key: str):
"""Return (station_key, order_key)
Task group key contains 'task:station:<id>:order:<id>'
"""
_, _, station_id, _, order_id = task_group_key.split(':')
return (f'station:{station_id}', f'order:{order_id}')