Skip to content

Commit

Permalink
fix(fonts): Relocate psd-tools font test outside main app scope
Browse files Browse the repository at this point in the history
  • Loading branch information
Investigamer committed Aug 14, 2023
1 parent b0a3e7d commit 905592d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 21 deletions.
24 changes: 18 additions & 6 deletions src/tests/utility.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from typing import Optional, Union
from _ctypes import COMError
from os import path as osp
from pprint import pprint
import warnings
import logging
import json
Expand All @@ -15,21 +14,20 @@
# os.chdir(os.path.abspath(os.path.join(os.getcwd(), '..', '..')))

# Third Party Imports
from psd_tools import PSDImage
from photoshop.api._artlayer import ArtLayer
from photoshop.api._layerSet import LayerSet
from photoshop.api import (
ActionDescriptor,
ActionReference,
ElementPlacement,
ActionList,
DialogModes
)

# Local Imports
from src.helpers.layers import getLayer, getLayerSet, merge_layers, select_layer_bounds
from src.helpers.text import get_text_scale_factor, get_text_key, apply_text_key
from src.helpers.document import points_to_pixels
from src.utils.fonts import get_fonts_from_psd
from src.utils.objects import PhotoshopHandler
from src.helpers.masks import copy_layer_mask
from src.helpers import get_layer_dimensions, get_color
Expand Down Expand Up @@ -478,6 +476,20 @@ def create_color_shape(layer: ArtLayer, color: list) -> ArtLayer:

def log_all_template_fonts() -> dict:
"""Create a log of every font found for each PSD template."""

def _get_fonts_from_psd(doc_path: str) -> set[str]:
"""
Get a set of every font found in a given Photoshop document.
@param doc_path: Path to the Photoshop document.
@return: Set of font names found in the document.
"""
psd, fonts = PSDImage.open(doc_path), set()
for layer in [n for n in psd.descendants() if n.kind == 'type']:
for style in layer.engine_dict['StyleRun']['RunArray']:
font_key = style['StyleSheet']['StyleSheetData']['Font']
fonts.add(layer.resource_dict['FontSet'][font_key]['Name'])
return fonts

docs = {
temp['template_path']: f"{temp['plugin_name'] or 'BASE'} - {temp['layout']} - {temp['name']}"
for card_type, templates in get_templates().items()
Expand All @@ -496,11 +508,11 @@ def log_all_template_fonts() -> dict:
current += 1

# Open document, get fonts, close document
doc_fonts[temp_name] = get_fonts_from_psd(psd_file)
doc_fonts[temp_name] = _get_fonts_from_psd(psd_file)

# Create master list
for doc, fonts in doc_fonts.items():
for f in fonts:
for doc, font_list in doc_fonts.items():
for f in font_list:
master.setdefault(str(f), []).append(doc)

# Log a sorted master list
Expand Down
15 changes: 0 additions & 15 deletions src/utils/fonts.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
# Third Party Imports
from photoshop.api.enumerations import LayerKind
from packaging.version import parse
from psd_tools import PSDImage
from fontTools import ttLib

# Local Imports
Expand Down Expand Up @@ -135,20 +134,6 @@ def get_document_fonts(
return fonts


def get_fonts_from_psd(doc_path: str) -> set[str]:
"""
Get a set of every font found in a given Photoshop document.
@param doc_path: Path to the Photoshop document.
@return: Set of font names found in the document.
"""
psd, fonts = PSDImage.open(doc_path), set()
for layer in [n for n in psd.descendants() if n.kind == 'type']:
for style in layer.engine_dict['StyleRun']['RunArray']:
font_key = style['StyleSheet']['StyleSheetData']['Font']
fonts.add(layer.resource_dict['FontSet'][font_key]['Name'])
return fonts


"""
FONT FILE UTILITIES
"""
Expand Down

0 comments on commit 905592d

Please sign in to comment.