From d822334fddffabd81fb3b4b7670519c7bac31c74 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Tue, 16 Jan 2018 00:57:06 +0200 Subject: [PATCH] Drop "python-dateutil" dependency, implement light-weight "parse_date" --- platformio/commands/lib.py | 23 +++++++++++++++-------- platformio/managers/lib.py | 5 ++--- platformio/util.py | 18 ++++++++++++------ setup.py | 1 - 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/platformio/commands/lib.py b/platformio/commands/lib.py index 5f6e2271..87f87d7c 100644 --- a/platformio/commands/lib.py +++ b/platformio/commands/lib.py @@ -15,8 +15,8 @@ # pylint: disable=too-many-branches, too-many-locals import json +import time from os.path import isdir, join -from time import sleep from urllib import quote import click @@ -250,7 +250,7 @@ def lib_search(query, json_output, page, noninteractive, **filters): result['perpage'], fg="yellow") click.echo() - sleep(5) + time.sleep(5) elif not click.confirm("Show next libraries?"): break result = get_api_result( @@ -322,7 +322,10 @@ def lib_show(library, json_output): click.echo(lib['description']) click.echo() - click.echo("Version: {name}, released {released}".format(**lib['version'])) + click.echo( + "Version: %s, released %s" % + (lib['version']['name'], + time.strftime("%c", util.parse_date(lib['version']['released'])))) click.echo("Manifest: %s" % lib['confurl']) for key in ("homepage", "repository", "license"): if key not in lib or not lib[key]: @@ -357,10 +360,12 @@ def lib_show(library, json_output): blocks.append(("Compatible %s" % key, [i['title'] for i in lib[key]])) blocks.append(("Headers", lib['headers'])) blocks.append(("Examples", lib['examples'])) - blocks.append( - ("Versions", - ["{name}, released {released}".format(**v) for v in lib['versions']])) - blocks.append(("Downloads", [ + blocks.append(("Versions", [ + "%s, released %s" % + (v['name'], time.strftime("%c", util.parse_date(v['released']))) + for v in lib['versions'] + ])) + blocks.append(("Unique Downloads", [ "Today: %s" % lib['dlstats']['day'], "Week: %s" % lib['dlstats']['week'], "Month: %s" % lib['dlstats']['month'] @@ -419,7 +424,9 @@ def lib_stats(json_output): click.echo((printitemdate_tpl if "date" in item else printitem_tpl).format( name=click.style(item['name'], fg="cyan"), - date=item.get("date"), + date=str( + time.strftime("%c", util.parse_date(item['date'])) + if "date" in item else ""), url=click.style( "http://platformio.org/lib/show/%s/%s" % (item['id'], quote(item['name'])), diff --git a/platformio/managers/lib.py b/platformio/managers/lib.py index f822fab9..09c5ef12 100644 --- a/platformio/managers/lib.py +++ b/platformio/managers/lib.py @@ -21,7 +21,6 @@ from glob import glob from os.path import isdir, join import click -from dateutil.parser import parse as parse_date from platformio import app, commands, exception, util from platformio.managers.package import BasePkgManager @@ -157,8 +156,8 @@ class LibraryManager(BasePkgManager): def max_satisfying_repo_version(self, versions, requirements=None): def _cmp_dates(datestr1, datestr2): - date1 = parse_date(datestr1) - date2 = parse_date(datestr2) + date1 = util.parse_date(datestr1) + date2 = util.parse_date(datestr2) if date1 == date2: return 0 return -1 if date1 < date2 else 1 diff --git a/platformio/util.py b/platformio/util.py index 270952af..53c23918 100644 --- a/platformio/util.py +++ b/platformio/util.py @@ -22,13 +22,13 @@ import socket import stat import subprocess import sys +import time from functools import wraps from glob import glob from os.path import (abspath, basename, dirname, expanduser, isdir, isfile, join, normpath, splitdrive) from shutil import rmtree from threading import Thread -from time import sleep, time import click import requests @@ -159,10 +159,10 @@ class throttle(object): @wraps(fn) def wrapper(*args, **kwargs): - diff = int(round((time() - self.last) * 1000)) + diff = int(round((time.time() - self.last) * 1000)) if diff < self.threshhold: - sleep((self.threshhold - diff) * 0.001) - self.last = time() + time.sleep((self.threshhold - diff) * 0.001) + self.last = time.time() return fn(*args, **kwargs) return wrapper @@ -541,7 +541,7 @@ def get_mdns_services(): items = [] with mDNSListener() as mdns: - sleep(3) + time.sleep(3) for service in mdns.get_services(): items.append({ "type": @@ -651,7 +651,7 @@ def get_api_result(url, params=None, data=None, auth=None, cache_valid=None): "[API] ConnectionError: {0} (incremented retry: max={1}, " "total={2})".format(e, max_retries, total), fg="yellow") - sleep(2 * total) + time.sleep(2 * total) raise exception.APIRequestError( "Could not connect to PlatformIO API Service. " @@ -737,6 +737,12 @@ def items_in_list(needle, haystack): return set(needle) & set(haystack) +def parse_date(datestr): + if "T" in datestr and "Z" in datestr: + return time.strptime(datestr, "%Y-%m-%dT%H:%M:%SZ") + return time.strptime(datestr) + + def rmtree_(path): def _onerror(_, name, __): diff --git a/setup.py b/setup.py index 63df8dc9..b4b8b1aa 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,6 @@ install_requires = [ "click>=5,<6", "colorama", "lockfile>=0.9.1,<0.13", - "python-dateutil", "pyserial>=3,<4,!=3.3", "requests>=2.4.0,<3", "semantic_version>=2.5.0,<3"