Wed, 23 Apr 2025 18:02:09 +0200
Virtual Environments
- Prepared the virtual environments support for being expanded via plugins.
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
11090
f5f5f5803935
Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10765
diff
changeset
|
3 | # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
11230
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
7 | Module implementing a data class containing the metadata of a virtual environment. |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | from dataclasses import asdict, dataclass |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | @dataclass |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | class VirtualenvMetaData: |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | Class implementing a container for the metadata of a virtual environment. |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | name: str # name of the virtual environment |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | path: str = "" # directory of the virtual environment (empty for a global one) |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | interpreter: str = "" # path of the Python interpreter |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | is_global: bool = False # flag indicating a global environment |
11230
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
23 | environment_type: str = "standard" # virtual environment type |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | exec_path: str = "" # string to be prefixed to the PATH environment setting |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | description: str = "" # description of the environment |
10725
51fe971610d3
Virtual Environment Manager
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10439
diff
changeset
|
26 | eric_server: str = "" # server name the environment belongs to |
11230
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
27 | meta_version: int = 2 # version number of the meta data structure |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | def as_dict(self): |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | Public method to convert the metadata into a dictionary. |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | @return dictionary containing the metadata |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | @rtype dict |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | return asdict(self) |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | @classmethod |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | def from_dict(cls, data): |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Class method to create a metadata object from the given dictionary. |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param data dictionary containing the metadata |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @type dict |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | @return created metadata object |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @rtype VirtualenvMetaData |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | """ |
11230
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
48 | if data.get("meta_version", 1) < 2: |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
49 | # convert from meta version 1 |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
50 | if data.get("is_conda", False): |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
51 | data["environment_type"] = "conda" |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
52 | elif data.get("is_remote", False): |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
53 | data["environment_type"] = "remote" |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
54 | elif data.get("is_eric_server", False): |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
55 | data["environment_type"] = "eric_server" |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
56 | else: |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
57 | data["environment_type"] = "standard" |
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
58 | |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | return cls( |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | name=data["name"], |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | path=data.get("path", ""), |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | interpreter=data.get("interpreter", ""), |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | is_global=data.get("is_global", False), |
11230
8a15b05eeee3
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
64 | environment_type=data.get("environment_type", "standard"), |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | exec_path=data.get("exec_path", ""), |
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | description=data.get("description", ""), |
10725
51fe971610d3
Virtual Environment Manager
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10439
diff
changeset
|
67 | eric_server=data.get("eric_server", ""), |
10194
2c26b4fe25db
Refactored the 'VirtualEnv' code for better maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | ) |