From 9091b85ee9bf64fda18effba7e2a0149a332ff37 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Fri, 6 Sep 2013 22:58:35 -0700 Subject: [PATCH] upgraded wakatime package to v0.4.4 correctly --- plugin/packages/wakatime/HISTORY.rst | 37 +++++++++++++ plugin/packages/wakatime/README.rst | 8 +-- plugin/packages/wakatime/wakatime/__init__.py | 52 +++++++++---------- plugin/packages/wakatime/wakatime/log.py | 14 +++-- .../wakatime/wakatime/projects/base.py | 7 ++- .../wakatime/wakatime/projects/git.py | 30 +++-------- .../wakatime/wakatime/projects/mercurial.py | 4 +- .../wakatime/wakatime/projects/subversion.py | 8 +-- 8 files changed, 91 insertions(+), 69 deletions(-) diff --git a/plugin/packages/wakatime/HISTORY.rst b/plugin/packages/wakatime/HISTORY.rst index dfdfc3f..3e0927f 100644 --- a/plugin/packages/wakatime/HISTORY.rst +++ b/plugin/packages/wakatime/HISTORY.rst @@ -2,6 +2,43 @@ History ------- + +0.4.4 (2013-09-06) +++++++++++++++++++ + +- Using urllib2 again because of intermittent problems sending json with requests library + + +0.4.3 (2013-09-04) +++++++++++++++++++ + +- Encoding json as utf-8 before making request + + +0.4.2 (2013-09-04) +++++++++++++++++++ + +- Using requests package v1.2.3 from pypi + + +0.4.1 (2013-08-25) +++++++++++++++++++ + +- Fix bug causing requests library to omit POST content + + +0.4.0 (2013-08-15) +++++++++++++++++++ + +- Sending single branch instead of multiple tags + + +0.3.1 (2013-08-08) +++++++++++++++++++ + +- Using requests module instead of urllib2 to verify SSL certs + + 0.3.0 (2013-08-08) ++++++++++++++++++ diff --git a/plugin/packages/wakatime/README.rst b/plugin/packages/wakatime/README.rst index 82c0fc9..ee5be89 100644 --- a/plugin/packages/wakatime/README.rst +++ b/plugin/packages/wakatime/README.rst @@ -1,8 +1,8 @@ -Wakati.Me -========= +WakaTime +======== -Wakati.Me is a time tracking api for text editors. This is the command line -action event appender for the Wakati.Me api. You shouldn't need to directly +Automatic time tracking for your text editor. This is the command line +event appender for the WakaTime api. You shouldn't need to directly use this outside of a text editor plugin. diff --git a/plugin/packages/wakatime/wakatime/__init__.py b/plugin/packages/wakatime/wakatime/__init__.py index cc7fbd9..97d4283 100644 --- a/plugin/packages/wakatime/wakatime/__init__.py +++ b/plugin/packages/wakatime/wakatime/__init__.py @@ -12,14 +12,13 @@ from __future__ import print_function __title__ = 'wakatime' -__version__ = '0.3.0' +__version__ = '0.4.4' __author__ = 'Alan Hamlett' __license__ = 'BSD' __copyright__ = 'Copyright 2013 Alan Hamlett' import base64 -import json import logging import os import platform @@ -27,20 +26,18 @@ import re import sys import time import traceback + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from .log import setup_logging +from .project import find_project +from .packages import argparse +from .packages import simplejson as json try: from urllib2 import HTTPError, Request, urlopen except ImportError: from urllib.error import HTTPError from urllib.request import Request, urlopen -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from .log import setup_logging -from .project import find_project -try: - import argparse -except ImportError: - from .packages import argparse - log = logging.getLogger(__name__) @@ -124,7 +121,7 @@ def get_user_agent(plugin): return user_agent -def send_action(project=None, tags=None, key=None, targetFile=None, +def send_action(project=None, branch=None, key=None, targetFile=None, timestamp=None, endtime=None, isWrite=None, plugin=None, **kwargs): url = 'https://www.wakati.me/api/v1/actions' log.debug('Sending action to api at %s' % url) @@ -138,39 +135,40 @@ def send_action(project=None, tags=None, key=None, targetFile=None, data['is_write'] = isWrite if project: data['project'] = project - if tags: - data['tags'] = list(set(tags)) + if branch: + data['branch'] = branch log.debug(data) + + # setup api request request = Request(url=url, data=str.encode(json.dumps(data))) - user_agent = get_user_agent(plugin) - request.add_header('User-Agent', user_agent) + request.add_header('User-Agent', get_user_agent(plugin)) request.add_header('Content-Type', 'application/json') auth = 'Basic %s' % bytes.decode(base64.b64encode(str.encode(key))) request.add_header('Authorization', auth) + + # log time to api response = None try: response = urlopen(request) except HTTPError as exc: - data = { + exception_data = { 'response_code': exc.getcode(), - 'response_content': exc.read(), sys.exc_info()[0].__name__: str(sys.exc_info()[1]), } if log.isEnabledFor(logging.DEBUG): - data['traceback'] = traceback.format_exc() - log.error(data) + exception_data['traceback'] = traceback.format_exc() + log.error(exception_data) except: - data = { + exception_data = { sys.exc_info()[0].__name__: str(sys.exc_info()[1]), } if log.isEnabledFor(logging.DEBUG): - data['traceback'] = traceback.format_exc() - log.error(data) + exception_data['traceback'] = traceback.format_exc() + log.error(exception_data) else: - if response.getcode() >= 200 and response.getcode() < 300: + if response.getcode() == 201: log.debug({ 'response_code': response.getcode(), - 'response_content': response.read(), }) return True log.error({ @@ -186,13 +184,13 @@ def main(argv=None): args = parseArguments(argv) setup_logging(args, __version__) if os.path.isfile(args.targetFile): - tags = [] + branch = None name = None project = find_project(args.targetFile) if project: - tags = project.tags() + branch = project.branch() name = project.name() - if send_action(project=name, tags=tags, **vars(args)): + if send_action(project=name, branch=branch, **vars(args)): return 0 return 102 else: diff --git a/plugin/packages/wakatime/wakatime/log.py b/plugin/packages/wakatime/wakatime/log.py index 9001d17..665c0b6 100644 --- a/plugin/packages/wakatime/wakatime/log.py +++ b/plugin/packages/wakatime/wakatime/log.py @@ -9,10 +9,10 @@ :license: BSD, see LICENSE for more details. """ -import json import logging import os +from .packages import simplejson as json try: from collections import OrderedDict except ImportError: @@ -62,8 +62,16 @@ class JsonFormatter(logging.Formatter): return exec_info[2].format_exc() +def set_log_level(logger, args): + level = logging.WARN + if args.verbose: + level = logging.DEBUG + logger.setLevel(level) + + def setup_logging(args, version): logger = logging.getLogger() + set_log_level(logger, args) if len(logger.handlers) > 0: return logger logfile = args.logfile @@ -81,8 +89,4 @@ def setup_logging(args, version): ) handler.setFormatter(formatter) logger.addHandler(handler) - level = logging.INFO - if args.verbose: - level = logging.DEBUG - logger.setLevel(level) return logger diff --git a/plugin/packages/wakatime/wakatime/projects/base.py b/plugin/packages/wakatime/wakatime/projects/base.py index 728a7f8..8e1b7a5 100644 --- a/plugin/packages/wakatime/wakatime/projects/base.py +++ b/plugin/packages/wakatime/wakatime/projects/base.py @@ -47,8 +47,7 @@ class BaseProject(object): """ return None - def tags(self): - """ Returns an array of tag strings for the - path and/or project. + def branch(self): + """ Returns the current branch. """ - return [] + return None diff --git a/plugin/packages/wakatime/wakatime/projects/git.py b/plugin/packages/wakatime/wakatime/projects/git.py index 8a52dcb..94f1cc2 100644 --- a/plugin/packages/wakatime/wakatime/projects/git.py +++ b/plugin/packages/wakatime/wakatime/projects/git.py @@ -37,29 +37,7 @@ class Git(BaseProject): return os.path.basename(base) return None - def tags(self): - tags = [] - if self.config: - proj_name = self.name() - if proj_name: - tags.append(proj_name) - sections = self._parse_config() - for section in sections: - if section.split(' ', 1)[0] == 'remote' and 'url' in sections[section]: - remote = sections[section]['url'].rsplit(':', 1)[-1].rsplit('/', 1)[-1].split('.git', 1)[0] - if remote: - tags.append(remote) - branch = self._current_branch() - if branch is not None: - tags.append(branch) - return tags - - def _project_base(self): - if self.config: - return os.path.dirname(os.path.dirname(self.config)) - return None - - def _current_branch(self): + def branch(self): stdout = None try: stdout, stderr = Popen([ @@ -77,6 +55,12 @@ class Git(BaseProject): return line[1] return None + + def _project_base(self): + if self.config: + return os.path.dirname(os.path.dirname(self.config)) + return None + def _find_config(self, path): path = os.path.realpath(path) if os.path.isfile(path): diff --git a/plugin/packages/wakatime/wakatime/projects/mercurial.py b/plugin/packages/wakatime/wakatime/projects/mercurial.py index 7d9b2ae..4e9ce96 100644 --- a/plugin/packages/wakatime/wakatime/projects/mercurial.py +++ b/plugin/packages/wakatime/wakatime/projects/mercurial.py @@ -26,5 +26,5 @@ class Mercurial(BaseProject): def name(self): return None - def tags(self): - return [] + def branch(self): + return None diff --git a/plugin/packages/wakatime/wakatime/projects/subversion.py b/plugin/packages/wakatime/wakatime/projects/subversion.py index c8f54af..6a7aed5 100644 --- a/plugin/packages/wakatime/wakatime/projects/subversion.py +++ b/plugin/packages/wakatime/wakatime/projects/subversion.py @@ -31,11 +31,11 @@ class Subversion(BaseProject): def name(self): return self.info['Repository Root'].split('/')[-1] - def tags(self): - tags = [] + def branch(self): + branch = None if self.base: - tags.append(os.path.basename(self.base)) - return tags + branch = os.path.basename(self.base) + return branch def _get_info(self, path): info = OrderedDict()