stampli-bulk-editor/stampli_gui.spec
Adam Moussa 53aa0b7525 Initial commit — Stampli Bulk Editor v1.0.0
Mac GUI app (tkinter + Playwright) for bulk-editing invoice pay dates
on Stampli's Select to Pay dashboard. Features:
- Scan MUI DataGrid rows via virtual scroll
- Auto-calculate pay dates (due - 5 days, business day adjusted)
- Bulk edit pay date cells via calendar input
- Filter to error-free invoices, select all, submit for payment
- Scan Pending Approval tab to verify edits
- PyInstaller .app bundle with custom icon
2026-04-22 15:07:17 -04:00

74 lines
1.6 KiB
Python

# -*- mode: python ; coding: utf-8 -*-
import os
import sys
uv_python = os.path.realpath(os.path.join('venv', 'bin', 'python'))
uv_base = os.path.dirname(os.path.dirname(uv_python))
tcl_dir = os.path.join(uv_base, 'lib', 'tcl8.6')
tk_dir = os.path.join(uv_base, 'lib', 'tk8.6')
# Find playwright driver
import playwright
pw_dir = os.path.dirname(playwright.__file__)
pw_driver = os.path.join(pw_dir, 'driver')
a = Analysis(
['stampli_gui.py'],
pathex=[],
binaries=[],
datas=[
('stampli_core.py', '.'),
('app_icon.icns', '.'),
(tcl_dir, 'tcl8.6'),
(tk_dir, 'tk8.6'),
(pw_driver, 'playwright/driver'),
],
hiddenimports=['playwright', 'playwright.sync_api', 'greenlet'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='Stampli Bulk Editor',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False,
console=False,
target_arch='arm64',
icon='app_icon.icns',
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=False,
name='Stampli Bulk Editor',
)
app = BUNDLE(
coll,
name='Stampli Bulk Editor.app',
bundle_identifier='com.seahaven.stampli-bulk-editor',
icon='app_icon.icns',
info_plist={
'NSHighResolutionCapable': True,
'CFBundleShortVersionString': '1.0.0',
'CFBundleVersion': '1.0.0',
'LSEnvironment': {
'TCL_LIBRARY': '../Resources/tcl8.6',
'TK_LIBRARY': '../Resources/tk8.6',
},
},
)