Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 5 additions & 10 deletions pretext/project/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,9 @@ def generated_dir_abspath(self) -> Path:
return (self.source_abspath().parent / self.generated_dir()).resolve()

def ensure_asset_directories(self, asset: t.Optional[str] = None) -> None:
if asset is None:
self.external_dir_abspath().mkdir(parents=True, exist_ok=True)
self.generated_dir_abspath().mkdir(parents=True, exist_ok=True)
else:
self.external_dir_abspath().mkdir(parents=True, exist_ok=True)
self.generated_dir_abspath().mkdir(parents=True, exist_ok=True)
if asset is not None:
# make directories for each asset type that would be generated from "asset":
for asset_dir in constants.ASSET_TO_DIR[asset]:
(self.generated_dir_abspath() / asset_dir).mkdir(
Expand Down Expand Up @@ -589,8 +588,6 @@ def generate_assets(
saved_asset_table = utils.clean_asset_table(
self.load_asset_table(), source_asset_table
)
log.debug(f"source_asset_table: {source_asset_table}")
log.debug(f"saved_asset_table: {saved_asset_table}")

# Now we repeatedly pass through the source asset table, and purge any assets that we shouldn't build for any reason.
# Throw away any asset types that were not requested:
Expand All @@ -599,7 +596,6 @@ def generate_assets(
for asset in source_asset_table
if asset in specified_asset_types
}

# If we limit by xml:id, only look for assets below that id in the source tree
if xmlid is not None:
log.debug(f"Limiting asset generation to assets below xml:id={xmlid}.")
Expand All @@ -621,7 +617,7 @@ def generate_assets(
for id in source_asset_table[asset]
if id in id_list
}
log.debug(f"Eligible assets are: {source_asset_table}")
log.debug(f"Eligible assets are: {source_asset_table.keys()}")

# TODO: check which assets can be generated based on the user's system (and executables).

Expand All @@ -638,7 +634,7 @@ def generate_assets(
if saved_asset_table.get(asset, {}).get(id, None)
!= source_asset_table[asset][id]
}
log.debug(f"Assets to be regenerated: {source_asset_table}")
log.debug(f"Assets to be regenerated: {source_asset_table.keys()}")
# TODO: check if there are too many individual assets to make generating individually is worthwhile.
assets_to_generate = {
asset: [id for id in source_asset_table[asset]]
Expand Down Expand Up @@ -670,7 +666,6 @@ def generate_assets(
for asset in assets_to_generate:
asset_formats[asset] = ["all"]

log.debug(f"Assets will be generated in these formats: {asset_formats}.")
# We will keep track of the assets that were successful to update cache at the end.
successful_assets = []
# generate assets by calling appropriate core functions :
Expand Down
33 changes: 0 additions & 33 deletions pretext/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import os
import json
from collections.abc import Generator
from contextlib import contextmanager
from http.server import SimpleHTTPRequestHandler
Expand All @@ -12,11 +11,7 @@
import subprocess
import logging
import logging.handlers
import threading
import psutil
import watchdog.events
import watchdog.observers
import time
import webbrowser
import typing as t
from . import types as pt # PreTeXt types
Expand Down Expand Up @@ -187,34 +182,6 @@ def xml_source_validates_against_schema(xmlfile: Path) -> bool:
return True


def cocalc_project_id() -> t.Optional[str]:
try:
with open("/home/user/.smc/info.json") as f:
return json.load(f)["project_id"]
except Exception:
return None


# watchdog handler for watching changes to source
class HTMLRebuildHandler(watchdog.events.FileSystemEventHandler):
def __init__(self, callback: Callable[[], None]):
self.last_trigger_at = time.time() - 5
self.callback = callback

def on_any_event(self, event: watchdog.events.FileSystemEvent) -> None:
self.last_trigger_at = time.time()

# only run callback once triggers halt for a second
def timeout_callback(handler: "HTMLRebuildHandler") -> None:
time.sleep(1.5)
if time.time() > handler.last_trigger_at + 1:
handler.last_trigger_at = time.time()
log.info("\nChanges to source detected.\n")
handler.callback()

threading.Thread(target=timeout_callback, args=(self,)).start()


# boilerplate to prevent overzealous caching by preview server, and
# avoid port issues
def binding_for_access(access: t.Literal["public", "private"] = "private") -> str:
Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ include = [
python = "^3.8.5"
lxml = "^4.8"
requests = "^2"
watchdog = "^3"
GitPython = "^3"
click = "^8"
pdfCropMargins = "~1.0.9"
Expand Down
3 changes: 0 additions & 3 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,6 @@ def test_generate_interactive(tmp_path: Path, script_runner: ScriptRunner) -> No

def test_view(tmp_path: Path, script_runner: ScriptRunner) -> None:
os.chdir(tmp_path)
port = random.randint(10_000, 65_536)
with pretext_view("-d", ".", "-p", f"{port}"):
assert requests.get(f"http://localhost:{port}/").status_code == 200
assert script_runner.run([PTX_CMD, "-v", "debug", "new", "-d", "1"]).success
os.chdir(Path("1"))
assert script_runner.run([PTX_CMD, "-v", "debug", "build"]).success
Expand Down