mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07: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 import exception
|
||||||
from platformio.compat import WINDOWS
|
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")
|
@click.command("home", short_help="PIO Home")
|
||||||
@ -50,7 +54,13 @@ def cli(port, host, no_open, shutdown_timeout):
|
|||||||
|
|
||||||
# import contrib modules
|
# import contrib modules
|
||||||
inject_contrib_pysite()
|
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.internet import reactor
|
||||||
from twisted.web import server
|
from twisted.web import server
|
||||||
|
|
||||||
|
@ -12,12 +12,13 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from os.path import dirname, join
|
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.compat import PY2, WINDOWS
|
||||||
from platformio.managers.package import PackageManager
|
from platformio.managers.package import PackageManager
|
||||||
from platformio.proc import copy_pythonpath_to_osenv, get_pythonexe_path
|
from platformio.proc import copy_pythonpath_to_osenv, get_pythonexe_path
|
||||||
@ -25,7 +26,7 @@ from platformio.project.config import ProjectConfig
|
|||||||
|
|
||||||
CORE_PACKAGES = {
|
CORE_PACKAGES = {
|
||||||
"contrib-piohome": "~3.1.0",
|
"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-pioplus": "^2.6.1",
|
||||||
"tool-unity": "~1.20500.0",
|
"tool-unity": "~1.20500.0",
|
||||||
"tool-scons": "~2.20501.7" if PY2 else "~3.30102.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)
|
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):
|
def pioplus_call(args, **kwargs):
|
||||||
if WINDOWS and sys.version_info < (2, 7, 6):
|
if WINDOWS and sys.version_info < (2, 7, 6):
|
||||||
raise exception.PlatformioException(
|
raise exception.PlatformioException(
|
||||||
|
Reference in New Issue
Block a user