Source code for idmtools.analysis.add_analyzer

"""idmtools add analyzer.

More of an example.

Copyright 2021, Bill & Melinda Gates Foundation. All rights reserved.
"""
import os
from idmtools.entities.ianalyzer import IAnalyzer, ANALYZABLE_ITEM


[docs]class AddAnalyzer(IAnalyzer): """ A simple base class to add analyzers. Examples: .. literalinclude:: ../../examples/analyzers/example_analysis_AddAnalyzer.py """
[docs] def __init__(self, filenames=None, output_path='output'): """ Initialize our analyzer. Args: filenames: Filename to fetch output_path: Path to write output to """ super().__init__() self.output_path = output_path self.filenames = filenames or [] # We only want the raw files -> disable parsing self.parse = True
[docs] def filter(self, item: ANALYZABLE_ITEM): """ Filter analyzers. Here we want all the items so just return true. Args: item: Item to filter Returns: True """ return True # download them all!
[docs] def initialize(self): """ Initialize our analyzer before running it. We use this to create our output directory. Returns: None """ self.output_path = os.path.join(self.working_dir, self.output_path) os.makedirs(self.output_path, exist_ok=True)
[docs] def map(self, data, item: ANALYZABLE_ITEM): """ Run this on each item and the files we retrieve. Args: data: Map of filesnames -> content item: Item we are mapping Returns: Values added up """ number = int(list(data.values())[0].split()[10]) result = number + 100 return result
# ck4, should we pass objects as the keys? e.g. Item-type, not just their id
[docs] def reduce(self, data): """ Combine all the data we mapped. Args: data: Map of results in form Item -> map results Returns: Sum of all the results """ # data is currently a dict with item_id: value entries value = sum(data.values()) print(value) return value