142 lines
4.3 KiB
Python
142 lines
4.3 KiB
Python
#!/usr/bin/env python3.9
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
JFinal Kv (Key Value) - Ordered Dictionary Implementation
|
|
"""
|
|
|
|
from .StrKit import StrKit
|
|
from .TypeKit import TypeKit
|
|
|
|
class Kv(dict):
|
|
"""Key Value dictionary with utility methods"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
@staticmethod
|
|
def of(key, value):
|
|
"""Create Kv with initial key-value pair"""
|
|
return Kv().set(key, value)
|
|
|
|
@staticmethod
|
|
def by(key, value):
|
|
"""Create Kv with initial key-value pair (alias of of)"""
|
|
return Kv.of(key, value)
|
|
|
|
@staticmethod
|
|
def create():
|
|
"""Create empty Kv"""
|
|
return Kv()
|
|
|
|
def set(self, key, value):
|
|
"""Set key-value pair and return self for chaining"""
|
|
super().__setitem__(key, value)
|
|
return self
|
|
|
|
def set_if_not_blank(self, key, value):
|
|
"""Set value only if not blank"""
|
|
if StrKit.not_blank(value):
|
|
self.set(key, value)
|
|
return self
|
|
|
|
def set_if_not_null(self, key, value):
|
|
"""Set value only if not None"""
|
|
if value is not None:
|
|
self.set(key, value)
|
|
return self
|
|
|
|
def delete(self, key):
|
|
"""Delete key and return self"""
|
|
super().pop(key, None)
|
|
return self
|
|
|
|
def get_as(self, key, default_value=None):
|
|
"""Get value as specific type"""
|
|
return self.get(key, default_value)
|
|
|
|
def get_str(self, key, default_value=None):
|
|
"""Get value as string"""
|
|
value = self.get(key)
|
|
return str(value) if value is not None else default_value
|
|
|
|
def get_int(self, key, default_value=None):
|
|
"""Get value as integer"""
|
|
return TypeKit.to_int(self.get(key, default_value))
|
|
|
|
def get_long(self, key, default_value=None):
|
|
"""Get value as long integer"""
|
|
return TypeKit.to_long(self.get(key, default_value))
|
|
|
|
def get_big_decimal(self, key, default_value=None):
|
|
"""Get value as BigDecimal"""
|
|
return TypeKit.to_big_decimal(self.get(key, default_value))
|
|
|
|
def get_double(self, key, default_value=None):
|
|
"""Get value as double"""
|
|
return TypeKit.to_double(self.get(key, default_value))
|
|
|
|
def get_float(self, key, default_value=None):
|
|
"""Get value as float"""
|
|
return TypeKit.to_float(self.get(key, default_value))
|
|
|
|
def get_number(self, key, default_value=None):
|
|
"""Get value as Number"""
|
|
return TypeKit.to_number(self.get(key, default_value))
|
|
|
|
def get_boolean(self, key, default_value=None):
|
|
"""Get value as boolean"""
|
|
return TypeKit.to_boolean(self.get(key, default_value))
|
|
|
|
def get_date(self, key, default_value=None):
|
|
"""Get value as Date"""
|
|
return TypeKit.to_date(self.get(key, default_value))
|
|
|
|
def get_local_datetime(self, key, default_value=None):
|
|
"""Get value as LocalDateTime"""
|
|
return TypeKit.to_local_date_time(self.get(key, default_value))
|
|
|
|
def not_null(self, key):
|
|
"""Check if key exists and value is not None"""
|
|
return self.get(key) is not None
|
|
|
|
def is_null(self, key):
|
|
"""Check if key doesn't exist or value is None"""
|
|
return self.get(key) is None
|
|
|
|
def not_blank(self, key):
|
|
"""Check if value is not blank string"""
|
|
return StrKit.not_blank(self.get_str(key))
|
|
|
|
def is_blank(self, key):
|
|
"""Check if value is blank string"""
|
|
return StrKit.is_blank(self.get_str(key))
|
|
|
|
def is_true(self, key):
|
|
"""Check if value is True"""
|
|
value = self.get(key)
|
|
return value is not None and TypeKit.to_boolean(value)
|
|
|
|
def is_false(self, key):
|
|
"""Check if value is False"""
|
|
value = self.get(key)
|
|
return value is not None and not TypeKit.to_boolean(value)
|
|
|
|
def keep(self, *keys):
|
|
"""Keep only specified keys"""
|
|
if keys and len(keys) > 0:
|
|
new_kv = Kv()
|
|
for key in keys:
|
|
if self.contains_key(key):
|
|
new_kv.set(key, self.get(key))
|
|
|
|
self.clear()
|
|
self.update(new_kv)
|
|
else:
|
|
self.clear()
|
|
|
|
return self
|
|
|
|
def to_map(self):
|
|
"""Convert to regular map"""
|
|
return self
|