crosspoint-reader/get-platformio.py

71 lines
913 KiB
Python
Raw Normal View History

2026-01-22 00:07:29 +07:00
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# pylint:disable=bad-option-value,import-outside-toplevel
import os
import shutil
import sys
import tempfile
from base64 import b64decode
DEPENDENCIES = b"""
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
"""
def create_temp_dir():
try:
parent_dir = os.getenv(
"PLATFORMIO_INSTALLER_TMPDIR", os.path.dirname(os.path.realpath(__file__))
)
tmp_dir = tempfile.mkdtemp(dir=parent_dir, prefix=".piocore-installer-")
testscript_path = os.path.join(tmp_dir, "test.py")
with open(testscript_path, "w") as fp:
fp.write("print(1)")
assert os.path.isfile(testscript_path)
os.remove(testscript_path)
return tmp_dir
except (AssertionError, NameError):
pass
return tempfile.mkdtemp()
def bootstrap():
import pioinstaller.__main__
pioinstaller.__main__.main()
def main():
runtime_tmp_dir = create_temp_dir()
os.environ["TMPDIR"] = runtime_tmp_dir
tmp_dir = tempfile.mkdtemp(dir=runtime_tmp_dir)
try:
pioinstaller_zip = os.path.join(tmp_dir, "pioinstaller.zip")
with open(pioinstaller_zip, "wb") as fp:
fp.write(b64decode(DEPENDENCIES))
sys.path.insert(0, pioinstaller_zip)
bootstrap()
finally:
for d in (runtime_tmp_dir, tmp_dir):
if d and os.path.isdir(d):
shutil.rmtree(d, ignore_errors=True)
if __name__ == "__main__":
main()