sublime-wakatime/packages/wakatime/main.py

107 lines
2.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""
2015-09-29 13:11:25 +03:00
wakatime.main
2015-03-10 01:23:29 +03:00
~~~~~~~~~~~~~
2017-02-21 03:18:38 +03:00
Module entry point.
:copyright: (c) 2013 Alan Hamlett.
:license: BSD, see LICENSE for more details.
"""
from __future__ import print_function
import logging
import os
import sys
2018-10-05 10:06:02 +03:00
import time
import traceback
2016-03-06 23:48:42 +03:00
pwd = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(pwd))
sys.path.insert(0, os.path.join(pwd, 'packages'))
2014-06-10 00:18:30 +04:00
2020-02-10 10:35:43 +03:00
from .compat import is_py26
if not is_py26:
sys.path.insert(0, os.path.join(pwd, 'packages', 'py27'))
2015-03-10 01:23:29 +03:00
from .__about__ import __version__
2019-05-08 04:42:31 +03:00
from .api import send_heartbeats, get_time_today
2017-11-09 10:12:05 +03:00
from .arguments import parse_arguments
from .compat import u, json
2018-09-21 08:29:34 +03:00
from .constants import SUCCESS, UNKNOWN_ERROR, HEARTBEATS_PER_REQUEST
2015-04-04 21:03:55 +03:00
from .logger import setup_logging
2017-05-25 09:53:28 +03:00
2020-02-10 10:35:43 +03:00
2017-05-25 09:53:28 +03:00
log = logging.getLogger('WakaTime')
2020-02-10 10:35:43 +03:00
2017-11-09 10:12:05 +03:00
from .heartbeat import Heartbeat
2015-05-13 01:03:23 +03:00
from .offlinequeue import Queue
2016-04-29 01:04:46 +03:00
2015-09-29 13:11:25 +03:00
def execute(argv=None):
if argv:
sys.argv = ['wakatime'] + argv
2019-11-24 18:46:13 +03:00
try:
args, configs = parse_arguments()
except SystemExit as ex:
return ex.code
setup_logging(args, __version__)
2019-05-08 04:42:31 +03:00
if args.today:
text, retval = get_time_today(args)
if text:
print(text)
return retval
2016-01-07 00:57:03 +03:00
try:
2017-11-09 10:12:05 +03:00
heartbeats = []
2016-01-07 00:57:03 +03:00
2017-11-09 10:12:05 +03:00
hb = Heartbeat(vars(args), args, configs)
if hb:
heartbeats.append(hb)
2019-11-24 18:46:13 +03:00
elif args.entity:
2017-11-09 10:12:05 +03:00
log.debug(hb.skip)
2016-04-29 01:04:46 +03:00
if args.extra_heartbeats:
try:
2017-11-09 10:12:05 +03:00
for extra_data in json.loads(sys.stdin.readline()):
hb = Heartbeat(extra_data, args, configs)
if hb:
heartbeats.append(hb)
else:
log.debug(hb.skip)
except json.JSONDecodeError as ex:
log.warning(u('Malformed extra heartbeats json: {msg}').format(
msg=u(ex),
))
2016-04-29 01:04:46 +03:00
2018-09-21 08:29:34 +03:00
retval = SUCCESS
while heartbeats:
retval = send_heartbeats(heartbeats[:HEARTBEATS_PER_REQUEST], args, configs)
heartbeats = heartbeats[HEARTBEATS_PER_REQUEST:]
if retval != SUCCESS:
break
if heartbeats:
Queue(args, configs).push_many(heartbeats)
2016-04-29 01:04:46 +03:00
if retval == SUCCESS:
2017-11-09 10:12:05 +03:00
queue = Queue(args, configs)
2018-09-21 08:29:34 +03:00
for offline_heartbeats in queue.pop_many(args.sync_offline_activity):
2018-10-05 10:06:02 +03:00
time.sleep(1)
2017-11-09 10:12:05 +03:00
retval = send_heartbeats(offline_heartbeats, args, configs)
2018-09-21 08:29:34 +03:00
if retval != SUCCESS:
break
2016-04-29 01:04:46 +03:00
return retval
2016-01-07 00:57:03 +03:00
except:
2016-09-02 11:50:54 +03:00
log.traceback(logging.ERROR)
2016-04-29 01:04:46 +03:00
print(traceback.format_exc())
2016-03-07 01:13:27 +03:00
return UNKNOWN_ERROR