Micromamba with Pycharm

https://github.com/jonashaag/micromamba-pycharm/blob/master/conda

#!/usr/bin/env python3

from __future__ import print_function

import json
import locale
import os
import re
import subprocess
import sys
import tempfile
import traceback

ENABLE_LOGGING = True


PASSTHROUGH_PREFIXES = [
    ["run"],
    ["create"],
    ["install"],
]


def micromamba(cmd):
    out = subprocess.check_output(["micromamba"] + cmd)
    return out.decode(locale.getpreferredencoding())


def micromamba_json(cmd):
    return json.loads(micromamba(cmd + ["--json"]))


def sort_envs(envs):
    special_name = re.compile(r"(\.cache|conda-bld)[/\\]")
    special_envs = [e for e in envs if special_name.search(e)]
    non_special_envs = [e for e in envs if not special_name.search(e)]
    return sorted(non_special_envs) + sorted(special_envs)


def print_json(data):
    print(json.dumps(data, indent=4))


def main(args):
    if args == ["self-check"]:
        try:
            micromamba(["--version"])
        except (FileNotFoundError, subprocess.CalledProcessError):
            print("'micromamba' not found, is it on the $PATH?", file=sys.stderr)
            return 1
        micromamba(["info"])
        print("Self-check successful.", file=sys.stderr)
    elif args == ["info", "--envs", "--json"]:
        base_env = micromamba_json(["info"])["base environment"]
        print_json(
            {
                "envs_dirs": [base_env],
                "conda_prefix": base_env,
                "envs": sort_envs(micromamba_json(["env", "list"])["envs"]),
            },
        )
    elif args == ["env", "list", "--json"]:
        print_json({"envs": sort_envs(micromamba_json(["env", "list"])["envs"])})
    elif args[0] == "list":
        if args[-1] == "-e":
            out = micromamba_json(args[:-1])
            print(
                "\n".join(
                    "{name}={version}={build_string}".format(**pkg) for pkg in out
                )
            )
        else:
            out = micromamba(args)
            lines = (
                line.strip()
                for line in out.splitlines()
                if line.startswith(" ") and not line.startswith("  Name")
            )
            print("\n".join(lines))
    elif any(args[: len(prefix)] == prefix for prefix in PASSTHROUGH_PREFIXES):
        os.execlp(
            "micromamba",
            "micromamba",
            *(arg for arg in args if arg != "--no-capture-output")
        )
    else:
        raise NotImplementedError(str(args))

    return 0


if __name__ == "__main__":
    args = sys.argv[1:]

    if ENABLE_LOGGING:
        cache_home = os.path.expanduser(os.getenv("XDG_CACHE_HOME") or "~/.cache")
        try:
            os.makedirs(cache_home)
        except OSError:
            pass
        logfile = os.path.join(cache_home, "micromamba-pycharm.log")
        open(logfile, "a").write("Attempting to run: " + str(args) + "\n")

    try:
        sys.exit(main(args))
    except Exception:
        if ENABLE_LOGGING:
            open(logfile, "a").write(traceback.format_exc())
        raise