You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.4 KiB
93 lines
2.4 KiB
#!/usr/bin/env python
|
|
# coding=utf-8
|
|
#
|
|
# Copyright © Splunk, Inc. All Rights Reserved.
|
|
|
|
# pylint: disable=unused-import
|
|
from builtins import next
|
|
from os import path
|
|
from json.encoder import encode_basestring as encode_string
|
|
|
|
from . internal import string
|
|
|
|
|
|
def encode_filename(filename):
|
|
""" Normalizes and double-quotes a filename
|
|
|
|
Quotes within `filename` are backslash-escaped unless the system path separator is a backslash. In this case
|
|
double-quotes within `filename` are converted to a sequence of two double-quotes.
|
|
|
|
:param filename: A filename
|
|
:type filename: string
|
|
|
|
:return: A quoted filename
|
|
:rtype: string
|
|
|
|
"""
|
|
return '"' + path.normpath(string(filename)).replace('"', '""' if path.sep == '\\' else r'\"') + '"'
|
|
|
|
|
|
def encode_series(series, coordinator='and'):
|
|
""" Joins two or more items in a series
|
|
|
|
A comma separates items in the series, including the final item preceded by `coordinator` which should be a
|
|
coordinating conjunction, typically :const:`'and'`, :const:`'or'`, or :const:`'nor'`.
|
|
|
|
:param series: An object that iterates over items in a series.
|
|
:type series: :type:`collections.abc.Iterable`
|
|
|
|
:param coordinator: a coordinating conjunction, typically :const:`'and'`, `'or', or :const:``nor``. The default
|
|
value is :const:`'and'`.
|
|
:type coordinator: :type:`string`
|
|
|
|
:return: A string representing the items in a series.
|
|
:rtype: :type:`string`
|
|
|
|
"""
|
|
|
|
def items():
|
|
iterator = iter(series)
|
|
|
|
try:
|
|
item = next(iterator)
|
|
except StopIteration:
|
|
return
|
|
|
|
yield string(item)
|
|
|
|
try:
|
|
item = next(iterator)
|
|
except StopIteration:
|
|
return
|
|
|
|
previous_item = item
|
|
count = 2
|
|
|
|
for count, item in enumerate(iterator, 3):
|
|
yield ', '
|
|
yield string(previous_item)
|
|
previous_item = item
|
|
|
|
yield ' ' if count == 2 else ', '
|
|
yield coordinator
|
|
yield ' '
|
|
yield string(item)
|
|
|
|
return ''.join(items())
|
|
|
|
|
|
def escape_non_alphanumeric_chars(pattern):
|
|
"""
|
|
Escape all non-alphanumeric characters in pattern
|
|
:param pattern input string
|
|
:return escaped input string
|
|
"""
|
|
input = list(pattern)
|
|
for i, char in enumerate(pattern):
|
|
if not char.isalnum():
|
|
if char == "\000":
|
|
input[i] = "\\000"
|
|
else:
|
|
input[i] = "\\" + char
|
|
return pattern[:0].join(input)
|