From e287f95b596b832585439f77fad4b1e039d6d217 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Sun, 17 Mar 2019 23:27:45 +0900 Subject: [PATCH] upgrade wakatime-cli to v10.8.1 --- packages/wakatime/__about__.py | 2 +- packages/wakatime/api.py | 6 +++++- packages/wakatime/arguments.py | 8 +++++++- packages/wakatime/heartbeat.py | 3 +++ packages/wakatime/project.py | 2 ++ packages/wakatime/stats.py | 9 +++++++-- packages/wakatime/utils.py | 9 ++++++++- 7 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/wakatime/__about__.py b/packages/wakatime/__about__.py index 4fce0b5..1389dbd 100644 --- a/packages/wakatime/__about__.py +++ b/packages/wakatime/__about__.py @@ -1,7 +1,7 @@ __title__ = 'wakatime' __description__ = 'Common interface to the WakaTime api.' __url__ = 'https://github.com/wakatime/wakatime' -__version_info__ = ('10', '6', '1') +__version_info__ = ('10', '8', '1') __version__ = '.'.join(__version_info__) __author__ = 'Alan Hamlett' __author_email__ = 'alan@wakatime.com' diff --git a/packages/wakatime/api.py b/packages/wakatime/api.py index a6d0b4c..a98ebeb 100644 --- a/packages/wakatime/api.py +++ b/packages/wakatime/api.py @@ -99,12 +99,16 @@ def send_heartbeats(heartbeats, args, configs, use_ntlm_proxy=False): should_try_ntlm = '\\' in args.proxy proxies['https'] = args.proxy + ssl_verify = not args.nosslverify + if args.ssl_certs_file and ssl_verify: + ssl_verify = args.ssl_certs_file + # send request to api response, code = None, None try: response = session.post(api_url, data=request_body, headers=headers, proxies=proxies, timeout=timeout, - verify=not args.nosslverify) + verify=ssl_verify) except RequestException: if should_try_ntlm: return send_heartbeats(heartbeats, args, configs, use_ntlm_proxy=True) diff --git a/packages/wakatime/arguments.py b/packages/wakatime/arguments.py index 4fb2da0..d02b57a 100644 --- a/packages/wakatime/arguments.py +++ b/packages/wakatime/arguments.py @@ -103,6 +103,10 @@ def parse_arguments(): help='Disables SSL certificate verification for HTTPS '+ 'requests. By default, SSL certificates are ' + 'verified.') + parser.add_argument('--ssl-certs-file', dest='ssl_certs_file', + action=StoreWithoutQuotes, + help='Override the bundled Python Requests CA certs ' + + 'file. By default, uses certifi for ca certs.') parser.add_argument('--project', dest='project', action=StoreWithoutQuotes, help='Optional project name.') parser.add_argument('--alternate-project', dest='alternate_project', @@ -307,6 +311,8 @@ def parse_arguments(): 'domain\\user:pass.') if configs.has_option('settings', 'no_ssl_verify'): args.nosslverify = configs.getboolean('settings', 'no_ssl_verify') + if configs.has_option('settings', 'ssl_certs_file'): + args.ssl_certs_file = configs.get('settings', 'ssl_certs_file') if not args.verbose and configs.has_option('settings', 'verbose'): args.verbose = configs.getboolean('settings', 'verbose') if not args.verbose and configs.has_option('settings', 'debug'): @@ -335,7 +341,7 @@ def boolean_or_list(config_name, args, configs, alternative_names=[]): """Get a boolean or list of regexes from args and configs.""" # when argument flag present, set to wildcard regex - for key in alternative_names: + for key in alternative_names + [config_name]: if hasattr(args, key) and getattr(args, key): setattr(args, config_name, ['.*']) return diff --git a/packages/wakatime/heartbeat.py b/packages/wakatime/heartbeat.py index ef53fdf..eae1ebc 100644 --- a/packages/wakatime/heartbeat.py +++ b/packages/wakatime/heartbeat.py @@ -249,6 +249,9 @@ class Heartbeat(object): if self.type != 'file': return + if not self.entity: + return + if not is_win: return diff --git a/packages/wakatime/project.py b/packages/wakatime/project.py index 70072f1..8aa7ca6 100644 --- a/packages/wakatime/project.py +++ b/packages/wakatime/project.py @@ -69,6 +69,8 @@ def get_project_info(configs, heartbeat, data): project_name = data.get('project') or heartbeat.args.project hide_project = heartbeat.should_obfuscate_project() + if hide_project and project_name is not None: + return project_name, None if project_name is None or branch_name is None: diff --git a/packages/wakatime/stats.py b/packages/wakatime/stats.py index 258e343..3b36e0d 100644 --- a/packages/wakatime/stats.py +++ b/packages/wakatime/stats.py @@ -25,6 +25,7 @@ from .packages.pygments.lexers import ( _fn_matches, basename, ClassNotFound, + CppLexer, find_lexer_class, get_lexer_by_name, ) @@ -181,8 +182,12 @@ def get_language_from_extension(file_name): return 'Objective-C++' available_extensions = extensions_in_same_folder(file_name) - if '.cpp' in available_extensions: - return 'C++' + + for ext in CppLexer.filenames: + ext = ext.lstrip('*') + if ext in available_extensions: + return 'C++' + if '.c' in available_extensions: return 'C' diff --git a/packages/wakatime/utils.py b/packages/wakatime/utils.py index 9e04ecf..a2d7b07 100644 --- a/packages/wakatime/utils.py +++ b/packages/wakatime/utils.py @@ -26,6 +26,7 @@ log = logging.getLogger('WakaTime') BACKSLASH_REPLACE_PATTERN = re.compile(r'[\\/]+') WINDOWS_DRIVE_PATTERN = re.compile(r'^[a-z]:/') +WINDOWS_NETWORK_MOUNT_PATTERN = re.compile(r'^\\{2}[a-z]+', re.IGNORECASE) def should_exclude(entity, include, exclude): @@ -77,10 +78,16 @@ def format_file_path(filepath): """Formats a path as absolute and with the correct platform separator.""" try: + is_windows_network_mount = WINDOWS_NETWORK_MOUNT_PATTERN.match(filepath) filepath = os.path.realpath(os.path.abspath(filepath)) filepath = re.sub(BACKSLASH_REPLACE_PATTERN, '/', filepath) - if WINDOWS_DRIVE_PATTERN.match(filepath): + is_windows_drive = WINDOWS_DRIVE_PATTERN.match(filepath) + if is_windows_drive: filepath = filepath.capitalize() + if is_windows_network_mount: + # Add back a / to the front, since the previous modifications + # will have replaced any double slashes with single + filepath = '/' + filepath except: pass return filepath