123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- """Import operations."""
- from __future__ import annotations
- from collections import defaultdict
- from typing import Dict, List, Optional
- from reflex.base import Base
- def merge_imports(*imports) -> ImportDict:
- """Merge multiple import dicts together.
- Args:
- *imports: The list of import dicts to merge.
- Returns:
- The merged import dicts.
- """
- all_imports = defaultdict(list)
- for import_dict in imports:
- for lib, fields in import_dict.items():
- all_imports[lib].extend(fields)
- return all_imports
- def collapse_imports(imports: ImportDict) -> ImportDict:
- """Remove all duplicate ImportVar within an ImportDict.
- Args:
- imports: The import dict to collapse.
- Returns:
- The collapsed import dict.
- """
- return {lib: list(set(import_vars)) for lib, import_vars in imports.items()}
- class ImportVar(Base):
- """An import var."""
- # The name of the import tag.
- tag: Optional[str]
- # whether the import is default or named.
- is_default: Optional[bool] = False
- # The tag alias.
- alias: Optional[str] = None
- # Whether this import need to install the associated lib
- install: Optional[bool] = True
- # whether this import should be rendered or not
- render: Optional[bool] = True
- @property
- def name(self) -> str:
- """The name of the import.
- Returns:
- The name(tag name with alias) of tag.
- """
- if self.alias:
- return self.alias if self.is_default else " as ".join([self.tag, self.alias]) # type: ignore
- else:
- return self.tag or ""
- def __hash__(self) -> int:
- """Define a hash function for the import var.
- Returns:
- The hash of the var.
- """
- return hash((self.tag, self.is_default, self.alias, self.install, self.render))
- ImportDict = Dict[str, List[ImportVar]]
|