epi-recorder 2.1.3__py3-none-any.whl → 2.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
epi_postinstall.py DELETED
@@ -1,197 +0,0 @@
1
- """
2
- Post-installation script for EPI Recorder
3
- Automatically fixes PATH issues on Windows for better UX
4
- """
5
- import sys
6
- import os
7
- import platform
8
- import subprocess
9
- from pathlib import Path
10
-
11
-
12
- def get_scripts_dir():
13
- """Get the Scripts directory where pip installs executables"""
14
- if platform.system() == "Windows":
15
- # Get the site-packages directory
16
- import site
17
- user_site = site.getusersitepackages()
18
- if user_site:
19
- # Scripts is typically ../Scripts relative to site-packages
20
- scripts_dir = Path(user_site).parent / "Scripts"
21
- if scripts_dir.exists():
22
- return scripts_dir
23
-
24
- # Fallback: try to find it from pip
25
- try:
26
- result = subprocess.run(
27
- [sys.executable, "-m", "pip", "show", "epi-recorder"],
28
- capture_output=True,
29
- text=True
30
- )
31
- if result.returncode == 0:
32
- for line in result.stdout.split('\n'):
33
- if line.startswith('Location:'):
34
- location = line.split(':', 1)[1].strip()
35
- scripts_dir = Path(location).parent / "Scripts"
36
- if scripts_dir.exists():
37
- return scripts_dir
38
- except Exception:
39
- pass
40
-
41
- return None
42
-
43
-
44
- def is_in_path(directory):
45
- """Check if directory is in PATH"""
46
- path_env = os.environ.get('PATH', '')
47
- path_dirs = path_env.split(os.pathsep)
48
- dir_str = str(directory)
49
- return any(os.path.normcase(p) == os.path.normcase(dir_str) for p in path_dirs)
50
-
51
-
52
- def add_to_user_path_windows(directory):
53
- """Add directory to user PATH on Windows"""
54
- try:
55
- import winreg
56
-
57
- # Open the user environment variables key
58
- key = winreg.OpenKey(
59
- winreg.HKEY_CURRENT_USER,
60
- 'Environment',
61
- 0,
62
- winreg.KEY_READ | winreg.KEY_WRITE
63
- )
64
-
65
- try:
66
- # Get current PATH
67
- current_path, _ = winreg.QueryValueEx(key, 'Path')
68
- except WindowsError:
69
- current_path = ''
70
-
71
- # Add our directory if not already there
72
- path_parts = current_path.split(os.pathsep)
73
- dir_str = str(directory)
74
-
75
- if not any(os.path.normcase(p) == os.path.normcase(dir_str) for p in path_parts):
76
- new_path = current_path + os.pathsep + dir_str
77
- winreg.SetValueEx(key, 'Path', 0, winreg.REG_EXPAND_SZ, new_path)
78
- winreg.CloseKey(key)
79
-
80
- # Broadcast WM_SETTINGCHANGE to notify the system
81
- try:
82
- import ctypes
83
- HWND_BROADCAST = 0xFFFF
84
- WM_SETTINGCHANGE = 0x1A
85
- ctypes.windll.user32.SendMessageW(
86
- HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment'
87
- )
88
- except Exception:
89
- pass
90
-
91
- return True
92
-
93
- winreg.CloseKey(key)
94
- return False
95
-
96
- except Exception as e:
97
- print(f"Warning: Could not modify PATH: {e}")
98
- return False
99
-
100
-
101
- def check_epi_command():
102
- """Check if 'epi' command is accessible"""
103
- try:
104
- result = subprocess.run(
105
- ['epi', '--version'],
106
- capture_output=True,
107
- timeout=2
108
- )
109
- return result.returncode == 0
110
- except (FileNotFoundError, subprocess.TimeoutExpired):
111
- return False
112
-
113
-
114
- def post_install():
115
- """Main post-install function"""
116
- print("\n" + "="*70)
117
- print("🎉 EPI Recorder Installation Complete!")
118
- print("="*70)
119
-
120
- # Check if epi command works
121
- if check_epi_command():
122
- print("\n✅ The 'epi' command is ready to use!")
123
- print("\nTry it now:")
124
- print(" epi --help")
125
- print(" epi init")
126
- return
127
-
128
- # If not, try to fix it (Windows only for now)
129
- if platform.system() == "Windows":
130
- print("\n⚠️ 'epi' command not found in PATH")
131
- print("🔧 Attempting automatic fix...")
132
-
133
- scripts_dir = get_scripts_dir()
134
-
135
- if scripts_dir and scripts_dir.exists():
136
- print(f"📁 Found Scripts directory: {scripts_dir}")
137
-
138
- if not is_in_path(scripts_dir):
139
- print("➕ Adding to your user PATH...")
140
-
141
- try:
142
- if add_to_user_path_windows(scripts_dir):
143
- print("\n✅ SUCCESS! PATH updated.")
144
- print("\n⚠️ IMPORTANT: You must restart your terminal for changes to take effect!")
145
- print("\nAfter restarting your terminal, try:")
146
- print(" epi --help")
147
- print(" epi init")
148
- else:
149
- print("\n⚠️ Scripts directory already in PATH, but 'epi' not found.")
150
- print("This might require a terminal restart.")
151
- print("\nIf 'epi' still doesn't work after restarting, use:")
152
- print(f" python -m epi_cli")
153
- except Exception as e:
154
- print(f"\n❌ Automatic fix failed: {e}")
155
- show_manual_instructions(scripts_dir)
156
- else:
157
- print("✅ Scripts directory is in PATH")
158
- print("⚠️ You may need to restart your terminal for the command to work.")
159
- else:
160
- print("❌ Could not locate Scripts directory")
161
- show_fallback_instructions()
162
- else:
163
- # Linux/Mac
164
- print("\n⚠️ 'epi' command not found in PATH")
165
- print("\nIf 'epi' doesn't work, use:")
166
- print(" python -m epi_cli")
167
- print("\nOr add pip's user base bin directory to PATH:")
168
- print(" export PATH=$PATH:$(python -m site --user-base)/bin")
169
-
170
- print("\n" + "="*70 + "\n")
171
-
172
-
173
- def show_manual_instructions(scripts_dir):
174
- """Show manual PATH update instructions"""
175
- print("\n📖 MANUAL FIX REQUIRED:")
176
- print("\nOption 1: Update PATH (Permanent)")
177
- print(" 1. Press Win + R, type: sysdm.cpl")
178
- print(" 2. Advanced → Environment Variables")
179
- print(" 3. Under 'User variables', select 'Path' → Edit")
180
- print(" 4. Click 'New' and add:")
181
- print(f" {scripts_dir}")
182
- print(" 5. Click OK, restart your terminal")
183
- print("\nOption 2: Use python -m (Always works)")
184
- print(" python -m epi_cli run script.py")
185
-
186
-
187
- def show_fallback_instructions():
188
- """Show fallback instructions if automatic fix fails"""
189
- print("\n📖 WORKAROUND:")
190
- print("\nUse 'python -m epi_cli' instead of 'epi':")
191
- print(" python -m epi_cli --help")
192
- print(" python -m epi_cli run script.py")
193
- print(" python -m epi_cli view recording.epi")
194
-
195
-
196
- if __name__ == "__main__":
197
- post_install()