forked from platformio/platformio-core
Drop "python-dateutil" dependency, implement light-weight "parse_date"
This commit is contained in:
@ -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'])),
|
||||||
|
@ -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
|
||||||
|
@ -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, __):
|
||||||
|
1
setup.py
1
setup.py
@ -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"
|
||||||
|
Reference in New Issue
Block a user