Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 08:39:00

0001 from pandacommon.pandalogger.LogWrapper import LogWrapper
0002 from pandacommon.pandalogger.PandaLogger import PandaLogger
0003 
0004 from pandaserver.api.v1.common import (
0005     MESSAGE_DATABASE,
0006     generate_response,
0007     request_validation,
0008 )
0009 from pandaserver.brokerage.SiteMapper import SiteMapper
0010 from pandaserver.srvcore.panda_request import PandaRequest
0011 from pandaserver.taskbuffer.TaskBuffer import TaskBuffer
0012 
0013 _logger = PandaLogger().getLogger("api_metaconfig")
0014 
0015 # These global variables are initialized in the init_task_buffer method
0016 global_task_buffer = None
0017 
0018 
0019 def init_task_buffer(task_buffer: TaskBuffer) -> None:
0020     """
0021     Initialize the task buffer. This method needs to be called before any other method in this module.
0022     """
0023 
0024     global global_task_buffer
0025     global_task_buffer = task_buffer
0026 
0027 
0028 @request_validation(_logger, secure=True, request_method="GET")
0029 def get_banned_users(req: PandaRequest) -> dict:
0030     """
0031     Get banned users
0032 
0033     Gets the list of banned users from the system (users with `status=disabled` in ATLAS_PANDAMETA.users). Requires a secure connection.
0034 
0035     API details:
0036         HTTP Method: GET
0037         Path: /v1/metaconfig/get_banned_users
0038 
0039     Args:
0040         req(PandaRequest): internally generated request object
0041 
0042     Returns:
0043         dict: The system response `{"success": success, "message": message, "data": data}`.
0044               When successful, the data field contains the banned users in the format `{"user1": False, "user2": False}`
0045     """
0046     tmp_logger = LogWrapper(_logger, f"get_banned_users")
0047 
0048     tmp_logger.debug("Start")
0049     success, users = global_task_buffer.get_ban_users()
0050     tmp_logger.debug("Done")
0051     return generate_response(success, data=users)
0052 
0053 
0054 @request_validation(_logger, secure=False, request_method="GET")
0055 def get_site_specs(req: PandaRequest, type: str = "analysis") -> dict:
0056     """
0057     Get site specs
0058 
0059     Gets a dictionary of site specs. By default `analysis` sites are returned. Requires a secure connection.
0060 
0061     API details:
0062         HTTP Method: GET
0063         Path: /v1/metaconfig/get_site_specs
0064 
0065     Args:
0066         req(PandaRequest): internally generated request object
0067         type(str, optional): type of site as defined in CRIC (currently `unified`, `production`, `analysis`, `all`). Defaults to `analysis`.
0068 
0069     Returns:
0070         dict: The system response `{"success": success, "message": message, "data": data}`.
0071               When successful, the data field contains a dictionary with the site data of the requested type.
0072     """
0073 
0074     tmp_logger = LogWrapper(_logger, f"get_site_specs")
0075     tmp_logger.debug("Start")
0076 
0077     site_specs = {}
0078     site_mapper = SiteMapper(global_task_buffer)
0079 
0080     excluded_attrs = {"ddm_endpoints_input", "ddm_endpoints_output", "ddm_input", "ddm_output", "setokens_input", "num_slots_map"}
0081 
0082     for site_id, site_spec in site_mapper.siteSpecList.items():
0083         if type == "all" or site_spec.type == type:
0084             # Convert site_spec attributes to a dictionary, excluding specific attributes
0085             site_specs[site_id] = {attr: value for attr, value in vars(site_spec).items() if attr not in excluded_attrs}
0086 
0087     tmp_logger.debug("Done")
0088     return generate_response(True, data=site_specs)
0089 
0090 
0091 @request_validation(_logger, secure=True, production=True, request_method="GET")
0092 def get_resource_types(req: PandaRequest):
0093     """
0094     Get resource types
0095 
0096     Gets the resource types (`SCORE`, `MCORE`, etc.) together with their definitions. Requires a secure connection and production role.
0097 
0098     API details:
0099         HTTP Method: GET
0100         Path: /v1/metaconfig/get_resource_types
0101 
0102     Args:
0103         req(PandaRequest): Internally generated request object containing the environment variables.
0104 
0105     Returns:
0106         dict: The system response `{"success": success, "message": message, "data": data}`.
0107               When successful, the data field contains a list of resource types.
0108     """
0109 
0110     tmp_logger = LogWrapper(_logger, f"get_resource_types")
0111     tmp_logger.debug("Start")
0112 
0113     resource_types = global_task_buffer.getResourceTypes()
0114 
0115     # Didn't get any resource types
0116     if not resource_types:
0117         tmp_logger.debug("Done with error")
0118         return generate_response(False, MESSAGE_DATABASE)
0119 
0120     # Success
0121     tmp_logger.debug("Done")
0122     return generate_response(True, data=resource_types)