Skip to content

EnumType

Bases: AbstractType

Source code in library_analyzer/processing/api/model/_types.py
@dataclass
class EnumType(AbstractType):
    values: set[str] = field(default_factory=set)
    full_match: str = ""

    @classmethod
    def from_json(cls, json: Any) -> Optional[EnumType]:
        if json["kind"] == cls.__name__:
            return EnumType(json["values"])
        return None

    @classmethod
    def from_string(cls, string: str) -> Optional[EnumType]:
        def remove_backslash(e: str) -> str:
            e = e.replace(r"\"", '"')
            e = e.replace(r"\'", "'")
            return e

        enum_match = re.search(r"{(.*?)}", string)
        if enum_match:
            quotes = "'\""
            values = set()
            enum_str = enum_match.group(1)
            value = ""
            inside_value = False
            curr_quote = None
            for i, char in enumerate(enum_str):
                if char in quotes and (i == 0 or (i > 0 and enum_str[i - 1] != "\\")):
                    if not inside_value:
                        inside_value = True
                        curr_quote = char
                    elif inside_value:
                        if curr_quote == char:
                            inside_value = False
                            curr_quote = None
                            values.add(remove_backslash(value))
                            value = ""
                        else:
                            value += char
                elif inside_value:
                    value += char

            return EnumType(values, enum_match.group(0))

        return None

    def update(self, enum: EnumType) -> None:
        self.values.update(enum.values)

    def to_json(self) -> dict[str, Any]:
        return {"kind": self.__class__.__name__, "values": self.values}

    def __hash__(self) -> int:
        return hash((frozenset(self.values), self.full_match))

full_match: str = '' class-attribute

values: set[str] = field(default_factory=set) class-attribute

__hash__()

Source code in library_analyzer/processing/api/model/_types.py
def __hash__(self) -> int:
    return hash((frozenset(self.values), self.full_match))

from_json(json) classmethod

Source code in library_analyzer/processing/api/model/_types.py
@classmethod
def from_json(cls, json: Any) -> Optional[EnumType]:
    if json["kind"] == cls.__name__:
        return EnumType(json["values"])
    return None

from_string(string) classmethod

Source code in library_analyzer/processing/api/model/_types.py
@classmethod
def from_string(cls, string: str) -> Optional[EnumType]:
    def remove_backslash(e: str) -> str:
        e = e.replace(r"\"", '"')
        e = e.replace(r"\'", "'")
        return e

    enum_match = re.search(r"{(.*?)}", string)
    if enum_match:
        quotes = "'\""
        values = set()
        enum_str = enum_match.group(1)
        value = ""
        inside_value = False
        curr_quote = None
        for i, char in enumerate(enum_str):
            if char in quotes and (i == 0 or (i > 0 and enum_str[i - 1] != "\\")):
                if not inside_value:
                    inside_value = True
                    curr_quote = char
                elif inside_value:
                    if curr_quote == char:
                        inside_value = False
                        curr_quote = None
                        values.add(remove_backslash(value))
                        value = ""
                    else:
                        value += char
            elif inside_value:
                value += char

        return EnumType(values, enum_match.group(0))

    return None

to_json()

Source code in library_analyzer/processing/api/model/_types.py
def to_json(self) -> dict[str, Any]:
    return {"kind": self.__class__.__name__, "values": self.values}

update(enum)

Source code in library_analyzer/processing/api/model/_types.py
def update(self, enum: EnumType) -> None:
    self.values.update(enum.values)