fix: import function/module inside inside fucntion

This commit is contained in:
Ejaaz Khan 2025-09-29 23:09:25 +05:30
parent 510669b64c
commit 5f99434f52
6 changed files with 34 additions and 23 deletions

View file

@ -13,7 +13,6 @@ from frappe.coverage import CodeCoverage
from frappe.exceptions import SiteNotSpecifiedError
from frappe.utils import cint, update_progress_bar
from frappe.utils.bench_helper import CliCtxObj
from frappe.utils.print_utils import setup_chromium
EXTRA_ARGS_CTX = {"ignore_unknown_options": True, "allow_extra_args": True}
@ -1030,6 +1029,8 @@ def list_sites(context: CliCtxObj, output_json=False):
@click.command("setup-chrome")
def setup_chrome():
from frappe.utils.print_utils import setup_chromium
setup_chromium()

View file

@ -6,15 +6,11 @@ import io
import mimetypes
import os
import subprocess
import time
from urllib.parse import parse_qs, urlparse
import cssutils
import pdfkit
from frappe.utils.pdf_generator.browser import Browser
from frappe.utils.pdf_generator.pdf_merge import PDFTransformer
pdfkit.source.unicode = str # NOTE: upstream bug; PYTHONOPTIMIZE=1 optimized this away
from bs4 import BeautifulSoup
from packaging.version import Version
@ -136,6 +132,8 @@ def get_pdf(html, options=None, output: PdfWriter | None = None):
def measure_time(func):
import time
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
@ -148,7 +146,9 @@ def measure_time(func):
@measure_time
def get_chrome_pdf(print_format, html, options, output, pdf_generator=None):
from frappe.utils.pdf_generator.browser import Browser
from frappe.utils.pdf_generator.chrome_pdf_generator import ChromePDFGenerator
from frappe.utils.pdf_generator.pdf_merge import PDFTransformer
if pdf_generator != "chrome":
# Use the default pdf generator

View file

@ -3,8 +3,6 @@ from typing import ClassVar
from bs4 import BeautifulSoup
import frappe
from frappe.utils.pdf_generator.cdp_connection import CDPSocketClient
from frappe.utils.pdf_generator.page import Page
from frappe.utils.print_utils import convert_uom, parse_float_and_unit
@ -54,6 +52,8 @@ class Browser:
generator.remove_browser(self.browserID)
def open(self, generator):
from frappe.utils.pdf_generator.cdp_connection import CDPSocketClient
# checking because if we share browser accross request _devtools_url will already be set for subsequent requests.
if not generator._devtools_url:
generator._set_devtools_url()
@ -86,6 +86,8 @@ class Browser:
NOTE: In theory this will make it faster but more importantly use less cpu, ram etc.
"""
from frappe.utils.pdf_generator.page import Page
page = Page(self.session, self.browser_context_id, page_type)
page.is_print_designer = self.is_print_designer

View file

@ -1,9 +1,6 @@
import base64
import time
import urllib
from io import BytesIO
from pypdf import PdfReader
import frappe
@ -75,13 +72,13 @@ class Page:
"domain": domain,
"sameSite": "Strict",
}
result, error = self.send("Network.enable")
_result, error = self.send("Network.enable")
if error:
raise RuntimeError(f"Error enabling network: {error}")
result, error = self.send("Network.setCookie", cookie)
_result, error = self.send("Network.setCookie", cookie)
if error:
raise RuntimeError(f"Error setting cookie: {error}")
result, error = self.send("Network.disable")
_result, error = self.send("Network.disable")
if error:
raise RuntimeError(f"Error disabling network: {error}")
@ -324,6 +321,10 @@ class Page:
return stream_id
def get_pdf_from_stream(self, stream_id, raw=False):
from io import BytesIO
from pypdf import PdfReader
pdf_data = b""
offset = 0
while True:

View file

@ -1,8 +1,3 @@
from io import BytesIO
from pypdf import PdfWriter, Transformation
class PDFTransformer:
def __init__(self, browser):
self.browser = browser
@ -29,6 +24,8 @@ class PDFTransformer:
self.is_footer_dynamic = self.browser.is_footer_dynamic
def transform_pdf(self, output=None):
from pypdf import PdfWriter
header = self.header_pdf
body = self.body_pdf
footer = self.footer_pdf
@ -99,12 +96,16 @@ class PDFTransformer:
return self.get_file_data_from_writer(writer)
def _transform(self, page, page_top, ty):
from pypdf import PdfWriter, Transformation
transform = Transformation().translate(ty=ty)
page.mediabox.upper_right = (page.mediabox.right, page_top)
page.add_transformation(transform)
return page
def get_file_data_from_writer(self, writer_obj):
from io import BytesIO
# https://docs.python.org/3/library/io.html
stream = BytesIO()
writer_obj.write(stream)

View file

@ -1,13 +1,8 @@
import os
import platform
import re
import shutil
import zipfile
from pathlib import Path
from typing import Literal
import click
import requests
import frappe
from frappe.utils.data import cint, cstr
@ -176,6 +171,9 @@ def setup_chromium():
def find_or_download_chromium_executable():
"""Finds the Chromium executable or downloads if not found."""
import platform
from pathlib import Path
bench_path = frappe.utils.get_bench_path()
"""Determine the path to the Chromium executable."""
chromium_dir = os.path.join(bench_path, "chromium")
@ -200,6 +198,12 @@ def find_or_download_chromium_executable():
def download_chromium():
import platform
import shutil
import zipfile
import requests
bench_path = frappe.utils.get_bench_path()
"""Download and extract Chromium for the specific version at the bench level."""
chromium_dir = os.path.join(bench_path, "chromium")
@ -367,6 +371,8 @@ def calculate_platform():
Returns:
str: The detected platform string (e.g., 'linux64', 'mac-arm64', etc.).
"""
import platform
system = platform.system().lower()
arch = platform.machine().lower()