summaryrefslogtreecommitdiff
path: root/slugify/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'slugify/__main__.py')
-rw-r--r--slugify/__main__.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/slugify/__main__.py b/slugify/__main__.py
new file mode 100644
index 0000000..a11989b
--- /dev/null
+++ b/slugify/__main__.py
@@ -0,0 +1,93 @@
+from __future__ import print_function, absolute_import
+import argparse
+import sys
+
+from .slugify import slugify, DEFAULT_SEPARATOR
+
+
+def parse_args(argv):
+ parser = argparse.ArgumentParser(description="Sluggify string")
+
+ input_group = parser.add_argument_group(description="Input")
+ input_group.add_argument("input_string", nargs='*',
+ help='Text to slugify')
+ input_group.add_argument("--stdin", action='store_true',
+ help="Take the text from STDIN")
+
+ parser.add_argument("--no-entities", action='store_false', dest='entities', default=True,
+ help="Do not convert HTML entities to unicode")
+ parser.add_argument("--no-decimal", action='store_false', dest='decimal', default=True,
+ help="Do not convert HTML decimal to unicode")
+ parser.add_argument("--no-hexadecimal", action='store_false', dest='hexadecimal', default=True,
+ help="Do not convert HTML hexadecimal to unicode")
+ parser.add_argument("--max-length", type=int, default=0,
+ help="Output string length, 0 for no limit")
+ parser.add_argument("--word-boundary", action='store_true', default=False,
+ help="Truncate to complete word even if length ends up shorter than --max_length")
+ parser.add_argument("--save-order", action='store_true', default=False,
+ help="When set and --max_length > 0 return whole words in the initial order")
+ parser.add_argument("--separator", type=str, default=DEFAULT_SEPARATOR,
+ help="Separator between words. By default " + DEFAULT_SEPARATOR)
+ parser.add_argument("--stopwords", nargs='+',
+ help="Words to discount")
+ parser.add_argument("--regex-pattern",
+ help="Python regex pattern for allowed characters")
+ parser.add_argument("--no-lowercase", action='store_false', dest='lowercase', default=True,
+ help="Activate case sensitivity")
+ parser.add_argument("--replacements", nargs='+',
+ help="""Additional replacement rules e.g. "|->or", "%%->percent".""")
+
+ args = parser.parse_args(argv[1:])
+
+ if args.input_string and args.stdin:
+ parser.error("Input strings and --stdin cannot work together")
+
+ if args.replacements:
+ def split_check(repl):
+ SEP = '->'
+ if SEP not in repl:
+ parser.error("Replacements must be of the form: ORIGINAL{SEP}REPLACED".format(SEP=SEP))
+ return repl.split(SEP, 1)
+ args.replacements = [split_check(repl) for repl in args.replacements]
+
+ if args.input_string:
+ args.input_string = " ".join(args.input_string)
+ elif args.stdin:
+ args.input_string = sys.stdin.read()
+
+ if not args.input_string:
+ args.input_string = ''
+
+ return args
+
+
+def slugify_params(args):
+ return dict(
+ text=args.input_string,
+ entities=args.entities,
+ decimal=args.decimal,
+ hexadecimal=args.hexadecimal,
+ max_length=args.max_length,
+ word_boundary=args.word_boundary,
+ save_order=args.save_order,
+ separator=args.separator,
+ stopwords=args.stopwords,
+ lowercase=args.lowercase,
+ replacements=args.replacements
+ )
+
+
+def main(argv=None): # pragma: no cover
+ """ Run this program """
+ if argv is None:
+ argv = sys.argv
+ args = parse_args(argv)
+ params = slugify_params(args)
+ try:
+ print(slugify(**params))
+ except KeyboardInterrupt:
+ sys.exit(-1)
+
+
+if __name__ == '__main__': # pragma: no cover
+ main()