Source code for parsons.ngpvan.codes

"""NGPVAN Code Endpoints"""
from parsons.etl.table import Table
import logging

logger = logging.getLogger(__name__)


[docs] class Codes(object): def __init__(self, van_connection): self.connection = van_connection
[docs] def get_codes(self, name=None, supported_entities=None, parent_code_id=None, code_type=None): """ Get codes. `Args:` name : str Filter by name of code. supported_entities: str Filter by supported entities. parent_code_id: str Filter by parent code id. code_type: str Filter by code type. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ params = {'name': name, 'supportedEntities': supported_entities, 'parentCodeId': parent_code_id, 'codeType': code_type, '$top': 200 } tbl = Table(self.connection.get_request('codes', params=params)) logger.info(f'Found {tbl.num_rows} codes.') return tbl
[docs] def get_code(self, code_id): """ Get a code. `Args:` code_id : int The code id. `Returns:` Parsons Table See :ref:`parsons-table` for output options. """ c = self.connection.request(f'codes/{code_id}') logger.debug(c) logger.info(f'Found code {code_id}.') return c
[docs] def get_code_types(self): """ Get code types. `Returns:` list A list of code types. """ lst = self.connection.get_request('codeTypes') logger.info(f'Found {len(lst)} code types.') return lst
[docs] def create_code(self, name=None, parent_code_id=None, description=None, code_type='SourceCode', supported_entities=None): """ Create a code. `Args:` name: str The name of the code. parent_code_id: int A unique identifier for this code’s parent. description: str A description for this code, no longer than 200 characters. code_type: str The code type. ``Tag`` and ``SourceCode`` are valid values. supported_entities: list A list of dicts that enumerate the searchability and applicability rules of the code. You can find supported entities with the :meth:`code_supported_entities` .. highlight:: python .. code-block:: python [ { 'name': 'Event', 'is_searchable': True, 'is_applicable': True } { 'name': 'Locations', 'start_time': '12-31-2018T13:00:00', 'end_time': '12-31-2018T14:00:00' } ] """ json = {"parentCodeId": parent_code_id, "name": name, "codeType": code_type, "description": description} if supported_entities: se = [{'name': s['name'], 'isSearchable': s['is_searchable'], 'is_applicable': s['is_applicable']} for s in supported_entities] json['supportedEntities'] = se r = self.connection.post_request('codes', json=json) logger.info(f'Code {r} created.') return r
[docs] def update_code(self, code_id, name=None, parent_code_id=None, description=None, code_type='SourceCode', supported_entities=None): """ Update a code. `Args:` code_id: int The code id. name: str The name of the code. parent_code_id: int A unique identifier for this code’s parent. description: str A description for this code, no longer than 200 characters. code_type: str The code type. ``Tag`` and ``SourceCode`` are valid values. supported_entities: list A list of dicts that enumerate the searchability and applicability rules of the code. You can find supported entities with the :meth:`code_supported_entities` .. highlight:: python .. code-block:: python [ { 'name': 'Event', 'is_searchable': True, 'is_applicable': True } { 'name': 'Locations', 'start_time': '12-31-2018T13:00:00', 'end_time': '12-31-2018T14:00:00' } ] """ post_data = {} if name: post_data['name'] = name if parent_code_id: post_data['parentCodeId'] = parent_code_id if code_type: post_data['codeType'] = code_type if description: post_data['description'] = description if supported_entities: se = [{'name': s['name'], 'isSearchable': s['is_searchable'], 'is_applicable': s['is_applicable']} for s in supported_entities] post_data['supportedEntities'] = se r = self.connection.put_request(f'codes/{code_id}', json=post_data) logger.info(f'Code {code_id} updated.') return r
[docs] def delete_code(self, code_id): """ Delete a code. `Args:` code_id: int The code id. `Returns:` ``None`` """ r = self.connection.delete_request(f'codes/{code_id}') logger.info(f'Code {code_id} deleted.') return r
[docs] def get_code_supported_entities(self): """ Get code supported entities. `Returns:` list A list of code supported entities. """ lst = self.connection.get_request('codes/supportedEntities') logger.info(f'Found {len(lst)} code supported entities.') return lst