Source code for nefelibata.cli.new

# -*- coding: utf-8 -*-
import logging
import os
from pathlib import Path
from subprocess import call

from nefelibata.utils import get_config
from nefelibata.utils import sanitize

__author__ = "Beto Dealmeida"
__copyright__ = "Beto Dealmeida"
__license__ = "mit"

_logger = logging.getLogger(__name__)


[docs]def run(root: Path, directory: str, type: str = "post") -> None: """Create a new post and open editor.""" _logger.info("Creating new directory") title = directory directory = sanitize(directory) target = root / "posts" / directory if target.exists(): raise IOError("Directory already exists!") target.mkdir() os.chdir(target) _logger.info("Adding resource files") resources = ["css", "js", "img"] for resource in resources: (target / resource).mkdir() headers = { "subject": title, "summary": "", "keywords": "", } if type != "post": config = get_config(root) try: extra_headers = config["templates"][type] except KeyError: raise Exception(f"Invalid post type: {type}") headers["type"] = type headers.update({f"{type}-{key}": "" for key in extra_headers}) new_post = "\n".join(f"{key}: {value}" for key, value in headers.items()) + "\n\n\n" filepath = target / "index.mkd" with open(filepath, "w") as fp: fp.write(new_post) editor = os.environ.get("EDITOR") if not editor: _logger.info("No EDITOR found, exiting") return call([editor, filepath])