add simple entry listing command `list-entries`

master
Maximilian Zettler 4 years ago
parent 1e62be011c
commit 7a82a0e893
  1. 66
      timebot.py

@ -1,9 +1,9 @@
import argparse
import configparser
import datetime
import getpass
import logging
import sys
from datetime import datetime
import requests as requests
@ -17,12 +17,18 @@ logging.basicConfig(level=logging.INFO)
class TimeBot:
def __init__(self, baseurl: str, user: str, password: str):
self.logger = logging.getLogger(self.__class__.__name__)
self.baseurl = baseurl
self.baseurl = self._sanitize_baseurl(baseurl)
self.user = user
self.password = password
self._session = None
self._current_user = None
@staticmethod
def _sanitize_baseurl(baseurl: str):
if baseurl.endswith("/"):
return baseurl
return baseurl + "/"
@property
def session(self):
"""
@ -113,6 +119,41 @@ class TimeBot:
"""
return self.current_user["employee"]["id"]
def get_entries(self, entries: int = 10,
start_date: datetime.datetime = None,
end_date: datetime.datetime = None):
"""
List time entries.
:param int entries: number of entries to return
:param datetime.datetime start_date: start date of request; by default ``end_date`` - 10 days
:param datetime.datetime end_date: end date of request; usually the more recent date
:return:
"""
if not end_date:
end_date = datetime.datetime.now()
if not start_date:
start_date = end_date - datetime.timedelta(days=10)
filters = {"take": entries, "skip": 0, "page": 1, "pageSize": entries,
"sort": [{"field": "dateTime", "dir": "desc"}],
"filter": {"logic": "and",
"filters": [
{"field": "employeeId", "operator": "eq", "value": self.get_current_user_id()},
{"field": "errorText", "operator": "eq", "value": "all"}]}}
filters["filter"]["filters"].append({
"field": "startDate",
"operator": "gte",
"value": start_date.strftime("%Y-%m-%dT%H:%M:%S"),
})
filters["filter"]["filters"].append({
"field": "endDate",
"operator": "lte",
"value": end_date.strftime("%Y-%m-%dT%H:%M:%S"),
})
request = self.session.post(self.baseurl + "Entry/GetEntries", json=filters)
request.raise_for_status()
return request.json()["data"]
def punch_in(self, punch_in_date: str, punch_in_time: str):
"""
:param str punch_in_date: date string in format: ``DD.MM.YYYY``
@ -154,6 +195,7 @@ if __name__ == '__main__':
parser.add_argument("-c", help="config file", default="timebot.ini")
subparsers = parser.add_subparsers(help='sub-command help', dest='subparser_name')
# subparser command: `punch`
parser_punch = subparsers.add_parser("punch",
help="use this command to punch in, punch out, or create break entries")
parser_punch.add_argument("-t",
@ -162,6 +204,14 @@ if __name__ == '__main__':
choices=PUNCH_COMMANDS)
parser_punch.add_argument("-s", help="timestamp in format `DD.MM.YYYY_hh:mm` or `now`", default="now")
# subparser command: `list-entries`
parser_list_entries = subparsers.add_parser("list-entries", help="use this command to list your time entries")
parser_list_entries.add_argument("--start-date",
help="start date filter in format `DD.MM.YYYY_hh:mm` (default: now - 10days; unset for default)")
parser_list_entries.add_argument("--end-date",
help="end date filter in format `DD.MM.YYYY_hh:mm` (default: now; unset for default)")
parser_list_entries.add_argument("--items", help="max items to request per page", default=20, type=int)
args = parser.parse_args()
if args.v:
@ -177,7 +227,7 @@ if __name__ == '__main__':
tb = TimeBot(baseurl=config["general"]["baseurl"], user=args.u, password=password)
if args.subparser_name == "punch":
if args.s == "now":
now = datetime.now()
now = datetime.datetime.now()
punch_date = now.strftime("%d.%m.%Y")
punch_time = now.strftime("%H:%M")
else:
@ -185,6 +235,16 @@ if __name__ == '__main__':
punch_time = args.s.split("_")[1]
logger.info("running `{}` with date `{}` and time `{}`".format(args.t, punch_date, punch_time))
getattr(tb, args.t)(punch_date, punch_time)
elif args.subparser_name == "list-entries":
end_date = None
if args.end_date:
end_date = datetime.datetime.strptime(args.end_date, "%d.%m.%Y_%H:%M")
start_date = None
if args.start_date:
start_date = datetime.datetime.strptime(args.start_date, "%d.%m.%Y_%H:%M")
data = tb.get_entries(entries=args.items, start_date=start_date, end_date=end_date)
for i in data:
print("Entry: {} - DateTime: {} - Note: {}".format(i["entryName"], i["dateTime"], i["note"]))
else:
logger.error("Noting done... dunno what you want!")
sys.exit(1)

Loading…
Cancel
Save