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 # pylint: disable=too-many-branches, too-many-locals
import json import json
import time
from os.path import isdir, join from os.path import isdir, join
from time import sleep
from urllib import quote from urllib import quote
import click import click
@ -250,7 +250,7 @@ def lib_search(query, json_output, page, noninteractive, **filters):
result['perpage'], result['perpage'],
fg="yellow") fg="yellow")
click.echo() click.echo()
sleep(5) time.sleep(5)
elif not click.confirm("Show next libraries?"): elif not click.confirm("Show next libraries?"):
break break
result = get_api_result( result = get_api_result(
@ -322,7 +322,10 @@ def lib_show(library, json_output):
click.echo(lib['description']) click.echo(lib['description'])
click.echo() 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']) click.echo("Manifest: %s" % lib['confurl'])
for key in ("homepage", "repository", "license"): for key in ("homepage", "repository", "license"):
if key not in lib or not lib[key]: 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(("Compatible %s" % key, [i['title'] for i in lib[key]]))
blocks.append(("Headers", lib['headers'])) blocks.append(("Headers", lib['headers']))
blocks.append(("Examples", lib['examples'])) blocks.append(("Examples", lib['examples']))
blocks.append( blocks.append(("Versions", [
("Versions", "%s, released %s" %
["{name}, released {released}".format(**v) for v in lib['versions']])) (v['name'], time.strftime("%c", util.parse_date(v['released'])))
blocks.append(("Downloads", [ for v in lib['versions']
]))
blocks.append(("Unique Downloads", [
"Today: %s" % lib['dlstats']['day'], "Today: %s" % lib['dlstats']['day'],
"Week: %s" % lib['dlstats']['week'], "Week: %s" % lib['dlstats']['week'],
"Month: %s" % lib['dlstats']['month'] "Month: %s" % lib['dlstats']['month']
@ -419,7 +424,9 @@ def lib_stats(json_output):
click.echo((printitemdate_tpl click.echo((printitemdate_tpl
if "date" in item else printitem_tpl).format( if "date" in item else printitem_tpl).format(
name=click.style(item['name'], fg="cyan"), 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( url=click.style(
"http://platformio.org/lib/show/%s/%s" % "http://platformio.org/lib/show/%s/%s" %
(item['id'], quote(item['name'])), (item['id'], quote(item['name'])),

View File

@ -21,7 +21,6 @@ from glob import glob
from os.path import isdir, join from os.path import isdir, join
import click import click
from dateutil.parser import parse as parse_date
from platformio import app, commands, exception, util from platformio import app, commands, exception, util
from platformio.managers.package import BasePkgManager from platformio.managers.package import BasePkgManager
@ -157,8 +156,8 @@ class LibraryManager(BasePkgManager):
def max_satisfying_repo_version(self, versions, requirements=None): def max_satisfying_repo_version(self, versions, requirements=None):
def _cmp_dates(datestr1, datestr2): def _cmp_dates(datestr1, datestr2):
date1 = parse_date(datestr1) date1 = util.parse_date(datestr1)
date2 = parse_date(datestr2) date2 = util.parse_date(datestr2)
if date1 == date2: if date1 == date2:
return 0 return 0
return -1 if date1 < date2 else 1 return -1 if date1 < date2 else 1

View File

@ -22,13 +22,13 @@ import socket
import stat import stat
import subprocess import subprocess
import sys import sys
import time
from functools import wraps from functools import wraps
from glob import glob from glob import glob
from os.path import (abspath, basename, dirname, expanduser, isdir, isfile, from os.path import (abspath, basename, dirname, expanduser, isdir, isfile,
join, normpath, splitdrive) join, normpath, splitdrive)
from shutil import rmtree from shutil import rmtree
from threading import Thread from threading import Thread
from time import sleep, time
import click import click
import requests import requests
@ -159,10 +159,10 @@ class throttle(object):
@wraps(fn) @wraps(fn)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
diff = int(round((time() - self.last) * 1000)) diff = int(round((time.time() - self.last) * 1000))
if diff < self.threshhold: if diff < self.threshhold:
sleep((self.threshhold - diff) * 0.001) time.sleep((self.threshhold - diff) * 0.001)
self.last = time() self.last = time.time()
return fn(*args, **kwargs) return fn(*args, **kwargs)
return wrapper return wrapper
@ -541,7 +541,7 @@ def get_mdns_services():
items = [] items = []
with mDNSListener() as mdns: with mDNSListener() as mdns:
sleep(3) time.sleep(3)
for service in mdns.get_services(): for service in mdns.get_services():
items.append({ items.append({
"type": "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}, " "[API] ConnectionError: {0} (incremented retry: max={1}, "
"total={2})".format(e, max_retries, total), "total={2})".format(e, max_retries, total),
fg="yellow") fg="yellow")
sleep(2 * total) time.sleep(2 * total)
raise exception.APIRequestError( raise exception.APIRequestError(
"Could not connect to PlatformIO API Service. " "Could not connect to PlatformIO API Service. "
@ -737,6 +737,12 @@ def items_in_list(needle, haystack):
return set(needle) & set(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 rmtree_(path):
def _onerror(_, name, __): def _onerror(_, name, __):

View File

@ -22,7 +22,6 @@ install_requires = [
"click>=5,<6", "click>=5,<6",
"colorama", "colorama",
"lockfile>=0.9.1,<0.13", "lockfile>=0.9.1,<0.13",
"python-dateutil",
"pyserial>=3,<4,!=3.3", "pyserial>=3,<4,!=3.3",
"requests>=2.4.0,<3", "requests>=2.4.0,<3",
"semantic_version>=2.5.0,<3" "semantic_version>=2.5.0,<3"