refactor: reorganize skill numbering, remove obsolete skills, rename shared libs
- Rename: 00→80 claude-settings-optimizer, 88→79 dintel-skill-update, 92→81 mac-optimizer, 93→82 tui-design-template - Rename: dintel-shared → _dintel-shared (consistent with _ourdigital-shared) - Remove: 61-gtm-manager, 62-gtm-guardian (obsolete), 99_archive - Update all dintel-* skill refs (114 occurrences across 31 files) - Sync README.md, CLAUDE.md, AGENTS.md with new structure Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
71
custom-skills/_dintel-shared/src/dintel/excel.py
Normal file
71
custom-skills/_dintel-shared/src/dintel/excel.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""Excel utilities for D.intelligence branded spreadsheets."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
|
||||
|
||||
from dintel.brand import (
|
||||
BRAND_NAME,
|
||||
HEX_PRIMARY,
|
||||
HEX_SECONDARY,
|
||||
HEX_ACCENT,
|
||||
HEX_TEXT,
|
||||
)
|
||||
|
||||
# ── Style Constants ─────────────────────────────────────────────
|
||||
HEADER_FILL = PatternFill(start_color=HEX_PRIMARY.lstrip("#"), end_color=HEX_PRIMARY.lstrip("#"), fill_type="solid")
|
||||
HEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
|
||||
SUBHEADER_FILL = PatternFill(start_color=HEX_SECONDARY.lstrip("#"), end_color=HEX_SECONDARY.lstrip("#"), fill_type="solid")
|
||||
SUBHEADER_FONT = Font(name="Arial", size=10, bold=True, color="FFFFFF")
|
||||
ACCENT_FONT = Font(name="Arial", size=10, bold=True, color=HEX_ACCENT.lstrip("#"))
|
||||
BODY_FONT = Font(name="Arial", size=10, color=HEX_TEXT.lstrip("#"))
|
||||
THIN_BORDER = Border(
|
||||
left=Side(style="thin"),
|
||||
right=Side(style="thin"),
|
||||
top=Side(style="thin"),
|
||||
bottom=Side(style="thin"),
|
||||
)
|
||||
CENTER_ALIGN = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||||
LEFT_ALIGN = Alignment(horizontal="left", vertical="center", wrap_text=True)
|
||||
RIGHT_ALIGN = Alignment(horizontal="right", vertical="center")
|
||||
|
||||
|
||||
def create_branded_workbook(title: str = "D.intelligence") -> Workbook:
|
||||
"""Create an openpyxl Workbook with brand defaults."""
|
||||
wb = Workbook()
|
||||
wb.properties.title = title
|
||||
wb.properties.creator = BRAND_NAME
|
||||
return wb
|
||||
|
||||
|
||||
def style_header_row(ws, row: int = 1, col_start: int = 1, col_end: int = 10) -> None:
|
||||
"""Apply header styling to a row."""
|
||||
for col in range(col_start, col_end + 1):
|
||||
cell = ws.cell(row=row, column=col)
|
||||
cell.fill = HEADER_FILL
|
||||
cell.font = HEADER_FONT
|
||||
cell.alignment = CENTER_ALIGN
|
||||
cell.border = THIN_BORDER
|
||||
|
||||
|
||||
def style_body_cell(cell, align: str = "left") -> None:
|
||||
"""Apply body styling to a cell."""
|
||||
cell.font = BODY_FONT
|
||||
cell.border = THIN_BORDER
|
||||
if align == "center":
|
||||
cell.alignment = CENTER_ALIGN
|
||||
elif align == "right":
|
||||
cell.alignment = RIGHT_ALIGN
|
||||
else:
|
||||
cell.alignment = LEFT_ALIGN
|
||||
|
||||
|
||||
def save_workbook(wb: Workbook, output_path: str | Path) -> Path:
|
||||
"""Save workbook and return the path."""
|
||||
output_path = Path(output_path)
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
wb.save(str(output_path))
|
||||
return output_path
|
||||
Reference in New Issue
Block a user