Compare commits
6 Commits
update-dev
...
clan-25.05
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6482094cb4 | ||
|
|
cbcfcd507d | ||
|
|
9b71f106f6 | ||
|
|
1482bd571c | ||
|
|
ec2537d088 | ||
|
|
41229af93e |
@@ -50,13 +50,13 @@
|
|||||||
dns =
|
dns =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = [ pkgs.net-tools ];
|
environment.systemPackages = [ pkgs.nettools ];
|
||||||
};
|
};
|
||||||
|
|
||||||
client =
|
client =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
environment.systemPackages = [ pkgs.net-tools ];
|
environment.systemPackages = [ pkgs.nettools ];
|
||||||
};
|
};
|
||||||
|
|
||||||
server01 = {
|
server01 = {
|
||||||
|
|||||||
@@ -11,9 +11,7 @@
|
|||||||
pkgs.syncthing
|
pkgs.syncthing
|
||||||
];
|
];
|
||||||
script = ''
|
script = ''
|
||||||
export TMPDIR=/tmp
|
syncthing generate --config "$out"
|
||||||
TEMPORARY=$(mktemp -d)
|
|
||||||
syncthing generate --config "$out" --data "$TEMPORARY"
|
|
||||||
mv "$out"/key.pem "$out"/key
|
mv "$out"/key.pem "$out"/key
|
||||||
mv "$out"/cert.pem "$out"/cert
|
mv "$out"/cert.pem "$out"/cert
|
||||||
cat "$out"/config.xml | grep -oP '(?<=<device id=")[^"]+' | uniq > "$out"/id
|
cat "$out"/config.xml | grep -oP '(?<=<device id=")[^"]+' | uniq > "$out"/id
|
||||||
|
|||||||
18
devFlake/flake.lock
generated
18
devFlake/flake.lock
generated
@@ -3,16 +3,16 @@
|
|||||||
"clan-core-for-checks": {
|
"clan-core-for-checks": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1760213549,
|
"lastModified": 1760368011,
|
||||||
"narHash": "sha256-XosVRUEcdsoEdRtXyz9HrRc4Dt9Ke+viM5OVF7tLK50=",
|
"narHash": "sha256-mLK2nwbfklfOGIVAKVNDwGyYz8mPh4fzsAqSK3BlCiI=",
|
||||||
"ref": "main",
|
"ref": "clan-25.05",
|
||||||
"rev": "9c8797e77031d8d472d057894f18a53bdc9bbe1e",
|
"rev": "1b3c129aa9741d99b27810652ca888b3fbfc3a11",
|
||||||
"shallow": true,
|
"shallow": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.clan.lol/clan/clan-core"
|
"url": "https://git.clan.lol/clan/clan-core"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"ref": "main",
|
"ref": "clan-25.05",
|
||||||
"shallow": true,
|
"shallow": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.clan.lol/clan/clan-core"
|
"url": "https://git.clan.lol/clan/clan-core"
|
||||||
@@ -105,16 +105,16 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-dev": {
|
"nixpkgs-dev": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1760161054,
|
"lastModified": 1760309387,
|
||||||
"narHash": "sha256-PO3cKHFIQEPI0dr/SzcZwG50cHXfjoIqP2uS5W78OXg=",
|
"narHash": "sha256-e0lvQ7+B1Y8zjykYHAj9tBv10ggLqK0nmxwvMU3J0Eo=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e18d8ec6fafaed55561b7a1b54eb1c1ce3ffa2c5",
|
"rev": "6cd95994a9c8f7c6f8c1f1161be94119afdcb305",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable-small",
|
"ref": "nixos-25.05-small",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
description = "private dev inputs";
|
description = "private dev inputs";
|
||||||
|
|
||||||
# Dev dependencies
|
# Dev dependencies
|
||||||
inputs.nixpkgs-dev.url = "github:NixOS/nixpkgs/nixos-unstable-small";
|
inputs.nixpkgs-dev.url = "github:NixOS/nixpkgs/nixos-25.05-small";
|
||||||
|
|
||||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||||
inputs.flake-utils.inputs.systems.follows = "systems";
|
inputs.flake-utils.inputs.systems.follows = "systems";
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
inputs.systems.url = "github:nix-systems/default";
|
inputs.systems.url = "github:nix-systems/default";
|
||||||
|
|
||||||
inputs.clan-core-for-checks.url = "git+https://git.clan.lol/clan/clan-core?ref=main&shallow=1";
|
inputs.clan-core-for-checks.url = "git+https://git.clan.lol/clan/clan-core?ref=clan-25.05&shallow=1";
|
||||||
inputs.clan-core-for-checks.flake = false;
|
inputs.clan-core-for-checks.flake = false;
|
||||||
|
|
||||||
inputs.test-fixtures.url = "git+https://git.clan.lol/clan/test-fixtures";
|
inputs.test-fixtures.url = "git+https://git.clan.lol/clan/test-fixtures";
|
||||||
|
|||||||
17
flake.lock
generated
17
flake.lock
generated
@@ -71,15 +71,16 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1758805352,
|
"lastModified": 1759509947,
|
||||||
"narHash": "sha256-BHdc43Lkayd+72W/NXRKHzX5AZ+28F3xaUs3a88/Uew=",
|
"narHash": "sha256-4XifSIHfpJKcCf5bZZRhj8C4aCpjNBaE3kXr02s4rHU=",
|
||||||
"owner": "nix-darwin",
|
"owner": "nix-darwin",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"rev": "c48e963a5558eb1c3827d59d21c5193622a1477c",
|
"rev": "000eadb231812ad6ea6aebd7526974aaf4e79355",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-darwin",
|
"owner": "nix-darwin",
|
||||||
|
"ref": "nix-darwin-25.05",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -114,15 +115,15 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 315532800,
|
"lastModified": 1760324802,
|
||||||
"narHash": "sha256-yDxtm0PESdgNetiJN5+MFxgubBcLDTiuSjjrJiyvsvM=",
|
"narHash": "sha256-VWlJtLQ5EQQj45Wj0yTExtSjwRyZ59/qMqEwus/Exlg=",
|
||||||
"rev": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10",
|
"rev": "7e297ddff44a3cc93673bb38d0374df8d0ad73e4",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre871443.d7f52a7a640b/nixexprs.tar.xz"
|
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.811135.7e297ddff44a/nixexprs.tar.xz"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz"
|
"url": "https://nixos.org/channels/nixos-25.05/nixexprs.tar.xz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
description = "clan.lol base operating system";
|
description = "clan.lol base operating system";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz";
|
nixpkgs.url = "https://nixos.org/channels/nixos-25.05/nixexprs.tar.xz";
|
||||||
|
|
||||||
nix-darwin.url = "github:nix-darwin/nix-darwin";
|
nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.05";
|
||||||
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
|
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||||
|
|||||||
@@ -11,8 +11,6 @@
|
|||||||
treefmt.programs.nixfmt.enable = true;
|
treefmt.programs.nixfmt.enable = true;
|
||||||
treefmt.programs.nixfmt.package = pkgs.nixfmt-rfc-style;
|
treefmt.programs.nixfmt.package = pkgs.nixfmt-rfc-style;
|
||||||
treefmt.programs.deadnix.enable = true;
|
treefmt.programs.deadnix.enable = true;
|
||||||
treefmt.programs.sizelint.enable = true;
|
|
||||||
treefmt.programs.sizelint.failOnWarn = true;
|
|
||||||
treefmt.programs.clang-format.enable = true;
|
treefmt.programs.clang-format.enable = true;
|
||||||
treefmt.settings.global.excludes = [
|
treefmt.settings.global.excludes = [
|
||||||
"*.png"
|
"*.png"
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class ApiBridge(Protocol):
|
|||||||
|
|
||||||
def process_request(self, request: BackendRequest) -> None:
|
def process_request(self, request: BackendRequest) -> None:
|
||||||
"""Process an API request through the middleware chain."""
|
"""Process an API request through the middleware chain."""
|
||||||
from clan_app.middleware.base import MiddlewareContext # noqa: PLC0415
|
from clan_app.middleware.base import MiddlewareContext
|
||||||
|
|
||||||
with ExitStack() as stack:
|
with ExitStack() as stack:
|
||||||
# Capture the current call stack up to this point
|
# Capture the current call stack up to this point
|
||||||
@@ -62,7 +62,7 @@ class ApiBridge(Protocol):
|
|||||||
)
|
)
|
||||||
middleware.process(context)
|
middleware.process(context)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
from clan_app.middleware.base import ( # noqa: PLC0415
|
from clan_app.middleware.base import (
|
||||||
MiddlewareError,
|
MiddlewareError,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -191,13 +191,13 @@ class HttpBridge(ApiBridge, BaseHTTPRequestHandler):
|
|||||||
|
|
||||||
return file_data
|
return file_data
|
||||||
|
|
||||||
def do_OPTIONS(self) -> None:
|
def do_OPTIONS(self) -> None: # noqa: N802
|
||||||
"""Handle CORS preflight requests."""
|
"""Handle CORS preflight requests."""
|
||||||
self.send_response_only(200)
|
self.send_response_only(200)
|
||||||
self._send_cors_headers()
|
self._send_cors_headers()
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
def do_GET(self) -> None:
|
def do_GET(self) -> None: # noqa: N802
|
||||||
"""Handle GET requests."""
|
"""Handle GET requests."""
|
||||||
parsed_url = urlparse(self.path)
|
parsed_url = urlparse(self.path)
|
||||||
path = parsed_url.path
|
path = parsed_url.path
|
||||||
@@ -211,7 +211,7 @@ class HttpBridge(ApiBridge, BaseHTTPRequestHandler):
|
|||||||
else:
|
else:
|
||||||
self.send_api_error_response("info", "Not Found", ["http_bridge", "GET"])
|
self.send_api_error_response("info", "Not Found", ["http_bridge", "GET"])
|
||||||
|
|
||||||
def do_POST(self) -> None:
|
def do_POST(self) -> None: # noqa: N802
|
||||||
"""Handle POST requests."""
|
"""Handle POST requests."""
|
||||||
parsed_url = urlparse(self.path)
|
parsed_url = urlparse(self.path)
|
||||||
path = parsed_url.path
|
path = parsed_url.path
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class WebviewBridge(ApiBridge):
|
|||||||
|
|
||||||
log.debug(f"Sending response: {serialized}")
|
log.debug(f"Sending response: {serialized}")
|
||||||
# Import FuncStatus locally to avoid circular import
|
# Import FuncStatus locally to avoid circular import
|
||||||
from .webview import FuncStatus # noqa: PLC0415
|
from .webview import FuncStatus
|
||||||
|
|
||||||
self.webview.return_(response._op_key, FuncStatus.SUCCESS, serialized) # noqa: SLF001
|
self.webview.return_(response._op_key, FuncStatus.SUCCESS, serialized) # noqa: SLF001
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ def main() -> None:
|
|||||||
load_in_all_api_functions()
|
load_in_all_api_functions()
|
||||||
|
|
||||||
# import lazily since we otherwise we do not have all api functions loaded according to Qubasa
|
# import lazily since we otherwise we do not have all api functions loaded according to Qubasa
|
||||||
from clan_lib.api import API # noqa: PLC0415
|
from clan_lib.api import API
|
||||||
|
|
||||||
schema = API.to_json_schema()
|
schema = API.to_json_schema()
|
||||||
print(f"""{json.dumps(schema, indent=2)}""")
|
print(f"""{json.dumps(schema, indent=2)}""")
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class TestFlake(Flake):
|
|||||||
opts: "ListOptions | None" = None, # noqa: ARG002
|
opts: "ListOptions | None" = None, # noqa: ARG002
|
||||||
) -> "dict[str, MachineResponse]":
|
) -> "dict[str, MachineResponse]":
|
||||||
"""List machines of a clan"""
|
"""List machines of a clan"""
|
||||||
from clan_lib.machines.actions import ( # noqa: PLC0415
|
from clan_lib.machines.actions import (
|
||||||
InventoryMachine,
|
InventoryMachine,
|
||||||
MachineResponse,
|
MachineResponse,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ def remove_machine_command(args: argparse.Namespace) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def add_group_argument(parser: argparse.ArgumentParser) -> None:
|
def add_group_argument(parser: argparse.ArgumentParser) -> None:
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_groups,
|
complete_groups,
|
||||||
)
|
)
|
||||||
@@ -334,7 +334,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machines to add",
|
help="the name of the machines to add",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -353,7 +353,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machines to remove",
|
help="the name of the machines to remove",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -369,7 +369,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user to add",
|
help="the name of the user to add",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
@@ -388,7 +388,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user to remove",
|
help="the name of the user to remove",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
@@ -407,7 +407,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the secret",
|
help="the name of the secret",
|
||||||
type=secret_name_type,
|
type=secret_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
)
|
)
|
||||||
@@ -426,7 +426,7 @@ def register_groups_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the secret",
|
help="the name of the secret",
|
||||||
type=secret_name_type,
|
type=secret_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ def register_import_sops_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the group to import the secrets to",
|
help="the group to import the secrets to",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_groups,
|
complete_groups,
|
||||||
)
|
)
|
||||||
@@ -82,7 +82,7 @@ def register_import_sops_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the machine to import the secrets to",
|
help="the machine to import the secrets to",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -95,7 +95,7 @@ def register_import_sops_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the user to import the secrets to",
|
help="the user to import the secrets to",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ def register_machines_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machine",
|
help="the name of the machine",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -192,7 +192,7 @@ def register_machines_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machine",
|
help="the name of the machine",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -207,7 +207,7 @@ def register_machines_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machine",
|
help="the name of the machine",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -225,7 +225,7 @@ def register_machines_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machine",
|
help="the name of the machine",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
@@ -250,7 +250,7 @@ def register_machines_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the machine",
|
help="the name of the machine",
|
||||||
type=machine_name_type,
|
type=machine_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ def add_secret_argument(parser: argparse.ArgumentParser, autocomplete: bool) ->
|
|||||||
type=secret_name_type,
|
type=secret_name_type,
|
||||||
)
|
)
|
||||||
if autocomplete:
|
if autocomplete:
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
)
|
)
|
||||||
@@ -467,7 +467,7 @@ def register_secrets_parser(subparser: argparse._SubParsersAction) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the group to import the secrets to (can be repeated)",
|
help="the group to import the secrets to (can be repeated)",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_groups,
|
complete_groups,
|
||||||
)
|
)
|
||||||
@@ -480,7 +480,7 @@ def register_secrets_parser(subparser: argparse._SubParsersAction) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the machine to import the secrets to (can be repeated)",
|
help="the machine to import the secrets to (can be repeated)",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_machines,
|
complete_machines,
|
||||||
)
|
)
|
||||||
@@ -493,7 +493,7 @@ def register_secrets_parser(subparser: argparse._SubParsersAction) -> None:
|
|||||||
default=[],
|
default=[],
|
||||||
help="the user to import the secrets to (can be repeated)",
|
help="the user to import the secrets to (can be repeated)",
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user",
|
help="the name of the user",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
@@ -295,7 +295,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user",
|
help="the name of the user",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
@@ -312,7 +312,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user",
|
help="the name of the user",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
complete_users,
|
complete_users,
|
||||||
@@ -336,7 +336,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the group",
|
help="the name of the group",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_secrets,
|
complete_secrets,
|
||||||
complete_users,
|
complete_users,
|
||||||
@@ -360,7 +360,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user",
|
help="the name of the user",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
@@ -378,7 +378,7 @@ def register_users_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
help="the name of the user",
|
help="the name of the user",
|
||||||
type=user_name_type,
|
type=user_name_type,
|
||||||
)
|
)
|
||||||
from clan_cli.completions import ( # noqa: PLC0415
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
complete_users,
|
complete_users,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ class StoreBase(ABC):
|
|||||||
if generator.share:
|
if generator.share:
|
||||||
log_info = log.info
|
log_info = log.info
|
||||||
else:
|
else:
|
||||||
from clan_lib.machines.machines import Machine # noqa: PLC0415
|
from clan_lib.machines.machines import Machine
|
||||||
|
|
||||||
machine_obj = Machine(name=generator.machines[0], flake=self.flake)
|
machine_obj = Machine(name=generator.machines[0], flake=self.flake)
|
||||||
log_info = machine_obj.info
|
log_info = machine_obj.info
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ def vars_status(
|
|||||||
flake: Flake,
|
flake: Flake,
|
||||||
generator_name: None | str = None,
|
generator_name: None | str = None,
|
||||||
) -> VarStatus:
|
) -> VarStatus:
|
||||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
from clan_cli.vars.generator import Generator
|
||||||
|
|
||||||
machine = Machine(name=machine_name, flake=flake)
|
machine = Machine(name=machine_name, flake=flake)
|
||||||
missing_secret_vars = []
|
missing_secret_vars = []
|
||||||
|
|||||||
@@ -482,7 +482,7 @@ class Generator:
|
|||||||
if sys.platform == "linux" and bwrap.bubblewrap_works():
|
if sys.platform == "linux" and bwrap.bubblewrap_works():
|
||||||
cmd = bubblewrap_cmd(str(final_script), tmpdir)
|
cmd = bubblewrap_cmd(str(final_script), tmpdir)
|
||||||
elif sys.platform == "darwin":
|
elif sys.platform == "darwin":
|
||||||
from clan_lib.sandbox_exec import sandbox_exec_cmd # noqa: PLC0415
|
from clan_lib.sandbox_exec import sandbox_exec_cmd
|
||||||
|
|
||||||
cmd = stack.enter_context(sandbox_exec_cmd(str(final_script), tmpdir))
|
cmd = stack.enter_context(sandbox_exec_cmd(str(final_script), tmpdir))
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class SecretStore(StoreBase):
|
|||||||
def ensure_machine_key(self, machine: str) -> None:
|
def ensure_machine_key(self, machine: str) -> None:
|
||||||
"""Ensure machine has sops keys initialized."""
|
"""Ensure machine has sops keys initialized."""
|
||||||
# no need to generate keys if we don't manage secrets
|
# no need to generate keys if we don't manage secrets
|
||||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
from clan_cli.vars.generator import Generator
|
||||||
|
|
||||||
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
||||||
if not vars_generators:
|
if not vars_generators:
|
||||||
@@ -143,7 +143,7 @@ class SecretStore(StoreBase):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
if generators is None:
|
if generators is None:
|
||||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
from clan_cli.vars.generator import Generator
|
||||||
|
|
||||||
generators = Generator.get_machine_generators([machine], self.flake)
|
generators = Generator.get_machine_generators([machine], self.flake)
|
||||||
file_found = False
|
file_found = False
|
||||||
@@ -218,7 +218,7 @@ class SecretStore(StoreBase):
|
|||||||
return [store_folder]
|
return [store_folder]
|
||||||
|
|
||||||
def populate_dir(self, machine: str, output_dir: Path, phases: list[str]) -> None:
|
def populate_dir(self, machine: str, output_dir: Path, phases: list[str]) -> None:
|
||||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
from clan_cli.vars.generator import Generator
|
||||||
|
|
||||||
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
||||||
if "users" in phases or "services" in phases:
|
if "users" in phases or "services" in phases:
|
||||||
@@ -292,7 +292,7 @@ class SecretStore(StoreBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def collect_keys_for_secret(self, machine: str, path: Path) -> set[sops.SopsKey]:
|
def collect_keys_for_secret(self, machine: str, path: Path) -> set[sops.SopsKey]:
|
||||||
from clan_cli.secrets.secrets import ( # noqa: PLC0415
|
from clan_cli.secrets.secrets import (
|
||||||
collect_keys_for_path,
|
collect_keys_for_path,
|
||||||
collect_keys_for_type,
|
collect_keys_for_type,
|
||||||
)
|
)
|
||||||
@@ -354,10 +354,10 @@ class SecretStore(StoreBase):
|
|||||||
ClanError: If the specified file_name is not found
|
ClanError: If the specified file_name is not found
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from clan_cli.secrets.secrets import update_keys # noqa: PLC0415
|
from clan_cli.secrets.secrets import update_keys
|
||||||
|
|
||||||
if generators is None:
|
if generators is None:
|
||||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
from clan_cli.vars.generator import Generator
|
||||||
|
|
||||||
generators = Generator.get_machine_generators([machine], self.flake)
|
generators = Generator.get_machine_generators([machine], self.flake)
|
||||||
file_found = False
|
file_found = False
|
||||||
|
|||||||
@@ -319,9 +319,9 @@ def load_in_all_api_functions() -> None:
|
|||||||
We have to make sure python loads every wrapped function at least once.
|
We have to make sure python loads every wrapped function at least once.
|
||||||
This is done by importing all modules from the clan_lib and clan_cli packages.
|
This is done by importing all modules from the clan_lib and clan_cli packages.
|
||||||
"""
|
"""
|
||||||
import clan_cli # noqa: PLC0415 # Avoid circular imports - many modules import from clan_lib.api
|
import clan_cli # Avoid circular imports - many modules import from clan_lib.api
|
||||||
|
|
||||||
import clan_lib # noqa: PLC0415 # Avoid circular imports - many modules import from clan_lib.api
|
import clan_lib # Avoid circular imports - many modules import from clan_lib.api
|
||||||
|
|
||||||
import_all_modules_from_package(clan_lib)
|
import_all_modules_from_package(clan_lib)
|
||||||
import_all_modules_from_package(clan_cli)
|
import_all_modules_from_package(clan_cli)
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ def list_system_storage_devices() -> Blockdevices:
|
|||||||
A list of detected block devices with metadata like size, path, type, etc.
|
A list of detected block devices with metadata like size, path, type, etc.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from clan_lib.nix import nix_shell # noqa: PLC0415
|
from clan_lib.nix import nix_shell
|
||||||
|
|
||||||
cmd = nix_shell(
|
cmd = nix_shell(
|
||||||
["util-linux"],
|
["util-linux"],
|
||||||
@@ -124,7 +124,7 @@ def get_clan_directory_relative(flake: Flake) -> str:
|
|||||||
ClanError: If the flake evaluation fails or directories cannot be found
|
ClanError: If the flake evaluation fails or directories cannot be found
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from clan_lib.dirs import get_clan_directories # noqa: PLC0415
|
from clan_lib.dirs import get_clan_directories
|
||||||
|
|
||||||
_, relative_dir = get_clan_directories(flake)
|
_, relative_dir = get_clan_directories(flake)
|
||||||
return relative_dir
|
return relative_dir
|
||||||
|
|||||||
@@ -1162,7 +1162,7 @@ class Flake:
|
|||||||
opts: "ListOptions | None" = None,
|
opts: "ListOptions | None" = None,
|
||||||
) -> "dict[str, MachineResponse]":
|
) -> "dict[str, MachineResponse]":
|
||||||
"""List machines of a clan"""
|
"""List machines of a clan"""
|
||||||
from clan_lib.machines.actions import list_machines # noqa: PLC0415
|
from clan_lib.machines.actions import list_machines
|
||||||
|
|
||||||
return list_machines(self, opts)
|
return list_machines(self, opts)
|
||||||
|
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ def locked_open(filename: Path, mode: str = "r") -> Generator:
|
|||||||
|
|
||||||
|
|
||||||
def write_history_file(data: Any) -> None:
|
def write_history_file(data: Any) -> None:
|
||||||
from clan_lib.dirs import user_history_file # noqa: PLC0415
|
from clan_lib.dirs import user_history_file
|
||||||
|
|
||||||
with locked_open(user_history_file(), "w+") as f:
|
with locked_open(user_history_file(), "w+") as f:
|
||||||
f.write(json.dumps(data, cls=ClanJSONEncoder, indent=4))
|
f.write(json.dumps(data, cls=ClanJSONEncoder, indent=4))
|
||||||
|
|
||||||
|
|
||||||
def read_history_file() -> list[dict]:
|
def read_history_file() -> list[dict]:
|
||||||
from clan_lib.dirs import user_history_file # noqa: PLC0415
|
from clan_lib.dirs import user_history_file
|
||||||
|
|
||||||
with locked_open(user_history_file(), "r") as f:
|
with locked_open(user_history_file(), "r") as f:
|
||||||
content: str = f.read()
|
content: str = f.read()
|
||||||
|
|||||||
@@ -119,13 +119,6 @@ def run_machine_hardware_info_init(
|
|||||||
if opts.debug:
|
if opts.debug:
|
||||||
cmd += ["--debug"]
|
cmd += ["--debug"]
|
||||||
|
|
||||||
# REMOVEME when nixos-anywhere > 1.12.0
|
|
||||||
# In 1.12.0 and earlier, nixos-anywhere doesn't pass Nix options when attempting to get substituters
|
|
||||||
# which leads to the installation test failing with the error of not being able to substitute flake-parts
|
|
||||||
# see: https://github.com/nix-community/nixos-anywhere/pull/596
|
|
||||||
if "CLAN_TEST_STORE" in environ:
|
|
||||||
cmd += ["--no-use-machine-substituters"]
|
|
||||||
|
|
||||||
# Add nix options to nixos-anywhere
|
# Add nix options to nixos-anywhere
|
||||||
cmd.extend(opts.machine.flake.nix_options or [])
|
cmd.extend(opts.machine.flake.nix_options or [])
|
||||||
|
|
||||||
|
|||||||
@@ -191,13 +191,6 @@ def run_machine_install(opts: InstallOptions, target_host: Remote) -> None:
|
|||||||
if opts.debug:
|
if opts.debug:
|
||||||
cmd.append("--debug")
|
cmd.append("--debug")
|
||||||
|
|
||||||
# REMOVEME when nixos-anywhere > 1.12.0
|
|
||||||
# In 1.12.0 and earlier, nixos-anywhere doesn't pass Nix options when attempting to get substituters
|
|
||||||
# which leads to the installation test failing with the error of not being able to substitute flake-parts
|
|
||||||
# see: https://github.com/nix-community/nixos-anywhere/pull/596
|
|
||||||
if "CLAN_TEST_STORE" in environ:
|
|
||||||
cmd += ["--no-use-machine-substituters"]
|
|
||||||
|
|
||||||
# Add nix options to nixos-anywhere
|
# Add nix options to nixos-anywhere
|
||||||
cmd.extend(opts.machine.flake.nix_options or [])
|
cmd.extend(opts.machine.flake.nix_options or [])
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class Machine:
|
|||||||
|
|
||||||
def get_inv_machine(self) -> "InventoryMachine":
|
def get_inv_machine(self) -> "InventoryMachine":
|
||||||
# Import on demand to avoid circular imports
|
# Import on demand to avoid circular imports
|
||||||
from clan_lib.machines.actions import get_machine # noqa: PLC0415
|
from clan_lib.machines.actions import get_machine
|
||||||
|
|
||||||
return get_machine(self.flake, self.name)
|
return get_machine(self.flake, self.name)
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ class Machine:
|
|||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def secret_vars_store(self) -> StoreBase:
|
def secret_vars_store(self) -> StoreBase:
|
||||||
from clan_cli.vars.secret_modules import password_store # noqa: PLC0415
|
from clan_cli.vars.secret_modules import password_store
|
||||||
|
|
||||||
secret_module = self.select("config.clan.core.vars.settings.secretModule")
|
secret_module = self.select("config.clan.core.vars.settings.secretModule")
|
||||||
module = importlib.import_module(secret_module)
|
module = importlib.import_module(secret_module)
|
||||||
@@ -126,7 +126,7 @@ class Machine:
|
|||||||
return self.flake.path
|
return self.flake.path
|
||||||
|
|
||||||
def target_host(self) -> Remote:
|
def target_host(self) -> Remote:
|
||||||
from clan_lib.network.network import get_best_remote # noqa: PLC0415
|
from clan_lib.network.network import get_best_remote
|
||||||
|
|
||||||
with get_best_remote(self) as remote:
|
with get_best_remote(self) as remote:
|
||||||
return remote
|
return remote
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def _suggest_similar_names(
|
|||||||
|
|
||||||
|
|
||||||
def get_available_machines(flake: Flake) -> list[str]:
|
def get_available_machines(flake: Flake) -> list[str]:
|
||||||
from clan_lib.machines.list import list_machines # noqa: PLC0415
|
from clan_lib.machines.list import list_machines
|
||||||
|
|
||||||
machines = list_machines(flake)
|
machines = list_machines(flake)
|
||||||
return list(machines.keys())
|
return list(machines.keys())
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class Peer:
|
|||||||
_var: dict[str, str] = self._host["var"]
|
_var: dict[str, str] = self._host["var"]
|
||||||
machine_name = _var["machine"]
|
machine_name = _var["machine"]
|
||||||
generator = _var["generator"]
|
generator = _var["generator"]
|
||||||
from clan_lib.machines.machines import Machine # noqa: PLC0415
|
from clan_lib.machines.machines import Machine
|
||||||
|
|
||||||
machine = Machine(name=machine_name, flake=self.flake)
|
machine = Machine(name=machine_name, flake=self.flake)
|
||||||
var = get_machine_var(
|
var = get_machine_var(
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ def nix_eval(flags: list[str]) -> list[str]:
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
if os.environ.get("IN_NIX_SANDBOX"):
|
if os.environ.get("IN_NIX_SANDBOX"):
|
||||||
from clan_lib.dirs import nixpkgs_source # noqa: PLC0415
|
from clan_lib.dirs import nixpkgs_source
|
||||||
|
|
||||||
return [
|
return [
|
||||||
*default_flags,
|
*default_flags,
|
||||||
@@ -169,7 +169,7 @@ def nix_shell(packages: list[str], cmd: list[str]) -> list[str]:
|
|||||||
if not missing_packages:
|
if not missing_packages:
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
from clan_lib.dirs import nixpkgs_flake # noqa: PLC0415
|
from clan_lib.dirs import nixpkgs_flake
|
||||||
|
|
||||||
return [
|
return [
|
||||||
*nix_command(["shell", "--inputs-from", f"{nixpkgs_flake()!s}"]),
|
*nix_command(["shell", "--inputs-from", f"{nixpkgs_flake()!s}"]),
|
||||||
|
|||||||
@@ -464,12 +464,12 @@ class Remote:
|
|||||||
self,
|
self,
|
||||||
opts: "ConnectionOptions | None" = None,
|
opts: "ConnectionOptions | None" = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
from clan_lib.network.check import check_machine_ssh_reachable # noqa: PLC0415
|
from clan_lib.network.check import check_machine_ssh_reachable
|
||||||
|
|
||||||
return check_machine_ssh_reachable(self, opts)
|
return check_machine_ssh_reachable(self, opts)
|
||||||
|
|
||||||
def check_machine_ssh_login(self) -> None:
|
def check_machine_ssh_login(self) -> None:
|
||||||
from clan_lib.network.check import check_machine_ssh_login # noqa: PLC0415
|
from clan_lib.network.check import check_machine_ssh_login
|
||||||
|
|
||||||
return check_machine_ssh_login(self)
|
return check_machine_ssh_login(self)
|
||||||
|
|
||||||
|
|||||||
@@ -290,9 +290,7 @@ def collect_commands() -> list[Category]:
|
|||||||
# 3. sort by title alphabetically
|
# 3. sort by title alphabetically
|
||||||
return (c.title.split(" ")[0], c.title, weight)
|
return (c.title.split(" ")[0], c.title, weight)
|
||||||
|
|
||||||
result = sorted(result, key=weight_cmd_groups)
|
return sorted(result, key=weight_cmd_groups)
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def build_command_reference() -> None:
|
def build_command_reference() -> None:
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class MPProcess:
|
|||||||
def _set_proc_name(name: str) -> None:
|
def _set_proc_name(name: str) -> None:
|
||||||
if sys.platform != "linux":
|
if sys.platform != "linux":
|
||||||
return
|
return
|
||||||
import ctypes # noqa: PLC0415
|
import ctypes
|
||||||
|
|
||||||
# Define the prctl function with the appropriate arguments and return type
|
# Define the prctl function with the appropriate arguments and return type
|
||||||
libc = ctypes.CDLL("libc.so.6")
|
libc = ctypes.CDLL("libc.so.6")
|
||||||
|
|||||||
@@ -759,12 +759,12 @@ class Win32Implementation(BaseImplementation):
|
|||||||
SM_CXSMICON = 49
|
SM_CXSMICON = 49
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
from ctypes import Structure # noqa: PLC0415
|
from ctypes import Structure
|
||||||
|
|
||||||
class WNDCLASSW(Structure):
|
class WNDCLASSW(Structure):
|
||||||
"""Windows class structure for window registration."""
|
"""Windows class structure for window registration."""
|
||||||
|
|
||||||
from ctypes import CFUNCTYPE, wintypes # noqa: PLC0415
|
from ctypes import CFUNCTYPE, wintypes
|
||||||
|
|
||||||
LPFN_WND_PROC = CFUNCTYPE(
|
LPFN_WND_PROC = CFUNCTYPE(
|
||||||
wintypes.INT,
|
wintypes.INT,
|
||||||
@@ -789,7 +789,7 @@ class Win32Implementation(BaseImplementation):
|
|||||||
class MENUITEMINFOW(Structure):
|
class MENUITEMINFOW(Structure):
|
||||||
"""Windows menu item information structure."""
|
"""Windows menu item information structure."""
|
||||||
|
|
||||||
from ctypes import wintypes # noqa: PLC0415
|
from ctypes import wintypes
|
||||||
|
|
||||||
_fields_: ClassVar = [
|
_fields_: ClassVar = [
|
||||||
("cb_size", wintypes.UINT),
|
("cb_size", wintypes.UINT),
|
||||||
@@ -809,7 +809,7 @@ class Win32Implementation(BaseImplementation):
|
|||||||
class NOTIFYICONDATAW(Structure):
|
class NOTIFYICONDATAW(Structure):
|
||||||
"""Windows notification icon data structure."""
|
"""Windows notification icon data structure."""
|
||||||
|
|
||||||
from ctypes import wintypes # noqa: PLC0415
|
from ctypes import wintypes
|
||||||
|
|
||||||
_fields_: ClassVar = [
|
_fields_: ClassVar = [
|
||||||
("cb_size", wintypes.DWORD),
|
("cb_size", wintypes.DWORD),
|
||||||
@@ -1061,7 +1061,7 @@ class Win32Implementation(BaseImplementation):
|
|||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
return
|
return
|
||||||
|
|
||||||
from ctypes import wintypes # noqa: PLC0415
|
from ctypes import wintypes
|
||||||
|
|
||||||
if self._menu is None:
|
if self._menu is None:
|
||||||
self.update_menu()
|
self.update_menu()
|
||||||
@@ -1110,7 +1110,7 @@ class Win32Implementation(BaseImplementation):
|
|||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
from ctypes import wintypes # noqa: PLC0415
|
from ctypes import wintypes
|
||||||
|
|
||||||
if msg == self.WM_TRAYICON:
|
if msg == self.WM_TRAYICON:
|
||||||
if l_param == self.WM_RBUTTONUP:
|
if l_param == self.WM_RBUTTONUP:
|
||||||
|
|||||||
Reference in New Issue
Block a user