Source code for censys.asm.assets
"""
Interact with the Censys Assets API.
"""
from typing import Generator, Optional
from censys.asm.api import CensysAsmAPI
[docs]class Assets(CensysAsmAPI):
"""
Assets API class
"""
def __init__(self, asset_type, api_key: Optional[str] = None, **kwargs):
CensysAsmAPI.__init__(self, api_key, **kwargs)
self.base_path = f"assets/{asset_type}"
[docs] def get_assets(
self, page_number: int = 1, page_size: Optional[int] = None
) -> Generator[dict, None, None]:
"""
Requests assets data.
Args:
page_number (int, optional): Page number to begin at when searching.
page_size (int, optional): Page size for retrieving assets.
Returns:
generator: Asset search results.
"""
return self._get_page(
self.base_path, page_number=page_number, page_size=page_size
)
[docs] def get_asset_by_id(self, asset_id: str) -> dict:
"""
Requests asset data by ID.
Args:
asset_id (str): Requested asset ID.
Returns:
dict: Asset search result.
"""
path = f"{self.base_path}/{asset_id}"
return self._get(path)
[docs] def get_comments(
self,
asset_id: str,
page_number: int = 1,
page_size: Optional[int] = None,
) -> Generator[dict, None, None]:
"""
Requests comments on a specified asset.
Args:
asset_id (str): Asset ID for requested comments.
page_number (int, optional): Page number to begin at when searching.
page_size (int, optional): Page size for retrieving comments.
Returns:
generator: Comment search results.
"""
path = f"{self.base_path}/{asset_id}/comments"
return self._get_page(path, page_number=page_number, page_size=page_size)
[docs] def get_comment_by_id(self, asset_id: str, comment_id: int) -> dict:
"""
Requests a comment on a specified asset by comment ID.
Args:
asset_id (str): Asset ID for requested comments.
comment_id (int): Requested comment ID.
Returns:
dict: Comment search result.
"""
path = f"{self.base_path}/{asset_id}/comments/{comment_id}"
return self._get(path)
[docs] def add_comment(self, asset_id: str, comment: str) -> dict:
"""
Adds a comment to a specified asset on the ASM platform.
Args:
asset_id (str): Asset ID to add comment to.
comment (str): New comment text.
Returns:
dict: Added comment results.
"""
path = f"{self.base_path}/{asset_id}/comments"
data = {"markdown": str(comment)}
return self._post(path, data=data)
[docs] def add_tag(self, asset_id: str, name: str, color: Optional[str] = None) -> dict:
"""
Adds a tag to a specified asset on the ASM platform.
Args:
asset_id (str): Asset ID to add tag to.
name (str): New tag name.
color (str, optional): New tag color.
"""
path = f"{self.base_path}/{asset_id}/tags"
data = format_tag(name, color)
return self._post(path, data=data)
[docs] def delete_tag(self, asset_id: str, name: str) -> dict:
"""
Deletes a tag from a specified asset on the ASM platform by tag name.
Args:
asset_id (str): Asset ID to delete tag from.
name (str): Tag name to delete.
"""
path = f"{self.base_path}/{asset_id}/tags/{name}"
return self._delete(path)
[docs]def format_tag(name: str, color: Optional[str] = None) -> dict:
"""
Formats tag name and color request data.
Args:
name (str): Tag name.
color (str, optional): Tag color.
Returns:
dict: Formatted tag request data.
"""
if color:
return {"name": str(name), "color": str(color)}
return {"name": str(name)}