allow timestamp option to be only time in format HH:MM

master
Maximilian Zettler 4 years ago
parent e63d5ddc20
commit 158c436f32
  1. 16
      timebot/app.py
  2. 27
      timebot/timebot.py

@ -5,9 +5,8 @@ import logging
import os import os
import sys import sys
from timebot.constants import SIMPLE_DATETIME_FORMAT_HUMAN, PUNCH_COMMANDS, SIMPLE_DATETIME_FORMAT, \ from timebot.constants import SIMPLE_DATETIME_FORMAT_HUMAN, PUNCH_COMMANDS, SIMPLE_DATE_FORMAT, SIMPLE_TIME_FORMAT
SIMPLE_DATE_FORMAT, SIMPLE_TIME_FORMAT from timebot.timebot import MobatimeApi, TimeBot, parse_user_time_input
from timebot.timebot import MobatimeApi, TimeBot
logger = logging.getLogger() logger = logging.getLogger()
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@ -65,7 +64,7 @@ def run():
config.read(args.c) config.read(args.c)
if args.use_system_ca_store: if args.use_system_ca_store:
os.environ["REQUESTS_CA_BUNDLE"] = config["general"]["system_ca_store"]\ os.environ["REQUESTS_CA_BUNDLE"] = config["general"]["system_ca_store"] \
if "system_ca_store" in config["general"] else "/etc/ssl/certs/ca-certificates.crt" if "system_ca_store" in config["general"] else "/etc/ssl/certs/ca-certificates.crt"
ma = MobatimeApi(baseurl=config["general"]["baseurl"], user=args.u, password=args.p, ask_for_password=True, ma = MobatimeApi(baseurl=config["general"]["baseurl"], user=args.u, password=args.p, ask_for_password=True,
@ -75,7 +74,7 @@ def run():
if args.s == "now": if args.s == "now":
punch_datetime = datetime.datetime.now() punch_datetime = datetime.datetime.now()
else: else:
punch_datetime = datetime.datetime.strptime(args.s, SIMPLE_DATETIME_FORMAT) punch_datetime = parse_user_time_input(args.s)
logger.info("running `{}` with date `{}` and time `{}`".format( logger.info("running `{}` with date `{}` and time `{}`".format(
args.t, args.t,
punch_datetime.strftime(SIMPLE_DATE_FORMAT), punch_datetime.strftime(SIMPLE_DATE_FORMAT),
@ -86,15 +85,15 @@ def run():
if args.s == "now": if args.s == "now":
punch_datetime = datetime.datetime.now() punch_datetime = datetime.datetime.now()
else: else:
punch_datetime = datetime.datetime.strptime(args.s, SIMPLE_DATETIME_FORMAT) punch_datetime = parse_user_time_input(args.s)
tb.smart_punch(punch_datetime) tb.smart_punch(punch_datetime)
elif args.subparser_name == "list-entries": elif args.subparser_name == "list-entries":
end_date = None end_date = None
if args.end_date: if args.end_date:
end_date = datetime.datetime.strptime(args.end_date, SIMPLE_DATETIME_FORMAT) end_date = parse_user_time_input(args.end_date)
start_date = None start_date = None
if args.start_date: if args.start_date:
start_date = datetime.datetime.strptime(args.start_date, SIMPLE_DATETIME_FORMAT) start_date = parse_user_time_input(args.start_date)
data = tb.mobatime_api.get_entries(entries=args.items, start_date=start_date, end_date=end_date) data = tb.mobatime_api.get_entries(entries=args.items, start_date=start_date, end_date=end_date)
data.reverse() data.reverse()
for i in data: for i in data:
@ -118,4 +117,3 @@ def run():
if __name__ == "__main__": if __name__ == "__main__":
run() run()

@ -11,6 +11,33 @@ from timebot.constants import COMING_ENTRY_CODE_ID, LEAVING_ENTRY_CODE_ID, BREAK
USER_AGENT USER_AGENT
package_logger = logging.getLogger(__name__)
class TimeParseError(Exception):
pass
def parse_user_time_input(stamp: str) -> datetime.datetime:
errors = []
try:
package_logger.debug(f"trying to parse date with format \"{SIMPLE_DATETIME_FORMAT}\"")
return datetime.datetime.strptime(stamp, SIMPLE_DATETIME_FORMAT)
except ValueError as e:
errors.append(e)
try:
package_logger.debug(f"trying to parse date with format \"{SIMPLE_TIME_FORMAT}\"")
t = datetime.datetime.strptime(stamp, SIMPLE_TIME_FORMAT)
dt = datetime.datetime.now()
dt = dt.replace(hour=0, minute=0, second=0, microsecond=0)
dt += datetime.timedelta(hours=t.hour, minutes=t.minute)
return dt
except ValueError as e:
errors.append(e)
package_logger.error(f"could not parse date with format \"{SIMPLE_DATETIME_FORMAT}\" or \"{SIMPLE_TIME_FORMAT}\"")
raise TimeParseError(errors)
class MobatimeApi: class MobatimeApi:
def __init__(self, baseurl: str, user: str, password: str = None, ask_for_password: bool = False, def __init__(self, baseurl: str, user: str, password: str = None, ask_for_password: bool = False,
save_session: bool = False, cookie_store: str = ".kekse"): save_session: bool = False, cookie_store: str = ".kekse"):

Loading…
Cancel
Save