From 45d0efaa7b2d89c5f3cf45aa876705f92524174c Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Sat, 20 Jul 2013 15:25:11 -0700 Subject: [PATCH] upgraded wakatime package to v0.1.3 --- plugin/packages/wakatime/.gitignore | 35 +++++++++++++++++ plugin/packages/wakatime/HISTORY.rst | 17 ++++++++ plugin/packages/wakatime/LICENSE | 29 ++++++++++++++ plugin/packages/wakatime/MANIFEST.in | 2 + plugin/packages/wakatime/README.rst | 12 ++++++ plugin/packages/wakatime/projects/__init__.py | 0 plugin/packages/wakatime/setup.py | 39 +++++++++++++++++++ plugin/packages/wakatime/wakatime-cli.py | 18 +++++++++ .../{wakatime.py => wakatime/__init__.py} | 35 +++++------------ .../packages/wakatime/{ => wakatime}/log.py | 0 .../{ => wakatime/packages}/__init__.py | 0 .../{ => wakatime}/packages/argparse.py | 0 .../{ => wakatime}/packages/ordereddict.py | 0 .../wakatime/{ => wakatime}/project.py | 0 .../projects}/__init__.py | 0 .../wakatime/{ => wakatime}/projects/base.py | 0 .../wakatime/{ => wakatime}/projects/git.py | 9 +++-- .../{ => wakatime}/projects/mercurial.py | 0 .../{ => wakatime}/projects/subversion.py | 39 ++++++++++++------- plugin/wakatime.vim | 4 +- 20 files changed, 194 insertions(+), 45 deletions(-) create mode 100644 plugin/packages/wakatime/.gitignore create mode 100644 plugin/packages/wakatime/HISTORY.rst create mode 100644 plugin/packages/wakatime/LICENSE create mode 100644 plugin/packages/wakatime/MANIFEST.in create mode 100644 plugin/packages/wakatime/README.rst delete mode 100644 plugin/packages/wakatime/projects/__init__.py create mode 100644 plugin/packages/wakatime/setup.py create mode 100644 plugin/packages/wakatime/wakatime-cli.py rename plugin/packages/wakatime/{wakatime.py => wakatime/__init__.py} (89%) rename plugin/packages/wakatime/{ => wakatime}/log.py (100%) rename plugin/packages/wakatime/{ => wakatime/packages}/__init__.py (100%) rename plugin/packages/wakatime/{ => wakatime}/packages/argparse.py (100%) rename plugin/packages/wakatime/{ => wakatime}/packages/ordereddict.py (100%) rename plugin/packages/wakatime/{ => wakatime}/project.py (100%) rename plugin/packages/wakatime/{packages => wakatime/projects}/__init__.py (100%) rename plugin/packages/wakatime/{ => wakatime}/projects/base.py (100%) rename plugin/packages/wakatime/{ => wakatime}/projects/git.py (93%) rename plugin/packages/wakatime/{ => wakatime}/projects/mercurial.py (100%) rename plugin/packages/wakatime/{ => wakatime}/projects/subversion.py (63%) diff --git a/plugin/packages/wakatime/.gitignore b/plugin/packages/wakatime/.gitignore new file mode 100644 index 0000000..d2d6f36 --- /dev/null +++ b/plugin/packages/wakatime/.gitignore @@ -0,0 +1,35 @@ +*.py[cod] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib +lib64 + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox +nosetests.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject diff --git a/plugin/packages/wakatime/HISTORY.rst b/plugin/packages/wakatime/HISTORY.rst new file mode 100644 index 0000000..5115afc --- /dev/null +++ b/plugin/packages/wakatime/HISTORY.rst @@ -0,0 +1,17 @@ + +History +------- + + +0.1.1 (2013-07-07) +++++++++++++++++++ + +- Refactored +- Simplified action events schema + + +0.0.1 (2013-07-05) +++++++++++++++++++ + +- Birth + diff --git a/plugin/packages/wakatime/LICENSE b/plugin/packages/wakatime/LICENSE new file mode 100644 index 0000000..3f5e510 --- /dev/null +++ b/plugin/packages/wakatime/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2013 Alan Hamlett https://wakati.me +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided + with the distribution. + +* Neither the names of Wakatime or Wakati.Me, nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugin/packages/wakatime/MANIFEST.in b/plugin/packages/wakatime/MANIFEST.in new file mode 100644 index 0000000..1bdfd9d --- /dev/null +++ b/plugin/packages/wakatime/MANIFEST.in @@ -0,0 +1,2 @@ +include README.rst LICENSE HISTORY.rst +recursive-include wakatime *.py diff --git a/plugin/packages/wakatime/README.rst b/plugin/packages/wakatime/README.rst new file mode 100644 index 0000000..82c0fc9 --- /dev/null +++ b/plugin/packages/wakatime/README.rst @@ -0,0 +1,12 @@ +Wakati.Me +========= + +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 +use this outside of a text editor plugin. + + +Installation +------------ + +https://www.wakati.me/help/plugins/installing-plugins diff --git a/plugin/packages/wakatime/projects/__init__.py b/plugin/packages/wakatime/projects/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/plugin/packages/wakatime/setup.py b/plugin/packages/wakatime/setup.py new file mode 100644 index 0000000..6fa173a --- /dev/null +++ b/plugin/packages/wakatime/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup + +from wakatime.__init__ import __version__ as VERSION + + +packages = [ + 'wakatime', +] + +setup( + name='wakatime', + version=VERSION, + license='BSD 3 Clause', + description=' '.join([ + 'Action event appender for Wakati.Me, a time', + 'tracking api for text editors.', + ]), + long_description=open('README.rst').read(), + author='Alan Hamlett', + author_email='alan.hamlett@gmail.com', + url='https://github.com/wakatime/wakatime', + packages=packages, + package_dir={'wakatime': 'wakatime'}, + include_package_data=True, + zip_safe=False, + platforms='any', + entry_points={ + 'console_scripts': ['wakatime = wakatime.__init__:main'], + }, + classifiers=( + 'Development Status :: 3 - Alpha', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Natural Language :: English', + 'Programming Language :: Python', + 'Topic :: Text Editors', + ), +) diff --git a/plugin/packages/wakatime/wakatime-cli.py b/plugin/packages/wakatime/wakatime-cli.py new file mode 100644 index 0000000..baf6bc9 --- /dev/null +++ b/plugin/packages/wakatime/wakatime-cli.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" + wakatime-cli + ~~~~~~~~~~~~ + + Action event appender for Wakati.Me, auto time tracking for text editors. + + :copyright: (c) 2013 Alan Hamlett. + :license: BSD, see LICENSE for more details. +""" + +from __future__ import print_function + +import sys +import wakatime + +if __name__ == '__main__': + sys.exit(wakatime.main(sys.argv)) diff --git a/plugin/packages/wakatime/wakatime.py b/plugin/packages/wakatime/wakatime/__init__.py similarity index 89% rename from plugin/packages/wakatime/wakatime.py rename to plugin/packages/wakatime/wakatime/__init__.py index b416d5a..a27cd6f 100644 --- a/plugin/packages/wakatime/wakatime.py +++ b/plugin/packages/wakatime/wakatime/__init__.py @@ -3,7 +3,7 @@ wakatime ~~~~~~~~ - Action event appender for Wakati.Me, a time tracking api for text editors. + Action event appender for Wakati.Me, auto time tracking for text editors. :copyright: (c) 2013 Alan Hamlett. :license: BSD, see LICENSE for more details. @@ -12,22 +12,12 @@ from __future__ import print_function __title__ = 'wakatime' -__version__ = '0.1.2' +__version__ = '0.1.3' __author__ = 'Alan Hamlett' __license__ = 'BSD' __copyright__ = 'Copyright 2013 Alan Hamlett' -# allow running script directly -if __name__ == '__main__' and __package__ is None: - import os, sys - parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - sys.path.insert(0, parent_dir) - import wakatime - __package__ = 'wakatime' - del os, sys - - import base64 import json import logging @@ -41,11 +31,7 @@ import urllib2 from .log import setup_logging from .project import find_project - -try: - import argparse -except ImportError: - from .packages import argparse +from .packages import argparse log = logging.getLogger(__name__) @@ -58,7 +44,7 @@ class FileAction(argparse.Action): setattr(namespace, self.dest, values) -def parseArguments(): +def parseArguments(argv): parser = argparse.ArgumentParser( description='Wakati.Me event api appender') parser.add_argument('--file', dest='targetFile', metavar='file', @@ -88,7 +74,7 @@ def parseArguments(): parser.add_argument('--verbose', dest='verbose', action='store_true', help='turns on debug messages in log file') parser.add_argument('--version', action='version', version=__version__) - args = parser.parse_args() + args = parser.parse_args(args=argv[1:]) if not args.timestamp: args.timestamp = time.time() if not args.key: @@ -138,7 +124,7 @@ def send_action(project=None, tags=None, key=None, targetFile=None, if project: data['project'] = project if tags: - data['tags'] = tags + data['tags'] = list(set(tags)) log.debug(data) request = urllib2.Request(url=url, data=json.dumps(data)) user_agent = get_user_agent(plugin) @@ -178,8 +164,10 @@ def send_action(project=None, tags=None, key=None, targetFile=None, return False -def main(): - args = parseArguments() +def main(argv=None): + if not argv: + argv = sys.argv + args = parseArguments(argv) setup_logging(args, __version__) if os.path.isfile(args.targetFile): project = find_project(args.targetFile) @@ -191,6 +179,3 @@ def main(): log.debug('File does not exist; ignoring this action.') return 101 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/plugin/packages/wakatime/log.py b/plugin/packages/wakatime/wakatime/log.py similarity index 100% rename from plugin/packages/wakatime/log.py rename to plugin/packages/wakatime/wakatime/log.py diff --git a/plugin/packages/wakatime/__init__.py b/plugin/packages/wakatime/wakatime/packages/__init__.py similarity index 100% rename from plugin/packages/wakatime/__init__.py rename to plugin/packages/wakatime/wakatime/packages/__init__.py diff --git a/plugin/packages/wakatime/packages/argparse.py b/plugin/packages/wakatime/wakatime/packages/argparse.py similarity index 100% rename from plugin/packages/wakatime/packages/argparse.py rename to plugin/packages/wakatime/wakatime/packages/argparse.py diff --git a/plugin/packages/wakatime/packages/ordereddict.py b/plugin/packages/wakatime/wakatime/packages/ordereddict.py similarity index 100% rename from plugin/packages/wakatime/packages/ordereddict.py rename to plugin/packages/wakatime/wakatime/packages/ordereddict.py diff --git a/plugin/packages/wakatime/project.py b/plugin/packages/wakatime/wakatime/project.py similarity index 100% rename from plugin/packages/wakatime/project.py rename to plugin/packages/wakatime/wakatime/project.py diff --git a/plugin/packages/wakatime/packages/__init__.py b/plugin/packages/wakatime/wakatime/projects/__init__.py similarity index 100% rename from plugin/packages/wakatime/packages/__init__.py rename to plugin/packages/wakatime/wakatime/projects/__init__.py diff --git a/plugin/packages/wakatime/projects/base.py b/plugin/packages/wakatime/wakatime/projects/base.py similarity index 100% rename from plugin/packages/wakatime/projects/base.py rename to plugin/packages/wakatime/wakatime/projects/base.py diff --git a/plugin/packages/wakatime/projects/git.py b/plugin/packages/wakatime/wakatime/projects/git.py similarity index 93% rename from plugin/packages/wakatime/projects/git.py rename to plugin/packages/wakatime/wakatime/projects/git.py index 8639637..ea38cb6 100644 --- a/plugin/packages/wakatime/projects/git.py +++ b/plugin/packages/wakatime/wakatime/projects/git.py @@ -37,13 +37,14 @@ class Git(BaseProject): def tags(self): tags = [] if self.config: - base = self._project_base() - if base: - tags.append(base) + 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]: - tags.append(sections[section]['url']) + remote = sections[section]['url'].rsplit(':', 1)[1].rsplit('/', 1)[1].split('.git', 1)[0] + tags.append(remote) branch = self._current_branch() if branch is not None: tags.append(branch) diff --git a/plugin/packages/wakatime/projects/mercurial.py b/plugin/packages/wakatime/wakatime/projects/mercurial.py similarity index 100% rename from plugin/packages/wakatime/projects/mercurial.py rename to plugin/packages/wakatime/wakatime/projects/mercurial.py diff --git a/plugin/packages/wakatime/projects/subversion.py b/plugin/packages/wakatime/wakatime/projects/subversion.py similarity index 63% rename from plugin/packages/wakatime/projects/subversion.py rename to plugin/packages/wakatime/wakatime/projects/subversion.py index 92d0eef..30e3d7b 100644 --- a/plugin/packages/wakatime/projects/subversion.py +++ b/plugin/packages/wakatime/wakatime/projects/subversion.py @@ -23,20 +23,23 @@ log = logging.getLogger(__name__) class Subversion(BaseProject): def process(self): - self.info = self._get_info() - if 'Repository Root' in self.info: - return True - return False + return self._find_project_base(self.path) def name(self): return self.info['Repository Root'].split('/')[-1] - def _get_info(self): + def tags(self): + tags = [] + if self.base: + tags.append(os.path.basename(self.base)) + return tags + + def _get_info(self, path): info = OrderedDict() stdout = None try: stdout, stderr = Popen([ - 'svn', 'info', os.path.realpath(self.path) + 'svn', 'info', os.path.realpath(path) ], stdout=PIPE, stderr=PIPE).communicate() except OSError: pass @@ -53,11 +56,19 @@ class Subversion(BaseProject): info[line[0]] = line[1] return info - def tags(self): - tags = [] - for key in self.info: - if key == 'Repository UUID': - tags.append(self.info[key]) - if key == 'URL': - tags.append(os.path.dirname(self.info[key])) - return tags + def _find_project_base(self, path, found=False): + path = os.path.realpath(path) + if os.path.isfile(path): + path = os.path.split(path)[0] + info = self._get_info(path) + if len(info) > 0: + found = True + self.base = path + self.info = info + elif found: + return True + split_path = os.path.split(path) + if split_path[1] == '': + return found + return self._find_project_base(split_path[0], found) + diff --git a/plugin/wakatime.vim b/plugin/wakatime.vim index 1e88301..2e7b135 100644 --- a/plugin/wakatime.vim +++ b/plugin/wakatime.vim @@ -4,7 +4,7 @@ " Maintainer: Wakati.Me " ============================================================================ -let s:VERSION = '0.2.3' +let s:VERSION = '0.2.4' " Init {{{ @@ -84,7 +84,7 @@ let s:VERSION = '0.2.3' let targetFile = a:last[2] endif if targetFile != '' - let cmd = ['python2', s:plugin_directory . 'packages/wakatime/wakatime.py'] + let cmd = ['python2', s:plugin_directory . 'packages/wakatime/wakatime-cli.py'] let cmd = cmd + ['--file', shellescape(targetFile)] let cmd = cmd + ['--time', printf('%f', a:time)] let cmd = cmd + ['--plugin', printf('vim-wakatime/%s', s:VERSION)]