mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Automatically rebuild contrib-pysite package when import fails // Issue #3313
This commit is contained in:
2
docs
2
docs
Submodule docs updated: 6dd2fec114...3a399f127b
@ -22,7 +22,11 @@ import click
|
||||
|
||||
from platformio import exception
|
||||
from platformio.compat import WINDOWS
|
||||
from platformio.managers.core import get_core_package_dir, inject_contrib_pysite
|
||||
from platformio.managers.core import (
|
||||
build_contrib_pysite_deps,
|
||||
get_core_package_dir,
|
||||
inject_contrib_pysite,
|
||||
)
|
||||
|
||||
|
||||
@click.command("home", short_help="PIO Home")
|
||||
@ -50,7 +54,13 @@ def cli(port, host, no_open, shutdown_timeout):
|
||||
|
||||
# import contrib modules
|
||||
inject_contrib_pysite()
|
||||
from autobahn.twisted.resource import WebSocketResource
|
||||
|
||||
try:
|
||||
from autobahn.twisted.resource import WebSocketResource
|
||||
except (ImportError, ModuleNotFoundError):
|
||||
build_contrib_pysite_deps(get_core_package_dir("contrib-pysite"))
|
||||
from autobahn.twisted.resource import WebSocketResource
|
||||
|
||||
from twisted.internet import reactor
|
||||
from twisted.web import server
|
||||
|
||||
|
@ -12,12 +12,13 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from os.path import dirname, join
|
||||
|
||||
from platformio import __version__, exception, fs
|
||||
from platformio import __version__, exception, fs, util
|
||||
from platformio.compat import PY2, WINDOWS
|
||||
from platformio.managers.package import PackageManager
|
||||
from platformio.proc import copy_pythonpath_to_osenv, get_pythonexe_path
|
||||
@ -25,7 +26,7 @@ from platformio.project.config import ProjectConfig
|
||||
|
||||
CORE_PACKAGES = {
|
||||
"contrib-piohome": "~3.1.0",
|
||||
"contrib-pysite": "~2.%d%d.0" % (sys.version_info[0], sys.version_info[1]),
|
||||
"contrib-pysite": "~2.%d%d.0" % (sys.version_info.major, sys.version_info.minor),
|
||||
"tool-pioplus": "^2.6.1",
|
||||
"tool-unity": "~1.20500.0",
|
||||
"tool-scons": "~2.20501.7" if PY2 else "~3.30102.0",
|
||||
@ -113,6 +114,79 @@ def inject_contrib_pysite():
|
||||
sys.path.insert(0, contrib_pysite_dir)
|
||||
|
||||
|
||||
def build_contrib_pysite_deps(target_dir):
|
||||
if os.path.isdir(target_dir):
|
||||
util.rmtree_(target_dir)
|
||||
os.makedirs(target_dir)
|
||||
with open(os.path.join(target_dir, "package.json"), "w") as fp:
|
||||
json.dump(
|
||||
dict(
|
||||
name="contrib-pysite",
|
||||
version="2.%d%d.0" % (sys.version_info.major, sys.version_info.minor),
|
||||
system=util.get_systype(),
|
||||
),
|
||||
fp,
|
||||
)
|
||||
|
||||
pythonexe = get_pythonexe_path()
|
||||
for dep in get_contrib_pysite_deps():
|
||||
subprocess.call(
|
||||
[
|
||||
pythonexe,
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"--no-cache-dir",
|
||||
"--no-compile",
|
||||
"-t",
|
||||
target_dir,
|
||||
dep,
|
||||
]
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
def get_contrib_pysite_deps():
|
||||
sys_type = util.get_systype()
|
||||
py_version = "%d%d" % (sys.version_info.major, sys.version_info.minor)
|
||||
|
||||
twisted_version = "19.7.0"
|
||||
result = [
|
||||
"twisted == %s" % twisted_version,
|
||||
"autobahn == 19.10.1",
|
||||
"json-rpc == 1.12.1",
|
||||
]
|
||||
|
||||
# twisted[tls], see setup.py for %twisted_version%
|
||||
result.extend(
|
||||
["pyopenssl >= 16.0.0", "service_identity >= 18.1.0", "idna >= 0.6, != 2.3"]
|
||||
)
|
||||
|
||||
# zeroconf
|
||||
if sys.version_info.major < 3:
|
||||
result.append(
|
||||
"https://github.com/ivankravets/python-zeroconf/" "archive/pio-py27.zip"
|
||||
)
|
||||
else:
|
||||
result.append("zeroconf == 0.23.0")
|
||||
|
||||
if "windows" in sys_type:
|
||||
result.append("pypiwin32 == 223")
|
||||
# workaround for twisted wheels
|
||||
twisted_wheel = (
|
||||
"https://download.lfd.uci.edu/pythonlibs/g5apjq5m/Twisted-"
|
||||
"%s-cp%s-cp%sm-win%s.whl"
|
||||
% (
|
||||
twisted_version,
|
||||
py_version,
|
||||
py_version,
|
||||
"_amd64" if "amd64" in sys_type else "32",
|
||||
)
|
||||
)
|
||||
result[0] = twisted_wheel
|
||||
return result
|
||||
|
||||
|
||||
def pioplus_call(args, **kwargs):
|
||||
if WINDOWS and sys.version_info < (2, 7, 6):
|
||||
raise exception.PlatformioException(
|
||||
|
Reference in New Issue
Block a user