set up default config file in 'tzk init'

This commit is contained in:
Soren I. Bjornstad 2021-08-27 11:36:19 -05:00
parent 87046ca4c8
commit 16e4491d44
3 changed files with 122 additions and 53 deletions

View File

@ -46,31 +46,6 @@ class ConfigurationManager:
fail(f"No tzk_config.py found in the current directory. "
f"(Try 'tzk init' if you want to create a new one.)")
#TODO: trash this function
def write_attr(self, attr: str, value: str) -> bool:
"""
Try to add a simple attribute = string value config parameter to the
config file, if it doesn't already exist. More complicated data types
are not supported.
Return:
False if the attribute already has a value.
True if successful.
Raises:
File access errors if the config file is inaccessible.
"""
if hasattr(self.conf_mod, attr):
return False
else:
setattr(self.conf_mod, attr, value)
with open(self.config_path / "tzk_config.py", "a") as f:
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
f.write(f"\n# Added automatically by tzk at {now}\n")
f.write(f'{attr} = "{value}"\n')
return True
def cm(cache=[]):
"""

100
tzk/default_config.py Normal file
View File

@ -0,0 +1,100 @@
# Default tzk config
# <<GENERATION_DETAILS>>
# This config file is live, unrestricted Python.
# You can add your own builders or logic here if necessary.
# tzk's package directory is on the PYTHONPATH when this module is imported,
# so if you want to import a function from, e.g., tzk.util,
# just say 'from tzk.util import whatever'.
#------------------------------------------------------------------------------#
# Imports. Don't remove this or you won't be able to configure builders.
from tzk import builders
# Name of the subfolder containing your wiki data and its tiddlywiki.info file.
wiki_folder = "wiki"
### COMMITTING ####
# Default commit message to use with 'tzk commit'.
# You can always use 'tzk commit -m' to use a different message on the fly.
commit_message = "daily checkpoint"
# Git remote to push changes to when you run 'tzk commit'.
commit_remote = "origin"
# Uncomment if you want to abort 'tzk commit' if you're not on a specific branch.
#commit_require_branch = "master"
### LISTENING ###
# Port to listen on. If you specify 8080 for example, you'll edit your wiki by going to
# http://localhost:8080 in your browser.
listen_port = 8080
# Uncomment if you want to require HTTP basic authentication when serving your wiki.
# **WARNING**: this is NOT secure for use over the open Internet or all but the
# simplest local networks, as the password is sent in the clear. For good
# security, you need to add a reverse proxy on top that secures the connection via SSL.
#listen_username = "my_user"
#listen_password = "my_password"
### BUILD ###
# Filter for tiddlers that should be included in a public export of the wiki.
_public_export_filt = r"""
[is[system]]
[tag[Public]]
-[[$:/plugins/tiddlywiki/tiddlyweb]]
-[[$:/plugins/tiddlywiki/filesystem]]
-[prefix[$:/temp]]
-[prefix[$:/state]]
-[prefix[$:/sib/StorySaver/saved]]
-[prefix[$:/sib/checkify/]]
-[[$:/config/zettelkasten/Build/KillPhrases]]
"""
# Each "product" is a different deliverable or target. A product can be built
# by running 'tzk build PRODUCT'. You can include any number of products,
# each of which can use any number of "builders", micro-build steps that
# perform a small part of the build. The configured builders are run in sequence.
#
# See the "Builders" section of the tzk documentation
# for details on the available builders and their parameters.
#
# If you want to do something that's not covered by the existing builders,
# you can write your own, or you can run arbitrary shell commands
# using a 'builders.shell("my shell command here"),' builder.
products = {
# The default configuration contains a single product for building a public wiki.
'public': [
builders.new_output_folder(),
builders.export_public_tiddlers(_public_export_filt),
builders.replace_private_people(),
builders.set_tiddler_values({
'$__config_sib_CurrentEditionPublicity.tid': 'public',
'$__config_sib_IsPublicEdition.tid': 'false',
'$__config_DefaultSidebarTab.tid': '$:/sib/SideBar/Explore',
'$__DefaultTiddlers.tid': 'PublicHomepage',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_close-all.tid': 'show',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_control-panel.tid': 'hide',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_home.tid': 'show',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_more-page-actions.tid': 'show',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_new-tiddler.tid': 'hide',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_permaview.tid': 'show',
'$__config_PageControlButtons_Visibility_$__core_ui_Buttons_tag-manager.tid': 'hide',
'$__config_PageControlButtons_Visibility_$__sib_Buttons_NewSource.tid': 'hide',
'$__config_PageControlButtons_Visibility_$__sib_Buttons_ReadingInbox.tid': 'hide',
'$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_close-others.tid': 'show',
'$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_edit.tid': 'hide',
'$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_info.tid': 'hide',
'$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_permalink.tid': 'show',
'$__config_ViewToolbarButtons_Visibility_$__sib_Buttons_CopyPublicZettelkastenLink.tid': 'hide',
'$__config_ViewToolbarButtons_Visibility_DoCopyTitleReference.tid': 'hide',
}),
builders.check_for_kill_phrases(),
builders.save_attachments_externally(),
builders.compile_html_file(externalize_attachments=True),
],
}

View File

@ -1,3 +1,4 @@
import datetime
import functools
import json
import os
@ -15,9 +16,11 @@ from tzk.util import pushd
def _npm_bin() -> str:
return subprocess.check_output(("npm", "bin"), text=True).strip()
def _tw_path() -> str:
return _npm_bin() + "/tiddlywiki"
@functools.lru_cache(1)
def _whoami() -> str:
"Try to guess the user's name."
@ -51,12 +54,26 @@ def exec(args: Sequence[Sequence[str]], base_wiki_folder: str = None) -> int:
return subprocess.call(call_args)
def _init_tzk_config() -> None:
print("tzk: Creating new tzk_config.py...")
with open(Path(__file__).parent / "default_config.py") as f:
default_config = f.read()
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
generation_details = f"Created automatically by 'tzk init' at {now}."
default_config = default_config.replace('<<GENERATION_DETAILS>>',
generation_details)
with open("tzk_config.py", "w") as f:
f.write(default_config)
def _init_npm(wiki_name: str, tw_version_spec: str, author: str) -> None:
"""
Create a package.json file for this repository, requiring TiddlyWiki
at the specified version, and install the npm dependencies.
"""
print("tzk: Creating package.json...")
print("tzk: Creating new package.json...")
PACKAGE_JSON = dedent("""
{
"name": "%(wiki_name)s",
@ -91,26 +108,6 @@ def _init_tw(wiki_name: str) -> None:
subprocess.check_call((_tw_path(), "--init"))
def _save_wikifolder_to_config(wiki_name: str) -> bool:
"""
Set the wiki_folder config option to the wiki_name we initialized with,
if it's not already set in the config.
Return True if the option ended set to wiki_name, False otherwise.
"""
print("tzk: Writing new wiki folder to config file...")
if not config.cm().write_attr("wiki_folder", wiki_name):
if config.cm().wiki_folder == wiki_name:
print("tzk: (Looks like it was already there.)")
else:
print(f"tzk: WARNING: The wiki_folder option in your config appears "
f"to be set to '{config.cm().wiki_folder}', rather than the wiki folder "
f"you're initializing, {wiki_name}. Please check your config file "
"and update this option if necessary.")
return False
return True
def _add_filesystem_plugins(wiki_name: str) -> None:
"""
Add the "tiddlywiki/filesystem" and "tiddlywiki/tiddlyweb" plugins
@ -159,20 +156,17 @@ def install(wiki_name: str, tw_version_spec: str, author: Optional[str]):
Install TiddlyWiki on Node.js in the current directory and set up a new wiki.
"""
# assert: caller has checked npm and git are installed
warnings = False
if author is None:
author = _whoami()
_init_tzk_config()
_init_npm(wiki_name, tw_version_spec, author)
_init_tw(wiki_name)
#warnings |= not _save_wikifolder_to_config(wiki_name) ## TODO: now write entire config
_add_filesystem_plugins(wiki_name)
_init_gitignore()
_initial_commit()
if warnings:
print("tzk: Initialization completed with warnings. Read the output and "
"make any changes required, then run 'tzk listen' to start the server.")
else:
print("tzk: Initialized successfully. Run 'tzk listen' to start the server.")
print("tzk: Initialized successfully. "
"Review the 'tzk_config.py' in a text editor and make any changes desired, "
"then run 'tzk listen' to start the server.")