import json, requests from APIHandler import APIHandler def get_entry_from_elabid(elabid, entryType="items"): ''' Function which returns entrypoint data (as dictionary) from its elabid. ''' header = APIHandler(apikey).dump response = requests.get( headers = header, url = f"{ELABFTW_API_URL}/{entryType}/{elabid}", verify=True ) if response.status_code // 100 in [2,3]: entry_data = response.json() return entry_data else: raise ConnectionError(f"HTTP request failed with status code: {response.status_code}.") def get_sample_layers_data(elabid): ''' Return the following data from every eLabFTW experiment linked to a certain sample, identified by elabid. - Title of the experiment - Category (should check it's "PLD Deposition") - Layer number - if present (PLD depositions) - Deposition time - returns error if not present - Repetition rate - returns error if not present ''' # header = { # "Authorization": apikey, # "Content-Type": "application/json" # } sample_data = requests.get( headers = header, url = f"https://elabftw.fisica.unina.it/api/v2/items/{elabid}", verify=True ).json() related_experiments = sample_data["related_experiments_links"] result = [] for exp in related_experiments: experiment_data = requests.get( headers = header, url = f"https://elabftw.fisica.unina.it/api/v2/experiments/{exp.get("entityid")}", verify=True ).json() extra = experiment_data["metadata_decoded"]["extra_fields"] result.append( {"title": exp.get("title"), "layer_number": extra.get("Layer Progressive Number").get("value"), "category": exp.get("category_title"), "deposition_time": extra.get("Duration").get("value"), "repetition_rate": extra.get("Repetition rate").get("value")} ) return result if __name__=="__main__": print("Warning: you're not supposed to be running this as the main program.")