From a78db177846eb58f088a69b228f21142345e8757 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 19 Mar 2021 00:21:44 +0200 Subject: [PATCH] Drop support for Python 2 --- platformio/__main__.py | 4 ++-- platformio/app.py | 4 ++-- platformio/builder/main.py | 2 +- platformio/builder/tools/piolib.py | 4 ++-- platformio/builder/tools/piomaxlen.py | 6 +++--- platformio/builder/tools/pioplatform.py | 7 +++---- platformio/builder/tools/piosize.py | 4 ++-- platformio/builder/tools/piotarget.py | 2 +- platformio/builder/tools/pioupload.py | 4 ++-- platformio/builder/tools/platformio.py | 4 ++-- platformio/commands/check/tools/pvsstudio.py | 9 ++++----- platformio/commands/debug.py | 6 +++--- platformio/commands/home/helpers.py | 8 +++----- platformio/commands/system/command.py | 2 +- platformio/commands/upgrade.py | 4 ++-- platformio/compat.py | 6 +++--- platformio/debug/helpers.py | 8 ++------ platformio/debug/process/base.py | 4 ++-- platformio/debug/process/client.py | 11 ++++++++--- platformio/debug/process/server.py | 9 ++++----- platformio/fs.py | 6 +++--- platformio/package/manager/core.py | 3 +-- platformio/package/pack.py | 4 ++-- platformio/platform/_run.py | 9 ++------- platformio/platform/board.py | 10 ---------- platformio/proc.py | 16 +++++----------- platformio/project/config.py | 10 +++------- platformio/project/helpers.py | 6 +++--- platformio/util.py | 12 +++--------- tests/package/test_manifest.py | 4 ++-- tests/package/test_pack.py | 6 ++---- 31 files changed, 78 insertions(+), 116 deletions(-) diff --git a/platformio/__main__.py b/platformio/__main__.py index dbf2215b..ae6413d1 100644 --- a/platformio/__main__.py +++ b/platformio/__main__.py @@ -22,7 +22,7 @@ import click from platformio import __version__, exception from platformio.commands import PlatformioCLI -from platformio.compat import CYGWIN, PY2, ensure_python3 +from platformio.compat import IS_CYGWIN, PY2, ensure_python3 try: import click_completion # pylint: disable=import-error @@ -76,7 +76,7 @@ def process_result(ctx, result, *_, **__): def configure(): - if CYGWIN: + if IS_CYGWIN: raise exception.CygwinEnvDetected() # https://urllib3.readthedocs.org diff --git a/platformio/app.py b/platformio/app.py index 9d64994c..ae483f1f 100644 --- a/platformio/app.py +++ b/platformio/app.py @@ -24,7 +24,7 @@ import uuid from os.path import dirname, isdir, isfile, join, realpath from platformio import __version__, exception, fs, proc -from platformio.compat import WINDOWS, hashlib_encode_data +from platformio.compat import IS_WINDOWS, hashlib_encode_data from platformio.package.lockfile import LockFile from platformio.project.helpers import get_default_projects_dir, get_project_core_dir @@ -277,7 +277,7 @@ def get_cid(): uid = uuid.getnode() cid = uuid.UUID(bytes=hashlib.md5(hashlib_encode_data(uid)).digest()) cid = str(cid) - if WINDOWS or os.getuid() > 0: # pylint: disable=no-member + if IS_WINDOWS or os.getuid() > 0: # pylint: disable=no-member set_state_item("cid", cid) return cid diff --git a/platformio/builder/main.py b/platformio/builder/main.py index 208cb0e2..245a0f98 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -129,7 +129,7 @@ env.Replace( ) if ( - compat.WINDOWS + compat.IS_WINDOWS and sys.version_info >= (3, 8) and env["PROJECT_DIR"].startswith("\\\\") ): diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index f6b9824b..3849a91b 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -33,7 +33,7 @@ from SCons.Script import DefaultEnvironment # pylint: disable=import-error from platformio import exception, fs, util from platformio.builder.tools import platformio as piotool from platformio.clients.http import InternetIsOffline -from platformio.compat import WINDOWS, hashlib_encode_data, string_types +from platformio.compat import IS_WINDOWS, hashlib_encode_data, string_types from platformio.package.exception import UnknownPackageError from platformio.package.manager.library import LibraryPackageManager from platformio.package.manifest.parser import ( @@ -142,7 +142,7 @@ class LibBuilderBase(object): def __contains__(self, path): p1 = self.path p2 = path - if WINDOWS: + if IS_WINDOWS: p1 = p1.lower() p2 = p2.lower() if p1 == p2: diff --git a/platformio/builder/tools/piomaxlen.py b/platformio/builder/tools/piomaxlen.py index 0059dcf3..02622b9d 100644 --- a/platformio/builder/tools/piomaxlen.py +++ b/platformio/builder/tools/piomaxlen.py @@ -21,20 +21,20 @@ import re from SCons.Platform import TempFileMunge # pylint: disable=import-error from SCons.Subst import quote_spaces # pylint: disable=import-error -from platformio.compat import WINDOWS, hashlib_encode_data +from platformio.compat import IS_WINDOWS, hashlib_encode_data # There are the next limits depending on a platform: # - Windows = 8192 # - Unix = 131072 # We need ~512 characters for compiler and temporary file paths -MAX_LINE_LENGTH = (8192 if WINDOWS else 131072) - 512 +MAX_LINE_LENGTH = (8192 if IS_WINDOWS else 131072) - 512 WINPATHSEP_RE = re.compile(r"\\([^\"'\\]|$)") def tempfile_arg_esc_func(arg): arg = quote_spaces(arg) - if not WINDOWS: + if not IS_WINDOWS: return arg # GCC requires double Windows slashes, let's use UNIX separator return WINPATHSEP_RE.sub(r"/\1", arg) diff --git a/platformio/builder/tools/pioplatform.py b/platformio/builder/tools/pioplatform.py index dc7f67bf..5f7182c4 100644 --- a/platformio/builder/tools/pioplatform.py +++ b/platformio/builder/tools/pioplatform.py @@ -21,7 +21,7 @@ from SCons.Script import ARGUMENTS # pylint: disable=import-error from SCons.Script import COMMAND_LINE_TARGETS # pylint: disable=import-error from platformio import fs, util -from platformio.compat import WINDOWS +from platformio.compat import IS_MACOS, IS_WINDOWS from platformio.package.meta import PackageItem from platformio.package.version import get_original_version from platformio.platform.exception import UnknownBoard @@ -71,7 +71,6 @@ def LoadPioPlatform(env): env["PIOPLATFORM"] = p.name # Add toolchains and uploaders to $PATH and $*_LIBRARY_PATH - systype = util.get_systype() for pkg in p.get_installed_packages(): type_ = p.get_package_type(pkg.metadata.name) if type_ not in ("toolchain", "uploader", "debugger"): @@ -83,12 +82,12 @@ def LoadPioPlatform(env): else pkg.path, ) if ( - not WINDOWS + not IS_WINDOWS and os.path.isdir(os.path.join(pkg.path, "lib")) and type_ != "toolchain" ): env.PrependENVPath( - "DYLD_LIBRARY_PATH" if "darwin" in systype else "LD_LIBRARY_PATH", + "DYLD_LIBRARY_PATH" if IS_MACOS else "LD_LIBRARY_PATH", os.path.join(pkg.path, "lib"), ) diff --git a/platformio/builder/tools/piosize.py b/platformio/builder/tools/piosize.py index eec4c87c..e194511a 100644 --- a/platformio/builder/tools/piosize.py +++ b/platformio/builder/tools/piosize.py @@ -24,8 +24,8 @@ from os.path import isdir, join, splitdrive from elftools.elf.descriptions import describe_sh_flags from elftools.elf.elffile import ELFFile +from platformio.compat import IS_WINDOWS from platformio.proc import exec_command -from platformio.util import get_systype def _run_tool(cmd, env, tool_args): @@ -164,7 +164,7 @@ def _collect_symbols_info(env, elffile, elf_path, sections): location = symbol_locations.get(hex(symbol["addr"])) if not location or "?" in location: continue - if "windows" in get_systype(): + if IS_WINDOWS: drive, tail = splitdrive(location) location = join(drive.upper(), tail) symbol["file"] = location diff --git a/platformio/builder/tools/piotarget.py b/platformio/builder/tools/piotarget.py index 948776fc..70b7c41b 100644 --- a/platformio/builder/tools/piotarget.py +++ b/platformio/builder/tools/piotarget.py @@ -31,7 +31,7 @@ def VerboseAction(_, act, actstr): def PioClean(env, clean_dir): def _relpath(path): - if compat.WINDOWS: + if compat.IS_WINDOWS: prefix = os.getcwd()[:2].lower() if ( ":" not in prefix diff --git a/platformio/builder/tools/pioupload.py b/platformio/builder/tools/pioupload.py index 5e1117b5..3281ada4 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -26,7 +26,7 @@ from SCons.Script import ARGUMENTS # pylint: disable=import-error from serial import Serial, SerialException from platformio import exception, fs, util -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS from platformio.proc import exec_command # pylint: disable=unused-argument @@ -134,7 +134,7 @@ def AutodetectUploadPort(*args, **kwargs): continue port = item["port"] if upload_protocol.startswith("blackmagic"): - if WINDOWS and port.startswith("COM") and len(port) > 4: + if IS_WINDOWS and port.startswith("COM") and len(port) > 4: port = "\\\\.\\%s" % port if "GDB" in item["description"]: return port diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 4e1ca9ca..c412012e 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -27,7 +27,7 @@ from SCons.Script import Export # pylint: disable=import-error from SCons.Script import SConscript # pylint: disable=import-error from platformio import __version__, fs -from platformio.compat import MACOS, string_types +from platformio.compat import IS_MACOS, string_types from platformio.package.version import pepver_to_semver SRC_HEADER_EXT = ["h", "hpp"] @@ -69,7 +69,7 @@ def BuildProgram(env): if ( env.get("LIBS") and env.GetCompilerType() == "gcc" - and (env.PioPlatform().is_embedded() or not MACOS) + and (env.PioPlatform().is_embedded() or not IS_MACOS) ): env.Prepend(_LIBFLAGS="-Wl,--start-group ") env.Append(_LIBFLAGS=" -Wl,--end-group") diff --git a/platformio/commands/check/tools/pvsstudio.py b/platformio/commands/check/tools/pvsstudio.py index d4dde208..e95e202c 100644 --- a/platformio/commands/check/tools/pvsstudio.py +++ b/platformio/commands/check/tools/pvsstudio.py @@ -19,9 +19,10 @@ from xml.etree.ElementTree import fromstring import click -from platformio import proc, util +from platformio import proc from platformio.commands.check.defect import DefectItem from platformio.commands.check.tools.base import CheckToolBase +from platformio.compat import IS_WINDOWS from platformio.package.manager.core import get_core_package_dir @@ -34,7 +35,7 @@ class PvsStudioCheckTool(CheckToolBase): # pylint: disable=too-many-instance-at self._tmp_cmd_file = self._generate_tmp_file_path() + ".cmd" self.tool_path = os.path.join( get_core_package_dir("tool-pvs-studio"), - "x64" if "windows" in util.get_systype() else "bin", + "x64" if IS_WINDOWS else "bin", "pvs-studio", ) super(PvsStudioCheckTool, self).__init__(*args, **kwargs) @@ -70,9 +71,7 @@ class PvsStudioCheckTool(CheckToolBase): # pylint: disable=too-many-instance-at def _demangle_report(self, output_file): converter_tool = os.path.join( get_core_package_dir("tool-pvs-studio"), - "HtmlGenerator" - if "windows" in util.get_systype() - else os.path.join("bin", "plog-converter"), + "HtmlGenerator" if IS_WINDOWS else os.path.join("bin", "plog-converter"), ) cmd = ( diff --git a/platformio/commands/debug.py b/platformio/commands/debug.py index b0c1ed93..7abb1976 100644 --- a/platformio/commands/debug.py +++ b/platformio/commands/debug.py @@ -23,7 +23,7 @@ import click from platformio import app, exception, fs, proc from platformio.commands.platform import platform_install as cmd_platform_install -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS from platformio.debug import helpers from platformio.debug.config.factory import DebugConfigFactory from platformio.debug.exception import DebugInvalidOptionsError @@ -150,12 +150,12 @@ def cli(ctx, project_dir, project_conf, environment, verbose, interface, __unpro if not os.path.isfile(debug_config.program_path): raise DebugInvalidOptionsError("Program/firmware is missed") - loop = asyncio.ProactorEventLoop() if WINDOWS else asyncio.get_event_loop() + loop = asyncio.ProactorEventLoop() if IS_WINDOWS else asyncio.get_event_loop() asyncio.set_event_loop(loop) client = DebugClientProcess(project_dir, debug_config) coro = client.run(__unprocessed) loop.run_until_complete(coro) - if WINDOWS: + if IS_WINDOWS: # an issue with asyncio executor and STIDIN, it cannot be closed gracefully proc.force_exit() loop.close() diff --git a/platformio/commands/home/helpers.py b/platformio/commands/home/helpers.py index 5c6e0c88..e7407eb9 100644 --- a/platformio/commands/home/helpers.py +++ b/platformio/commands/home/helpers.py @@ -18,7 +18,7 @@ import requests from starlette.concurrency import run_in_threadpool from platformio import util -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS from platformio.proc import where_is_program @@ -37,15 +37,13 @@ def requests_session(): @util.memoized(expire="60s") def get_core_fullpath(): - return where_is_program( - "platformio" + (".exe" if "windows" in util.get_systype() else "") - ) + return where_is_program("platformio" + (".exe" if IS_WINDOWS else "")) def is_port_used(host, port): socket.setdefaulttimeout(1) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - if WINDOWS: + if IS_WINDOWS: try: s.bind((host, port)) s.close() diff --git a/platformio/commands/system/command.py b/platformio/commands/system/command.py index d0c87d84..63d1727c 100644 --- a/platformio/commands/system/command.py +++ b/platformio/commands/system/command.py @@ -69,7 +69,7 @@ def system_info(json_output): data["platformio_exe"] = { "title": "PlatformIO Core Executable", "value": proc.where_is_program( - "platformio.exe" if proc.WINDOWS else "platformio" + "platformio.exe" if compat.IS_WINDOWS else "platformio" ), } data["python_exe"] = { diff --git a/platformio/commands/upgrade.py b/platformio/commands/upgrade.py index 2411f49c..d8f6e78c 100644 --- a/platformio/commands/upgrade.py +++ b/platformio/commands/upgrade.py @@ -21,7 +21,7 @@ import click from platformio import VERSION, __version__, app, exception from platformio.clients.http import fetch_remote_content -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS from platformio.proc import exec_command, get_pythonexe_path from platformio.project.helpers import get_project_cache_dir @@ -73,7 +73,7 @@ def cli(dev): if not r: raise exception.UpgradeError("\n".join([str(cmd), str(e)])) permission_errors = ("permission denied", "not permitted") - if any(m in r["err"].lower() for m in permission_errors) and not WINDOWS: + if any(m in r["err"].lower() for m in permission_errors) and not IS_WINDOWS: click.secho( """ ----------------- diff --git a/platformio/compat.py b/platformio/compat.py index 97cfb8d3..5c20df3a 100644 --- a/platformio/compat.py +++ b/platformio/compat.py @@ -30,9 +30,9 @@ if sys.version_info >= (3,): PY2 = sys.version_info[0] == 2 -CYGWIN = sys.platform.startswith("cygwin") -WINDOWS = sys.platform.startswith("win") -MACOS = sys.platform.startswith("darwin") +IS_CYGWIN = sys.platform.startswith("cygwin") +IS_WINDOWS = WINDOWS = sys.platform.startswith("win") +IS_MACOS = sys.platform.startswith("darwin") string_types = (str,) diff --git a/platformio/debug/helpers.py b/platformio/debug/helpers.py index 6038f000..a412ad5e 100644 --- a/platformio/debug/helpers.py +++ b/platformio/debug/helpers.py @@ -23,7 +23,7 @@ from os.path import isfile from platformio import util from platformio.commands import PlatformioCLI from platformio.commands.run.command import cli as cmd_run -from platformio.compat import is_bytes +from platformio.compat import IS_WINDOWS, is_bytes from platformio.debug.exception import DebugInvalidOptionsError @@ -152,11 +152,7 @@ def reveal_debug_port(env_debug_port, tool_name, tool_settings): continue port = item["port"] if tool_name.startswith("blackmagic"): - if ( - "windows" in util.get_systype() - and port.startswith("COM") - and len(port) > 4 - ): + if IS_WINDOWS and port.startswith("COM") and len(port) > 4: port = "\\\\.\\%s" % port if "GDB" in item["description"]: return port diff --git a/platformio/debug/process/base.py b/platformio/debug/process/base.py index 846fbf77..2c9280c2 100644 --- a/platformio/debug/process/base.py +++ b/platformio/debug/process/base.py @@ -19,7 +19,7 @@ import sys import time from platformio.compat import ( - WINDOWS, + IS_WINDOWS, aio_create_task, aio_get_running_loop, get_locale_encoding, @@ -93,7 +93,7 @@ class DebugBaseProcess: async def _read_stdin_pipe(self): loop = aio_get_running_loop() - if WINDOWS: + if IS_WINDOWS: while True: self.stdin_data_received( await loop.run_in_executor(None, sys.stdin.buffer.readline) diff --git a/platformio/debug/process/client.py b/platformio/debug/process/client.py index aad6c69d..71924722 100644 --- a/platformio/debug/process/client.py +++ b/platformio/debug/process/client.py @@ -19,9 +19,14 @@ import signal import tempfile import time -from platformio import fs, proc, telemetry, util +from platformio import fs, proc, telemetry from platformio.cache import ContentCache -from platformio.compat import aio_get_running_loop, hashlib_encode_data, is_bytes +from platformio.compat import ( + IS_WINDOWS, + aio_get_running_loop, + hashlib_encode_data, + is_bytes, +) from platformio.debug import helpers from platformio.debug.process.base import DebugBaseProcess from platformio.debug.process.server import DebugServerProcess @@ -230,7 +235,7 @@ class DebugClientProcess( cc.delete(self._session_id) if not pid: return - if "windows" in util.get_systype(): + if IS_WINDOWS: kill = ["Taskkill", "/PID", pid, "/F"] else: kill = ["kill", pid] diff --git a/platformio/debug/process/server.py b/platformio/debug/process/server.py index 24684037..4e1645e2 100644 --- a/platformio/debug/process/server.py +++ b/platformio/debug/process/server.py @@ -13,12 +13,11 @@ # limitations under the License. import asyncio -import fnmatch import os import time from platformio import fs -from platformio.compat import MACOS, WINDOWS +from platformio.compat import IS_MACOS, IS_WINDOWS from platformio.debug.exception import DebugInvalidOptionsError from platformio.debug.helpers import escape_gdbmi_stream, is_gdbmi_mode from platformio.debug.process.base import DebugBaseProcess @@ -41,7 +40,7 @@ class DebugServerProcess(DebugBaseProcess): if server["cwd"]: server_executable = os.path.join(server["cwd"], server_executable) if ( - WINDOWS + IS_WINDOWS and not server_executable.endswith(".exe") and os.path.isfile(server_executable + ".exe") ): @@ -81,11 +80,11 @@ class DebugServerProcess(DebugBaseProcess): env = os.environ.copy() # prepend server "lib" folder to LD path if ( - not WINDOWS + not IS_WINDOWS and server["cwd"] and os.path.isdir(os.path.join(server["cwd"], "lib")) ): - ld_key = "DYLD_LIBRARY_PATH" if MACOS else "LD_LIBRARY_PATH" + ld_key = "DYLD_LIBRARY_PATH" if IS_MACOS else "LD_LIBRARY_PATH" env[ld_key] = os.path.join(server["cwd"], "lib") if os.environ.get(ld_key): env[ld_key] = "%s:%s" % (env[ld_key], os.environ.get(ld_key)) diff --git a/platformio/fs.py b/platformio/fs.py index 3aefdb6e..655c2ee8 100644 --- a/platformio/fs.py +++ b/platformio/fs.py @@ -25,7 +25,7 @@ import sys import click from platformio import exception -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS class cd(object): @@ -176,7 +176,7 @@ def match_src_files(src_dir, src_filter=None, src_exts=None, followlinks=True): def to_unix_path(path): - if not WINDOWS or not path: + if not IS_WINDOWS or not path: return path return re.sub(r"[\\]+", "/", path) @@ -185,7 +185,7 @@ def expanduser(path): """ Be compatible with Python 3.8, on Windows skip HOME and check for USERPROFILE """ - if not WINDOWS or not path.startswith("~") or "USERPROFILE" not in os.environ: + if not IS_WINDOWS or not path.startswith("~") or "USERPROFILE" not in os.environ: return os.path.expanduser(path) return os.environ["USERPROFILE"] + path[1:] diff --git a/platformio/package/manager/core.py b/platformio/package/manager/core.py index dd3f2663..ac5cad7b 100644 --- a/platformio/package/manager/core.py +++ b/platformio/package/manager/core.py @@ -20,7 +20,6 @@ import sys from datetime import date from platformio import __core_packages__, exception, fs, util -from platformio.compat import PY2 from platformio.package.exception import UnknownPackageError from platformio.package.manager.tool import ToolPackageManager from platformio.package.meta import PackageItem, PackageSpec @@ -207,7 +206,7 @@ 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.10.0" if PY2 else "20.3.0" + twisted_version = "20.3.0" result = [ "twisted == %s" % twisted_version, ] diff --git a/platformio/package/pack.py b/platformio/package/pack.py index 66dff1d5..fb0d222f 100644 --- a/platformio/package/pack.py +++ b/platformio/package/pack.py @@ -20,7 +20,7 @@ import tarfile import tempfile from platformio import fs -from platformio.compat import WINDOWS, ensure_python3 +from platformio.compat import IS_WINDOWS, ensure_python3 from platformio.package.exception import PackageException, UserSideException from platformio.package.manifest.parser import ManifestFileType, ManifestParserFactory from platformio.package.manifest.schema import ManifestSchema @@ -117,7 +117,7 @@ class PackagePacker(object): # if zip/tar.gz -> unpack to tmp dir if not os.path.isdir(src): - if WINDOWS: + if IS_WINDOWS: raise UserSideException( "Packaging from an archive does not work on Windows OS. Please " "extract data from `%s` manually and pack a folder instead" diff --git a/platformio/platform/_run.py b/platformio/platform/_run.py index cb5ec995..73190167 100644 --- a/platformio/platform/_run.py +++ b/platformio/platform/_run.py @@ -20,7 +20,7 @@ import sys import click from platformio import app, fs, proc, telemetry -from platformio.compat import PY2, hashlib_encode_data, is_bytes +from platformio.compat import hashlib_encode_data, is_bytes from platformio.package.manager.core import get_core_package_dir from platformio.platform.exception import BuildScriptNotFound @@ -90,14 +90,9 @@ class PlatformRunMixin(object): def _run_scons(self, variables, targets, jobs): scons_dir = get_core_package_dir("tool-scons") - script_path = ( - os.path.join(scons_dir, "script", "scons") - if PY2 - else os.path.join(scons_dir, "scons.py") - ) args = [ proc.get_pythonexe_path(), - script_path, + os.path.join(scons_dir, "scons.py"), "-Q", "--warn=no-no-parallel-support", "--jobs", diff --git a/platformio/platform/board.py b/platformio/platform/board.py index 34d9dc34..65940962 100644 --- a/platformio/platform/board.py +++ b/platformio/platform/board.py @@ -15,7 +15,6 @@ import os from platformio import fs, telemetry, util -from platformio.compat import PY2 from platformio.debug.exception import DebugInvalidOptionsError, DebugSupportError from platformio.exception import UserSideException from platformio.platform.exception import InvalidBoardManifest @@ -40,15 +39,6 @@ class PlatformBoardConfig(object): value = self._manifest for k in path.split("."): value = value[k] - # pylint: disable=undefined-variable - if PY2 and isinstance(value, unicode): - # cast to plain string from unicode for PY2, resolves issue in - # dev/platform when BoardConfig.get() is used in pair with - # os.path.join(file_encoding, unicode_encoding) - try: - value = value.encode("utf-8") - except UnicodeEncodeError: - pass return value except KeyError: if default is not None: diff --git a/platformio/proc.py b/platformio/proc.py index b4ef4505..6e9981af 100644 --- a/platformio/proc.py +++ b/platformio/proc.py @@ -20,8 +20,7 @@ from threading import Thread from platformio import exception from platformio.compat import ( - PY2, - WINDOWS, + IS_WINDOWS, get_filesystem_encoding, get_locale_encoding, string_types, @@ -31,10 +30,7 @@ from platformio.compat import ( class AsyncPipeBase(object): def __init__(self): self._fd_read, self._fd_write = os.pipe() - if PY2: - self._pipe_reader = os.fdopen(self._fd_read) - else: - self._pipe_reader = os.fdopen(self._fd_read, errors="backslashreplace") + self._pipe_reader = os.fdopen(self._fd_read, errors="backslashreplace") self._buffer = "" self._thread = Thread(target=self.run) self._thread.start() @@ -129,9 +125,7 @@ def exec_command(*args, **kwargs): result[s[3:]] = kwargs[s].get_buffer() for k, v in result.items(): - if PY2 and isinstance(v, unicode): # pylint: disable=undefined-variable - result[k] = v.encode() - elif not PY2 and isinstance(result[k], bytes): + if isinstance(result[k], bytes): try: result[k] = result[k].decode( get_locale_encoding() or get_filesystem_encoding() @@ -178,7 +172,7 @@ def copy_pythonpath_to_osenv(): _PYTHONPATH = os.environ.get("PYTHONPATH").split(os.pathsep) for p in os.sys.path: conditions = [p not in _PYTHONPATH] - if not WINDOWS: + if not IS_WINDOWS: conditions.append( os.path.isdir(os.path.join(p, "click")) or os.path.isdir(os.path.join(p, "platformio")) @@ -195,7 +189,7 @@ def where_is_program(program, envpath=None): # try OS's built-in commands try: - result = exec_command(["where" if WINDOWS else "which", program], env=env) + result = exec_command(["where" if IS_WINDOWS else "which", program], env=env) if result["returncode"] == 0 and os.path.isfile(result["out"].strip()): return result["out"].strip() except OSError: diff --git a/platformio/project/config.py b/platformio/project/config.py index 9f78a67b..6c5aa7b1 100644 --- a/platformio/project/config.py +++ b/platformio/project/config.py @@ -21,7 +21,7 @@ import re import click from platformio import fs -from platformio.compat import PY2, WINDOWS, hashlib_encode_data, string_types +from platformio.compat import IS_WINDOWS, hashlib_encode_data, string_types from platformio.project import exception from platformio.project.options import ProjectOptions @@ -88,11 +88,7 @@ class ProjectConfigBase(object): self.expand_interpolations = expand_interpolations self.warnings = [] self._parsed = [] - self._parser = ( - ConfigParser.ConfigParser() - if PY2 - else ConfigParser.ConfigParser(inline_comment_prefixes=("#", ";")) - ) + self._parser = ConfigParser.ConfigParser(inline_comment_prefixes=("#", ";")) if path and os.path.isfile(path): self.read(path, parse_extra) @@ -359,7 +355,7 @@ class ProjectConfigDirsMixin(object): default = ProjectOptions["platformio.core_dir"].default core_dir = self.get("platformio", "core_dir") win_core_dir = None - if WINDOWS and core_dir == default: + if IS_WINDOWS and core_dir == default: win_core_dir = os.path.splitdrive(core_dir)[0] + "\\.platformio" if os.path.isdir(win_core_dir): core_dir = win_core_dir diff --git a/platformio/project/helpers.py b/platformio/project/helpers.py index 642e1a7e..ec8af4a2 100644 --- a/platformio/project/helpers.py +++ b/platformio/project/helpers.py @@ -21,7 +21,7 @@ from os.path import dirname, isdir, isfile, join from click.testing import CliRunner from platformio import __version__, exception, fs -from platformio.compat import WINDOWS, hashlib_encode_data +from platformio.compat import IS_WINDOWS, hashlib_encode_data from platformio.project.config import ProjectConfig @@ -92,7 +92,7 @@ def get_project_libdeps_dir(): def get_default_projects_dir(): docs_dir = join(fs.expanduser("~"), "Documents") try: - assert WINDOWS + assert IS_WINDOWS import ctypes.wintypes # pylint: disable=import-outside-toplevel buf = ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) @@ -128,7 +128,7 @@ def compute_project_checksum(config): if not chunks: continue chunks_to_str = ",".join(sorted(chunks)) - if WINDOWS: # case insensitive OS + if IS_WINDOWS: # case insensitive OS chunks_to_str = chunks_to_str.lower() checksum.update(hashlib_encode_data(chunks_to_str)) diff --git a/platformio/util.py b/platformio/util.py index 6b1af886..cba128ec 100644 --- a/platformio/util.py +++ b/platformio/util.py @@ -26,7 +26,7 @@ from glob import glob import click from platformio import __version__, compat, exception, proc -from platformio.compat import PY2, WINDOWS +from platformio.compat import IS_MACOS, IS_WINDOWS from platformio.fs import cd, load_json # pylint: disable=unused-import from platformio.proc import exec_command # pylint: disable=unused-import @@ -106,12 +106,6 @@ def get_serial_ports(filter_hwid=False): for p, d, h in comports(): if not p: continue - if WINDOWS and PY2: - try: - # pylint: disable=undefined-variable - d = unicode(d, errors="ignore") - except TypeError: - pass if not filter_hwid or "VID:PID" in h: result.append({"port": p, "description": d, "hwid": h}) @@ -119,7 +113,7 @@ def get_serial_ports(filter_hwid=False): return result # fix for PySerial - if not result and "darwin" in get_systype(): + if not result and IS_MACOS: for p in glob("/dev/tty.*"): result.append({"port": p, "description": "n/a", "hwid": "n/a"}) return result @@ -131,7 +125,7 @@ get_serialports = get_serial_ports def get_logical_devices(): items = [] - if WINDOWS: + if IS_WINDOWS: try: result = proc.exec_command( ["wmic", "logicaldisk", "get", "name,VolumeName"] diff --git a/tests/package/test_manifest.py b/tests/package/test_manifest.py index 4a0afc76..2cc64ddb 100644 --- a/tests/package/test_manifest.py +++ b/tests/package/test_manifest.py @@ -19,7 +19,7 @@ import tarfile import jsondiff import pytest -from platformio.compat import WINDOWS +from platformio.compat import IS_WINDOWS from platformio.package.manifest import parser from platformio.package.manifest.schema import ManifestSchema, ManifestValidationError @@ -715,7 +715,7 @@ def test_examples_from_dir(tmpdir_factory): pio_dir.join(".vimrc").write("") pio_ini = pio_dir.join("platformio.ini") pio_ini.write("") - if not WINDOWS: + if not IS_WINDOWS: pio_dir.join("platformio.ini.copy").mksymlinkto(pio_ini) pio_dir.mkdir("include").join("main.h").write("") pio_dir.mkdir("src").join("main.cpp").write("") diff --git a/tests/package/test_pack.py b/tests/package/test_pack.py index 92db31c4..cc898f9d 100644 --- a/tests/package/test_pack.py +++ b/tests/package/test_pack.py @@ -19,12 +19,10 @@ import tarfile import pytest from platformio import fs -from platformio.compat import PY2, WINDOWS +from platformio.compat import IS_WINDOWS from platformio.package.exception import UnknownManifestError from platformio.package.pack import PackagePacker -pytestmark = pytest.mark.skipif(PY2, reason="Requires Python 3.5 or higher") - def test_base(tmpdir_factory): pkg_dir = tmpdir_factory.mktemp("package") @@ -99,7 +97,7 @@ def test_filters(tmpdir_factory): def test_symlinks(tmpdir_factory): # Windows does not support symbolic links - if WINDOWS: + if IS_WINDOWS: return pkg_dir = tmpdir_factory.mktemp("package") src_dir = pkg_dir.mkdir("src")