aboutsummaryrefslogtreecommitdiffstats
path: root/nikola/plugins/command_new_post.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/command_new_post.py')
-rw-r--r--nikola/plugins/command_new_post.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/nikola/plugins/command_new_post.py b/nikola/plugins/command_new_post.py
new file mode 100644
index 0000000..574df5f
--- /dev/null
+++ b/nikola/plugins/command_new_post.py
@@ -0,0 +1,100 @@
+import codecs
+import datetime
+from optparse import OptionParser
+import os
+import sys
+
+from nikola.plugin_categories import Command
+from nikola import utils
+
+
+class CommandNewPost(Command):
+ """Create a new post."""
+
+ name = "new_post"
+
+ def run(self, *args):
+ """Create a new post."""
+ parser = OptionParser(usage="nikola %s [options]" % self.name)
+ parser.add_option('-p', '--page', dest='is_post',
+ action='store_false',
+ help='Create a page instead of a blog post.')
+ parser.add_option('-t', '--title', dest='title',
+ help='Title for the page/post.', default=None)
+ parser.add_option('--tags', dest='tags',
+ help='Comma-separated tags for the page/post.',
+ default='')
+ parser.add_option('-1', dest='onefile',
+ action='store_true',
+ help='Create post with embedded metadata (single file format).',
+ default=self.site.config.get('ONE_FILE_POSTS', True))
+ parser.add_option('-f', '--format',
+ dest='post_format',
+ default='rest',
+ help='Format for post (rest or markdown)')
+ (options, args) = parser.parse_args(list(args))
+
+ is_post = options.is_post
+ title = options.title
+ tags = options.tags
+ onefile = options.onefile
+ post_format = options.post_format
+
+ # Guess where we should put this
+ for path, _, _, use_in_rss in self.site.config['post_pages']:
+ if use_in_rss == is_post:
+ break
+ else:
+ path = self.site.config['post_pages'][0][0]
+
+ print "Creating New Post"
+ print "-----------------\n"
+ if title is None:
+ title = raw_input("Enter title: ").decode(sys.stdin.encoding)
+ else:
+ print "Title: ", title
+ slug = utils.slugify(title)
+ date = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
+ data = [
+ title,
+ slug,
+ date,
+ tags
+ ]
+ output_path = os.path.dirname(path)
+ meta_path = os.path.join(output_path, slug + ".meta")
+ pattern = os.path.basename(path)
+ if pattern.startswith("*."):
+ suffix = pattern[1:]
+ else:
+ suffix = ".txt"
+ txt_path = os.path.join(output_path, slug + suffix)
+
+ if (not onefile and os.path.isfile(meta_path)) or \
+ os.path.isfile(txt_path):
+ print "The title already exists!"
+ exit()
+
+ if onefile:
+ if post_format not in ('rest', 'markdown'):
+ print "ERROR: Unknown post format %s" % post_format
+ return
+ with codecs.open(txt_path, "wb+", "utf8") as fd:
+ if post_format == 'markdown':
+ fd.write('<!-- \n')
+ fd.write('.. title: %s\n' % title)
+ fd.write('.. slug: %s\n' % slug)
+ fd.write('.. date: %s\n' % date)
+ fd.write('.. tags: %s\n' % tags)
+ fd.write('.. link: \n')
+ fd.write('.. description: \n')
+ if post_format == 'markdown':
+ fd.write('-->\n')
+ fd.write(u"Write your post here.")
+ else:
+ with codecs.open(meta_path, "wb+", "utf8") as fd:
+ fd.write(data)
+ with codecs.open(txt_path, "wb+", "utf8") as fd:
+ fd.write(u"Write your post here.")
+ print "Your post's metadata is at: ", meta_path
+ print "Your post's text is at: ", txt_path