File: utils.py

package info (click to toggle)
python-moto 5.1.18-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 116,520 kB
  • sloc: python: 636,725; javascript: 181; makefile: 39; sh: 3
file content (36 lines) | stat: -rw-r--r-- 1,206 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import base64
import hashlib
from datetime import datetime
from typing import Any

from moto.utilities.utils import get_partition


def deep_convert_datetime_to_isoformat(obj: Any) -> Any:
    if isinstance(obj, datetime):
        return obj.isoformat()
    elif isinstance(obj, list):
        return [deep_convert_datetime_to_isoformat(x) for x in obj]
    elif isinstance(obj, dict):
        return {k: deep_convert_datetime_to_isoformat(v) for k, v in obj.items()}
    else:
        return obj


def hash_name(name: str) -> str:
    digest = hashlib.md5(name.encode("utf-8")).digest()
    token = base64.urlsafe_b64encode(digest)
    return token.decode("utf-8").rstrip("=")


def generate_package_id(name: str) -> str:
    digest = hashlib.md5(name.encode("utf-8")).digest()
    token = base64.b64encode(digest).decode("utf-8")
    # make token only containing alphanumeric characters
    token = "".join(char for char in token if char.isalnum())
    token = token * (64 // len(token) + 1)
    return token[:64].lower()


def arn_formatter(_type: str, _id: str, account_id: str, region_name: str) -> str:
    return f"arn:{get_partition(region_name)}:panorama:{region_name}:{account_id}:{_type}/{_id}"