async def coroutine(): global current_file global isort_config global black_config save_dialog = TextInputDialog( title="Save file", label_text="Enter the path of a file:", completer=PathCompleter(), ) filename = await show_dialog_as_float(save_dialog) if filename is not None: current_file = Path(filename).resolve() isort_config = isort.Config(settings_path=current_file.parent) black_config_file = black.find_pyproject_toml( (str(current_file), )) if black_config_file: black_config = black.parse_pyproject_toml(black_config_file) else: black_config = {} if not current_file.suffixes and not current_file.exists(): current_file = current_file.with_suffix(".py") open_file_frame.title = current_file.name save_file()
def start(argv=None): global current_file global isort_config global black_config argv = sys.argv if argv is None else argv if len(sys.argv) > 2: sys.exit("Usage: qpython [filename]") elif len(sys.argv) == 2: current_file = Path(sys.argv[1]).resolve() isort_config = isort.Config(settings_path=current_file.parent) black_config_file = black.find_pyproject_toml((str(current_file), )) if black_config_file: black_config = black.parse_pyproject_toml(black_config_file) else: black_config = {} open_file_frame.title = current_file.name if current_file.exists(): with current_file.open(encoding="utf8") as open_file: code.buffer.text = open_file.read() else: message_dialog( title="Welcome to", text=ABOUT_MESSAGE, style=style, ).run() app.layout.focus(code.buffer) app.run()
def make_black_config(path: Path) -> BlackConfig: """ Generate a basic black config object for the given path. """ config_file = find_pyproject_toml((str(path), )) if not config_file: return BlackConfig() config = parse_pyproject_toml(config_file) # manually patch options that do not have a 1-to-1 match in Mode arguments config["target_versions"] = { TargetVersion[val.upper()] for val in config.pop("target_version", []) } config["string_normalization"] = not config.pop( "skip_string_normalization", False) names = { field.name for field in BlackConfig.__dataclass_fields__.values() # type: ignore[attr-defined] } config = {name: value for name, value in config.items() if name in names} return BlackConfig(**config)
async def coroutine(): global current_file global isort_config global black_config open_dialog = TextInputDialog( title="Open file", label_text="Enter the path of a file:", completer=PathCompleter(), ) filename = await show_dialog_as_float(open_dialog) if filename is not None: current_file = Path(filename).resolve() isort_config = isort.Config(settings_path=current_file.parent) black_config_file = black.find_pyproject_toml( (str(current_file), )) if black_config_file: black_config = black.parse_pyproject_toml(black_config_file) else: black_config = {} try: with open(current_file, "r", encoding="utf8") as new_file_conent: code.buffer.text = new_file_conent.read() open_file_frame.title = current_file.name feedback(f"Successfully opened {current_file}") except IOError as error: feedback(f"Error: {error}")
def get_black_mode(src: Path) -> black.Mode: """Read the black configuration from pyproject.toml""" value = black.find_pyproject_toml((str(src),)) if not value: return black.Mode(line_length=DEFAULT_BLACK_LINE_LENGTH) config = black.parse_pyproject_toml(value) return black.Mode(**{ key: value for key, value in config.items() })
def read_black_config(src: Path, value: Optional[str]) -> BlackArgs: """Read the black configuration from pyproject.toml""" value = value or find_pyproject_toml((str(src),)) if not value: return BlackArgs() config = parse_pyproject_toml(value) return cast( BlackArgs, { key: value for key, value in config.items() if key in ["line_length", "skip_string_normalization"] }, )
def format_black(self, content): config_file = black.find_pyproject_toml((self.basedir, )) if config_file: config = black.parse_pyproject_toml(config_file) else: config = {} versions = config.get("target_version", []) mode = black.Mode( target_versions={black.TargetVersion[val.upper()] for val in versions}, line_length=config.get("line_length") or black.const.DEFAULT_LINE_LENGTH, string_normalization=not config.get("skip_string_normalization"), experimental_string_processing=bool( config.get("experimental_string_processing")), is_pyi=bool(config.get("pyi")), ) return black.format_str(content, mode=mode)
def _parse_pyproject_config(context: click.Context, param: click.Parameter, value: Optional[str]) -> Mode: if not value: pyproject_toml = find_pyproject_toml( tuple(context.params.get("files", (".", )))) value = pyproject_toml if pyproject_toml else None if value: try: pyproject_toml = toml.load(value) config = pyproject_toml.get("tool", {}).get("docstrfmt", {}) config = { k.replace("--", "").replace("-", "_"): v for k, v in config.items() } except (OSError, ValueError) as e: # pragma: no cover raise click.FileError( filename=value, hint=f"Error reading configuration file: {e}") if config: for key in ["exclude", "extend_exclude", "files"]: config_value = config.get(key) if config_value is not None and not isinstance( config_value, list): raise click.BadOptionUsage( key, f"Config key {key} must be a list") params = {} if context.params is not None: params.update(context.params) params.update(config) context.params = params black_config = parse_pyproject_toml(value) black_config.pop("exclude", None) black_config.pop("extend_exclude", None) target_version = black_config.pop("target_version", ["PY37"]) if target_version: target_version = set( getattr(TargetVersion, version.upper()) for version in target_version if hasattr(TargetVersion, version.upper())) black_config["target_versions"] = target_version return Mode(**black_config) else: return Mode(line_length=88)
Simultanously distributed to the US and Canada. And you know, the rest of the world. A productive parody. Made in Seattle. """ kb = KeyBindings() eb = KeyBindings() current_file: Optional[Path] = None default_isort_config = isort.Config(settings_path=os.getcwd()) if default_isort_config == isort.settings.DEFAULT_CONFIG: default_isort_config = isort.Config(profile="black", float_to_top=True) default_black_config_file = black.find_pyproject_toml((os.getcwd(), )) if default_black_config_file: default_black_config = black.parse_pyproject_toml( default_black_config_file) else: default_black_config = {} default_black_config = {} isort_config: isort.Config = default_isort_config black_config: dict = default_black_config code_frame_style = Style.from_dict({"frame.label": "bg:#AAAAAA fg:#0000aa"}) style = Style.from_dict({ "menu-bar": "bg:#aaaaaa black bold", "menu-bar.selected-item": "bg:black #aaaaaa bold",