Source code for geobox.log

from typing import Optional, Dict, List, Union, TYPE_CHECKING

from .base import Base

if TYPE_CHECKING:
    from . import GeoboxClient
    from .user import User


[docs] class Log(Base): BASE_ENDPOINT = 'logs/'
[docs] def __init__(self, api: 'GeoboxClient', log_id: int, data: Optional[Dict] = {}): """ Constructs all the necessary attributes for the Log object. Args: api (GeoboxClient): The GeoboxClient instance for making requests. log_id (int): The id of the log. data (Dict, optional): The data of the log. """ super().__init__(api, data=data) self.log_id = log_id self.endpoint = f"{self.BASE_ENDPOINT}{self.log_id}"
[docs] def __repr__(self) -> str: """ Return a string representation of the Log object. Returns: str: A string representation of the Log object. """ return f"Log(id={self.log_id}, activity_type={self.activity_type})"
[docs] @classmethod def get_logs(cls, api: 'GeoboxClient', **kwargs) -> List['Log']: """ Get a list of Logs Args: api (GeoboxClient): The GeoboxClient instance for making requests. Keyword Args: search (str): search term for keyword-based searching among all textual fields order_by (str): comma separated list of fields for sorting results [field1 A|D, field2 A|D, …]. e.g. name A, type D. NOTE: "A" denotes ascending order and "D" denotes descending order. skip (int): Number of items to skip. default is 0. limit (int): Number of items to return. default is 10. user_id (int): Specific user. Privileges required. from_date (datetime): datetime object in this format: "%Y-%m-%dT%H:%M:%S.%f". to_date (datetime): datetime object in this format: "%Y-%m-%dT%H:%M:%S.%f". user_identity (str): the user identity in this format: username - firstname lastname - email . activity_type (str): the user activity type. Returns: List[Log]: a list of logs Example: >>> from geobox import GeoboxClient >>> from geopox.log import Log >>> client = GeoboxClient() >>> logs = Log.get_logs(client) or >>> logs = client.get_logs() """ params = { 'search': kwargs.get('search'), 'order_by': kwargs.get('order_by'), 'skip': kwargs.get('skip'), 'limit': kwargs.get('limit'), 'user_id': kwargs.get('user_id'), 'from_date': kwargs.get('from_date').strftime("%Y-%m-%dT%H:%M:%S.%f") if kwargs.get('from_date') else None, 'to_date': kwargs.get('to_date').strftime("%Y-%m-%dT%H:%M:%S.%f") if kwargs.get('to_date') else None, 'user_identity': kwargs.get('user_identity'), 'activity_type': kwargs.get('activity_type') } return super()._get_list(api, cls.BASE_ENDPOINT, params, factory_func=lambda api, item: Log(api, item['id'], item))
[docs] def delete(self) -> None: """ Delete a log (privileges required) Returns: None Example: >>> from geobox import GeoboxClient >>> from geopox.log import Log >>> client = GeoboxClient() >>> log = Log.get_logs(client)[0] >>> log.delete() """ super()._delete(self.endpoint) self.log_id = None
@property def user(self) -> Union['User', None]: """ Get the owner user for the log Returns: User | None: if the log has owner user Example: >>> from geobox import GeoboxClient >>> from geopox.log import Log >>> client = GeoboxClient() >>> log = Log.get_logs(client)[0] >>> log.user """ return self.api.get_user(self.owner_id)