Drop "python-dateutil" dependency, implement light-weight "parse_date"

This commit is contained in:
Ivan Kravets
2018-01-16 00:57:06 +02:00
parent 3289b36450
commit d822334fdd
4 changed files with 29 additions and 18 deletions

View File

@ -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'])),

View File

@ -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

View File

@ -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, __):

View File

@ -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"