base¶
Base resource mapper.
Based on the BaseResourceMapper in OPTIMADE Python tools.
        
BaseResourceMapper            (BaseResourceMapper)
        
¶
    Generic Resource Mapper that defines and performs the mapping between objects in the database and the resource objects defined by the specification.
Note
This is a "wrapped" sub-class to make certain methods asynchronous.
Attributes:
| Name | Type | Description | 
|---|---|---|
| ALIASES | Tuple[Tuple[str, str]] | a tuple of aliases between
OPTIMADE field names and the field names in the database ,
e.g.  | 
| LENGTH_ALIASES | Tuple[Tuple[str, str]] | a tuple of aliases between
a field name and another field that defines its length, to be used
when querying, e.g.  | 
| ENTRY_RESOURCE_CLASS | Type[optimade.models.entries.EntryResource] | The entry type that this mapper corresponds to. | 
| PROVIDER_FIELDS | Tuple[str] | a tuple of extra field names that this mapper should support when querying with the database prefix. | 
| TOP_LEVEL_NON_ATTRIBUTES_FIELDS | Set[str] | the set of top-level field names common to all endpoints. | 
| SUPPORTED_PREFIXES | Set[str] | The set of prefixes registered by this mapper. | 
| ALL_ATTRIBUTES | Set[str] | The set of attributes defined across the entry resource class and the server configuration. | 
| ENTRY_RESOURCE_ATTRIBUTES | Dict[str, Any] | A dictionary of attributes and their definitions defined by the schema of the entry resource class. | 
| ENDPOINT | str | The expected endpoint name for this resource, as defined by
the  | 
adeserialize(results)
  
      async
      classmethod
  
¶
    Asynchronous version of the deserialize() class method.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| results | Union[dict, Iterable[dict]] | A list of or a single dictionary, representing an entry-endpoint resource. | required | 
Returns:
| Type | Description | 
|---|---|
| Union[List[EntryResource], EntryResource] | The deserialized list of or single pydantic resource model for the input
 | 
Source code in optimade_gateway/mappers/base.py
          @classmethod
async def adeserialize(
    cls, results: "Union[dict, Iterable[dict]]"
) -> "Union[List[EntryResource], EntryResource]":
    """Asynchronous version of the `deserialize()` class method.
    Parameters:
        results: A list of or a single dictionary, representing an entry-endpoint
            resource.
    Returns:
        The deserialized list of or single pydantic resource model for the input
        `results`.
    """
    return super(BaseResourceMapper, cls).deserialize(results)
map_back(doc)
  
      classmethod
  
¶
    Map properties from MongoDB to OPTIMADE.
Starting from a MongoDB document doc, map the DB fields to the corresponding OPTIMADE fields.
Then, the fields are all added to the top-level field "attributes",
with the exception of other top-level fields, defined in cls.TOP_LEVEL_NON_ATTRIBUTES_FIELDS.
All fields not in cls.TOP_LEVEL_NON_ATTRIBUTES_FIELDS + "attributes" will be removed.
Finally, the type is given the value of the specified cls.ENDPOINT.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| doc | dict | A resource object in MongoDB format. | required | 
Returns:
| Type | Description | 
|---|---|
| dict | A resource object in OPTIMADE format. | 
Source code in optimade_gateway/mappers/base.py
          @classmethod
def map_back(cls, doc: dict) -> dict:
    from optimade.server.routers.utils import BASE_URL_PREFIXES
    if "_id" in doc:
        _id = str(doc.pop("_id"))
        if "id" not in doc:
            doc["id"] = _id
    doc["links"] = {
        "self": AnyUrl(
            url=(
                f"{CONFIG.base_url.strip('/')}{BASE_URL_PREFIXES['major']}"
                f"/{cls.ENDPOINT}/{doc['id']}"
            ),
            scheme=CONFIG.base_url.split("://", maxsplit=1)[0],
            host=CONFIG.base_url.split("://", maxsplit=2)[1].split("/")[0],
        )
    }
    return super().map_back(doc)