Splices the post save hook into the global Jupyter configuration file
Source code in /home/runner/work/nbautoexport/nbautoexport/nbautoexport/jupyter_config.py
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 | def install_post_save_hook(config_path: Optional[Path] = None):
"""Splices the post save hook into the global Jupyter configuration file"""
if config_path is None:
config_dir = jupyter_config_dir()
config_path = Path(config_dir) / "jupyter_notebook_config.py"
config_path = config_path.expanduser().resolve()
if not config_path.exists():
logger.debug(f"No existing Jupyter configuration detected at {config_path}. Creating...")
config_path.parent.mkdir(exist_ok=True, parents=True)
with config_path.open("w", encoding="utf-8") as fp:
fp.write(post_save_hook_initialize_block)
logger.info("nbautoexport post-save hook installed.")
return
# If config exists, check for existing nbautoexport initialize block and install as appropriate
logger.debug(f"Detected existing Jupyter configuration at {config_path}")
with config_path.open("r", encoding="utf-8") as fp:
config = fp.read()
if block_regex.search(config):
logger.info("Detected existing nbautoexport post-save hook.")
version_match = version_regex.search(config)
if version_match:
existing_version = version_match.group()
logger.debug(f"Existing post-save hook is version {existing_version}")
else:
existing_version = ""
logger.debug("Existing post-save hook predates versioning.")
if existing_version == "" or parse_version(existing_version) < parse_version(__version__):
logger.info(f"Updating nbautoexport post-save hook with version {__version__}...")
with config_path.open("w", encoding="utf-8") as fp:
# Open as w replaces existing file. We're replacing entire config.
escaped_init = post_save_hook_initialize_block.replace(
"\\", r"\\"
) # escape metachars
fp.write(block_regex.sub(escaped_init, config))
else:
logger.info("No changes made.")
return
else:
logger.info("Installing post-save hook.")
with config_path.open("a") as fp:
# Open as a just appends. We append block at the end of existing file.
fp.write("\n" + post_save_hook_initialize_block)
logger.info("nbautoexport post-save hook installed.")
|