From 81fe41409a5f8f4aade7cca6a4fdba3ee90d6da0 Mon Sep 17 00:00:00 2001 From: 3onyc <3onyc@x3tech.com> Date: Thu, 14 Nov 2013 09:52:00 +0100 Subject: [PATCH] Implement ProjectMap plugin --- wakatime/project.py | 2 ++ wakatime/projects/projectmap.py | 58 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 wakatime/projects/projectmap.py diff --git a/wakatime/project.py b/wakatime/project.py index e27a219..f10a24c 100644 --- a/wakatime/project.py +++ b/wakatime/project.py @@ -13,6 +13,7 @@ import logging import os from .projects.wakatime import WakaTime +from .projects.projectmap import ProjectMap from .projects.git import Git from .projects.mercurial import Mercurial from .projects.subversion import Subversion @@ -22,6 +23,7 @@ log = logging.getLogger(__name__) PLUGINS = [ WakaTime, + ProjectMap, Git, Mercurial, Subversion, diff --git a/wakatime/projects/projectmap.py b/wakatime/projects/projectmap.py new file mode 100644 index 0000000..f2183ea --- /dev/null +++ b/wakatime/projects/projectmap.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +""" + wakatime.projects.projectmap + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Information from ~/.waka-projectmap mapping folders (relative to home folder) + to project names + + :author: 3onyc + :license: BSD, see LICENSE for more details. +""" + +import logging +import os + +from ..packages import simplejson as json + +from .base import BaseProject + + +log = logging.getLogger(__name__) + + +class ProjectMap(BaseProject): + def process(self): + self.config = self._load_config() + if self.config: + log.debug(self.config) + return True + + return False + + def branch(self): + return None + + def name(self): + for path in self._path_generator(): + if path in self.config: + return self.config[path] + + return None + + def _load_config(self): + map_path = "%s/.waka-projectmap" % os.environ['HOME'] + if os.path.isfile(map_path): + with open(map_path) as map_file: + try: + return json.load(map_file) + except (IOError, json.JSONDecodeError) as e: + log.exception("ProjectMap Exception: ") + + return False + + def _path_generator(self): + path = self.path.replace(os.environ['HOME'], '') + while path != os.path.dirname(path): + yield path + path = os.path.dirname(path)