diff --git a/aerospike_helpers/expressions/string.py b/aerospike_helpers/expressions/string.py new file mode 100644 index 0000000000..6ddad84128 --- /dev/null +++ b/aerospike_helpers/expressions/string.py @@ -0,0 +1,249 @@ +# import aerospike +from aerospike_helpers.expressions.resources import _BaseExpr +from aerospike_helpers.operations.string_operations import RegexFlags, StringPolicy + + +class StrLen(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class SubStr(_BaseExpr): + def __init__(self, start: int, length: int | None, src: str): + """ + """ + pass + + +class CharAt(_BaseExpr): + def __init__(self, index: int, src: str): + """ + """ + pass + + +class Find(_BaseExpr): + def __init__(self, needle: str, occurrence: int, src: str): + """ + """ + pass + + +class Contains(_BaseExpr): + def __init__(self, needle: str, src: str): + """ + """ + pass + + +class StartsWith(_BaseExpr): + def __init__(self, prefix: str, src: str): + """ + """ + pass + + +class EndsWith(_BaseExpr): + def __init__(self, suffix: str, src: str): + """ + """ + pass + + +class ToInteger(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class ToDouble(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class ByteLength(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class IsNumeric(_BaseExpr): + def __init__(self, numeric_type: int, src: str): + """ + """ + pass + + +class ToUpper(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class ToLower(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class ToBlob(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class Split(_BaseExpr): + def __init__(self, separator: str, src: str): + """ + """ + pass + + +class Base64Decode(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass + + +class RegexCompare(_BaseExpr): + # TODO: set default flags + def __init__(self, pattern: str, regex_flags: RegexFlags): + """ + """ + pass + + +class Insert(_BaseExpr): + def __init__(self, policy: StringPolicy, index: int, value: str, src: str): + """ + """ + pass + + +class Overwrite(_BaseExpr): + def __init__(self, policy: StringPolicy, index: int, value: str, src: str): + """ + """ + pass + + +class Concat(_BaseExpr): + def __init__(self, policy: StringPolicy, values: list[str], src: str): + """ + """ + pass + + +class Snip(_BaseExpr): + def __init__(self, policy: StringPolicy, start: int, end: int | None, src: str): + """ + """ + pass + + +class Replace(_BaseExpr): + def __init__(self, policy: StringPolicy, needle: str, replacement: str, src: str): + """ + """ + pass + + +class ReplaceAll(_BaseExpr): + def __init__(self, policy: StringPolicy, needle: str, replacement: str, src: str): + """ + """ + pass + + +class Upper(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class Lower(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class CaseFold(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class NormalizeNFC(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class TrimStart(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class TrimEnd(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class Trim(_BaseExpr): + def __init__(self, policy: StringPolicy, src: str): + """ + """ + pass + + +class PadStart(_BaseExpr): + def __init__(self, policy: StringPolicy, target_length: int, pad_string: str, src: str): + """ + """ + pass + + +class PadEnd(_BaseExpr): + def __init__(self, policy: StringPolicy, target_length: int, pad_string: str, src: str): + """ + """ + pass + + +class Repeat(_BaseExpr): + def __init__(self, policy: StringPolicy, count: int, src: str): + """ + """ + pass + + +class RegexReplace(_BaseExpr): + def __init__(self, policy: StringPolicy, pattern: str, replacement: int, regex_flags: RegexFlags, src: str): + """ + """ + pass + + +class ToString(_BaseExpr): + def __init__(self, src: str): + """ + """ + pass diff --git a/aerospike_helpers/operations/string_operations.py b/aerospike_helpers/operations/string_operations.py new file mode 100644 index 0000000000..97e556f074 --- /dev/null +++ b/aerospike_helpers/operations/string_operations.py @@ -0,0 +1,177 @@ +from enum import IntEnum + + +def strlen(bin_name: str, ctx: list | None = None): + pass + + +def substr(bin_name: str, start: int, length: int | None = None, ctx: list | None = None): + pass + + +def char_at(bin_name: str, index: int, ctx: list | None = None): + pass + + +def find(bin_name: str, needle: int, occurrence: int | None = None, ctx: list | None = None): + pass + + +def contains(bin_name: str, index: int, ctx: list | None = None): + pass + + +def starts_with(bin_name: str, prefix: str, ctx: list | None = None): + pass + + +def ends_with(bin_name: str, suffix: str, ctx: list | None = None): + pass + + +def to_integer(bin_name: str, ctx: list | None = None): + pass + + +def to_double(bin_name: str, ctx: list | None = None): + pass + + +def byte_length(bin_name: str, ctx: list | None = None): + pass + + +def is_numeric(bin_name: str, numeric_type: int | None = None, ctx: list | None = None): + pass + + +def is_upper(bin_name: str, ctx: list | None = None): + pass + + +def is_lower(bin_name: str, ctx: list | None = None): + pass + + +def to_blob(bin_name: str, ctx: list | None = None): + pass + + +def split(bin_name: str, separator: str, ctx: list | None = None): + pass + + +def base64_decode(bin_name: str, ctx: list | None = None): + pass + +# TODO: use enum for regex flags + + +def regex_compare(bin_name: str, pattern: str, regex_flags: int, ctx: list | None = None): + pass + + +class WriteFlags(IntEnum): + DEFAULT = 0 + NO_FAIL = 4 + + +class StringPolicy: + def __init__(self, write_flags: WriteFlags): + self.write_flags = write_flags + + +class RegexFlags(IntEnum): + DEFAULT = 0 + CASE_INSENSITIVE = 1 + MULTILINE = 2 + DOTALL = 4 + UNIX_LINES = 8 + GLOBAL = 16 + + +class NumericType(IntEnum): + ANY = 0 + INT = 1 + FLOAT = 2 + + +def insert(policy: StringPolicy, bin_name: str, index: int, value: str, ctx: list | None = None): + pass + + +def overwrite(policy: StringPolicy, bin_name: str, index: int, value: str, ctx: list | None = None): + pass + + +def concat(policy: StringPolicy, bin_name: str, value: str | list[str], ctx: list | None = None): + pass + + +def snip(policy: StringPolicy, bin_name: str, start: int, end: int | None = None, ctx: list | None = None): + pass + + +def replace(policy: StringPolicy, bin_name: str, needle: str, replacement: str, ctx: list | None = None): + pass + + +def replace_all(policy: StringPolicy, bin_name: str, needle: str, replacement: str, ctx: list | None = None): + pass + + +def upper(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def lower(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def casefold(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def normalize_nfc(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def trim_start(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def trim_end(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def trim(policy: StringPolicy, bin_name: str, ctx: list | None = None): + pass + + +def pad_start(policy: StringPolicy, bin_name: str, target_length: int, pad_string: str, ctx: list | None = None): + pass + + +def pad_end(policy: StringPolicy, bin_name: str, target_length: int, pad_string: str, ctx: list | None = None): + pass + + +def repeat(policy: StringPolicy, bin_name: str, count: int, ctx: list | None = None): + pass + +# TODO: regex flags enum + + +def regex_replace( + policy: StringPolicy, + bin_name: str, + pattern: str, + replacement: str, + regex_flags: int, + ctx: list | None = None +): + pass + + +def to_string(bin_name: str): + pass