41 lines
828 B
Python
41 lines
828 B
Python
import decimal
|
|
import json
|
|
import math
|
|
|
|
import dictdiffer
|
|
from arnparse import arnparse
|
|
|
|
|
|
def table_from_arn(arn: str) -> str:
|
|
arn_ = arnparse(arn)
|
|
return arn_.resource.split('/')[0]
|
|
|
|
|
|
def diff(first: dict, second: dict) -> list[str]:
|
|
result = dictdiffer.diff(first, second)
|
|
changed = []
|
|
|
|
for record in result:
|
|
type_, path, _ = record
|
|
if type_ == 'change':
|
|
changed.append(path)
|
|
|
|
return changed
|
|
|
|
|
|
class JSONEncoder(json.JSONEncoder):
|
|
def default(self, o):
|
|
if isinstance(o, decimal.Decimal):
|
|
if o.is_nan():
|
|
return math.nan
|
|
|
|
if o % 1 != 0:
|
|
return float(o.quantize(decimal.Decimal('0.00')))
|
|
|
|
return int(o)
|
|
|
|
if isinstance(o, set):
|
|
return list(o)
|
|
|
|
return super().default(o)
|