def surgery_block_information_3(self): module_name = self.module_list[3] review_surgery_date, review_surgery_source, review_surgery_diagnosis, review_surgery_diagnosis_comment, \ review_surgery_block_id, review_surgery_er, review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, \ review_surgery_her2, review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67 = ['NA', ] * 13 data_list = ['NA', ] * 13 check = False while not check: review = ask.ask_y_n('Has a review (of diagnosis or IHC details) been done of this surgery block?') if review: review_surgery_date = ask.check_date('Date of review (if multiple dates?): ') review_surgery_source = input( 'Name of Review Laboratory (Enter multiple if required Lab_test): ') review_surgery_diagnosis = input('Enter diagnosis of review: ') review_surgery_diagnosis_comment = input('Additional comments for review diagnosis: ') review_surgery_block_id = self.surgery_block_id block_id = ask.ask_y_n('Has the block been relabelled in the review?') if block_id: old_block_id = input('Please enter old block id: ') new_block_id = input('Please enter new block id: ') review_surgery_block_id = old_block_id + ' relabelled to ' + new_block_id review_ihc = ask.ask_y_n('Has the IHC result for any marker been reviewed by another lab?') if review_ihc: review_surgery_er, review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, \ review_surgery_her2, review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67 = \ BlockDescription.ihc_report('review_surgery') data_list = [review_surgery_date, review_surgery_source, review_surgery_diagnosis, review_surgery_diagnosis_comment, review_surgery_block_id, review_surgery_er, review_surgery_er_percent, review_surgery_pr, review_surgery_pr_percent, review_surgery_her2, review_surgery_her2_grade, review_surgery_fish, review_surgery_ki67] col_list = names(module_name) check = sql.review_input(self.file_number, col_list[:-2], data_list) data = data_list + [self.user_name, sql.last_update()] return data
def add_path_report(self, table): file_number = 'test' table_type = table.split("_")[0] folder_next = True while folder_next: check = False while not check: file_number = input("File Number: ") print("File Number: " + file_number) check = ask.ask_y_n("Is this file number correct") block_list_table = BlockInformation(self.conn, self.cursor, file_number) pk, block_id, number_of_blocks = block_list_table.get_block_pk( self.user_name, col_filter_value=table_type) #print(block_id, number_of_blocks) check_path_report_entry(conn=self.conn, cursor=self.cursor, file_number=file_number, table_to_check=table, pk=pk, block_id=block_id, number_of_blocks=number_of_blocks, user_name=self.user_name) folder_next = ask.ask_y_n("Add/update another file for table " + table + "?")
def add_data(self): col_list = names(self.module_list[0]) enter = ask.ask_y_n("Enter " + self.print_statements[0]) if enter: data = self.surgery_block_information_0() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk, data=data) col_list = names(self.module_list[1]) enter = ask.ask_y_n("Enter " + self.print_statements[1]) if enter: data, block_desc_df = self.surgery_block_information_1 sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk, data=data) block_desc_df.to_sql("block_data", self.conn, index=False, if_exists="append") col_list = names(self.module_list[2]) enter = ask.ask_y_n("Enter " + self.print_statements[2]) if enter: data = self.surgery_block_information_2() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk, data=data) col_list = names(self.module_list[3]) enter = ask.ask_y_n("Enter " + self.print_statements[3]) if enter: data = self.surgery_block_information_3() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='fk', key_value=self.fk, data=data)
def add_data(conn, cursor, file_number, user_name): table = "radiology" #file_row(cursor, file_number) enter = ask_y_n("Enter Mammography Report?") if enter: data = mammography(conn, cursor, file_number) add_update_sql.update_multiple(conn, cursor, table, names("mammography"), file_number, data) enter = ask_y_n("Enter 3D Tomosynthesis?") if enter: data = tomosynthesis(file_number) add_update_sql.update_multiple(conn, cursor, table, names("tomosynthesis"), file_number, data) enter = ask_y_n("Enter Automated Breast Volume Scanner") if enter: data = abvs(file_number) add_update_sql.update_multiple(conn, cursor, table, names("abvs"), file_number, data) enter = ask_y_n("Enter Sono-Mammography") if enter: data = sonomammo(conn, cursor, file_number) add_update_sql.update_multiple(conn, cursor, table, names("sonomammo"), file_number, data) enter = ask_y_n("Enter MRI-Breast") if enter: data = mri_breast(conn, cursor, file_number, user_name) add_update_sql.update_multiple(conn, cursor, table, names("mri_breast"), file_number, data)
def add_block_list(self): block_list = NewBlock(self.conn, self.cursor, self.user_name) add_data = True while add_data: categories = ['Add Block', 'Edit Block', 'Exit'] new_update = ask.ask_list('you want to do?', categories) if new_update == 'Edit Block': block_list.edit_data() add_data = ask.ask_y_n( 'Do you want to add/edit another block?') elif new_update == 'Add Block': file_number = 'test' check_file = False while not check_file: file_number = input("Enter File Number: ") print("File Number: " + file_number) check_file = ask.ask_y_n("Is this file number correct") if not sql.check_file_number_exist( self.cursor, file_number, table='block_list'): block_list.add_data(file_number) else: print( 'This file_number already exists. Add a new block if for ' + file_number) block_type = ask.ask_list('Block type', ['biopsy', 'surgery']) block_list.add_new_pk(file_number, block_type) add_data = ask.ask_y_n( 'Do you want to add/edit another block?') else: add_data = False
def cancer_table(conn, cursor, file_number): table_cancer = "previous_cancer_history" type_of_cancer_list = [] year_diagnosis_list = [] treat_all = [] type_all = [] duration_all = [] data_return = [] add_cancer = True while add_cancer: type_of_cancer = input("Type of Cancer: ") type_of_cancer_list.append(type_of_cancer) year_diagnosis = input("Year of diagnosis: ") year_diagnosis_list.append(year_diagnosis) col = ("File_number, Type_Cancer, Year_diagnosis") data = file_number, type_of_cancer, year_diagnosis sql.insert(conn, cursor, table_cancer, col, data) print("Please enter the type of treatment used: ") treat_list = [] type_list = [] duration_list = [] treated, type, duration = ("NA", ) * 3 for treatment in PatientInfo.previous_cancer_treatment: treat = ask_y_n(treatment) if treat: treat_list.append(treatment) type_treat = input("Type of " + treatment) type_list.append(type_treat) duration_treat = input("Duration of " + treatment) duration_list.append(duration_treat) data = treatment, type_treat, duration_treat columns = [ treatment, ("type_" + treatment), ("duration_" + treatment) ] treated = "; ".join(treat_list) type = "; ".join(type_list) duration = "; ".join(duration_list) sql.update_multiple(conn, cursor, table_cancer, columns, file_number, data) elif not treat: index_no = "No " + treatment type_treat, duration_treat = ("NA", ) * 2 data = index_no, type_treat, duration_treat columns = [ treatment, ("type_" + treatment), ("duration_" + treatment) ] sql.update_multiple(conn, cursor, table_cancer, columns, file_number, data) treat_all.append(treated) type_all.append(type) duration_all.append(duration) add_cancer = ask_y_n("Additional cancer history") all_data = [ type_of_cancer_list, year_diagnosis_list, treat_all, type_all, duration_all ] for index in all_data: data_joint = "|".join(index) data_return.append(data_joint) return tuple(data_return)
def metastasis(file_number, user_name): check = False while not check: met_has = ask.ask_y_n( "Has the patient been examined for metastatic disease?") if not met_has: met_has = "Not examined for metastatic disease" else: met_has = "Examined for metastatic disease" date_last = ask.check_date("Date of last follow-up: ") recur = ask.ask_y_n("Has the patient experienced a recurrence?") if recur: time_recur = input("Time to disease recurrence: ") nature_recur = ask.ask_option("Nature of recurrence", ["Distant", "Local", "Other"]) if nature_recur == "Distant": distant_site = input("Site of distant recurrence: ") else: distant_site = "NA" else: time_recur, nature_recur, distant_site = ("NA", ) * 3 status = patient_status() data_list = [ met_has, date_last, time_recur, nature_recur, distant_site, status, user_name, last_update() ] col_list = names.names_longterm("metastasis") check = review_input(file_number, col_list, data_list) return data_list
def clinical_tests(): other_tests = {'USG Abdomen': ['Abnormal'], 'CECT Abdomen and Thorax': ['Visceral Metastasis'], 'PET Scan': ['Visceral Metastasis', 'Skeletal Metastasis'], 'Bone Scan': ['Skeletal Metastasis']} test_key = list(other_tests.keys()) data_list = [] for test in test_key: test_name = test test_done = ask.ask_y_n("Has "+test_name+" been done?") if test_done: test_done = test_name+" done" data_list.append(test_done) abnormal = other_tests[test] for diagnosis in abnormal: test_diag = ask.ask_y_n('Is the result ' + diagnosis + '?') if test_diag: test_details = input("Please provide details of " + diagnosis + " diagnosis: ") else: diagnosis = 'Normal' test_details = "NA" data_list.append(diagnosis) data_list.append(test_details) else: test_done = test_name+"_not_done" data_list.append(test_done) abnormal = other_tests[test] for i in range(2*len(abnormal)): i = 'NA' data_list.append(i) return data_list
def edit_table(df, pk_col, df_col): import helper_function.ask_y_n_statement as ask rows = (df.shape)[0] for row in range(0,rows): print(df.iloc[row].to_string()+'\n') to_correct = ask.ask_y_n("Are entries correct?") if not to_correct: to_correct = ask.ask_y_n("Re-enter entire table?") if to_correct: return to_correct, df else: change_row = True while change_row: pk_list = list(df[pk_col]) print(pk_list) pk = input("Enter " + pk_col + " to change: ") index = pk_list.index(id) to_do = True while to_do: print(df.loc[index, :]) col_change = ask.ask_option("Name of column to change", df_col) old_val = df.loc[index, col_change] print(old_val + '\n') new_val = input("Enter correct value for " + col_change + ' for ' + pk + ": ") df.loc[index, col_change] = new_val print(df.iloc[index].to_string() + '\n') to_do = ask.ask_y_n("Make more changes to " + pk_col + ' ' + pk + '?') print_df(df) change_row = ask.ask_y_n("Change another row?") to_correct = False return to_correct, df
def add_data(self): pk = uuid.uuid4().hex sql.add_pk_fk_to_table(self.conn, self.cursor, self.table_name, col_name='pk', pk=pk) pet_present = ask.ask_y_n( "Does the patient file contain a PET/CT report to be entered?") if not pet_present: data_length = len(self.col_list_all) - 3 data = [self.file_number ] + ['pet_report_not_present'] * data_length + [ self.user_name, sql.last_update() ] sql.update_multiple_key(self.conn, self.cursor, self.table_name, self.col_list_all, key_name='pk', key_value=pk, data=data) else: print(self.print_statements[0]) col_list = names(self.module_list[0]) enter = ask.ask_y_n("Enter " + self.print_statements[0]) if enter: data = self.pet_report_identifier() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='pk', key_value=pk, data=data) col_list = names(self.module_list[1]) enter = ask.ask_y_n("Enter " + self.print_statements[1]) if enter: data = self.pet_report_findings() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='pk', key_value=pk, data=data) enter = ask.ask_y_n("Enter " + self.print_statements[2]) col_list = names(self.module_list[2]) if enter: data = self.pet_breast_cancer() sql.update_multiple_key(self.conn, self.cursor, self.table_name, col_list, key_name='pk', key_value=pk, data=data)
def node_excision (file_number): check = False while not check: surgery_guide, frozen, gross_tumour, skin, nodes, number_lymph, level_lymph, sentinel_method, sentinel_blue, \ sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable = (" ",)*13 guide_add = True guide = [] while guide_add: surgery_guide = ask_option("Excision guided by", ["Palpation", "USG guided", "Wire placement guided", 'Gamma camera guided', 'Clipped node']) guide.append(surgery_guide) guide_add = ask_y_n("Add another method to guide?") surgery_guide = "; ".join(guide) frozen_samples = ask_option_y_n("Any samples sent for histopathology (frozen)?") if frozen_samples == 'Yes': frozen_samples = [] sn_frozen = ask_y_n("Sentinel Node sent for histopathology (frozen)?", yes_ans="Sentinel Node") if sn_frozen == 'Sentinel Node': frozen_samples.append(sn_frozen) specimen_frozen = ask_y_n_na("Specimen sent for histopathology (frozen)?") if specimen_frozen == 'Yes': nipple_frozen = ask_y_n_na("Under Nipple Surface sent for histopathology (frozen)?", yes_ans='Under Nipple Surface') if nipple_frozen == 'Under Nipple Surface': frozen_samples.append(nipple_frozen) other_frozen = ask_y_n_na("Any other specimen sent for histopathology (frozen)?") if other_frozen == 'Yes': other_frozen = input("Type of tissue sent for histopathology (frozen): ") frozen_samples.append(other_frozen) frozen = "; ".join(frozen_samples) else: frozen = "NA" gross_tumour = input ("Size of tumour on cross section (cm): ") skin = ask_option_y_n("Skin involved", yes_ans="Skin involved", no_ans="Skin not involved") nodes = ask_option("Nodes excised", ["Sentinel Node", "Sentinel and Axillary Nodes", "Axillary Nodes only", "Other"]) number_lymph = input("Number of lymph nodes excised (if available): ") level_lymph = ask_option("Level of lymph node excised", ["I", "II", "III", "Data not available", "Other"]) if nodes == 'Axillary Nodes only': sentinel_method, sentinel_blue, sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable = \ ('No Sentinel Node excised', )*6 else: sentinel_method = ask_option("Method of labelling Sentinel Node", ["Isotope", "Blue Dye", "Isotope + Blue Dye", "Not done", "Other"]) sentinel_blue = ask_option_y_n("Blue Node", yes_ans="Blue Node", no_ans="No Blue Node") sentinel_hot = ask_option_y_n("Hot Node", yes_ans="Hot Node", no_ans="No Hot Node") sentinel_blue_hot = ask_option_y_n("Blue Hot Node", yes_ans="Blue Hot Node", no_ans="No Blue Hot Node") sentinel_non_blue_hot = ask_option_y_n("Non Blue, Hot Node", yes_ans= "Non Blue, Hot Node", no_ans="No Non Blue, Hot Node") sentinel_palpable = ask_option_y_n("Palpable Node", yes_ans="Palpable Node", no_ans="No Palpable Node") data_list = [surgery_guide, frozen, gross_tumour, skin, nodes, number_lymph, level_lymph, sentinel_method, sentinel_blue, sentinel_hot, sentinel_blue_hot, sentinel_non_blue_hot, sentinel_palpable] col_list = names("node_excision") check = add_update_sql.review_input(file_number, col_list, data_list) return data_list
def add_insert(): import sqlite3 import helper_function.ask_y_n_statement as ask import sql.add_update_sql as add_update_sql from datetime import datetime import os import textwrap from helper_function.pccm_names import db_tables folders = "d:/repos/pccm_db/main/DB" file = 'PCCM_BreastCancerDB_check_new_all_2_2019-05-27.db' #file = 'PCCM_BreastCancerDB_all_data_rituja_surgery_data.db' check_path = False while not check_path: print('\nDatabase file ' + file + ' in folder ' + folders + ' is being used\n') check_location = ask.ask_y_n('Is this correct?') if not check_location: print("\n File is currently set as " + file) file = input( 'Please enter database file name (with .db extension): ') print("\n Folder is currently set as " + folders) folders = input( 'Please enter database folder name (full path as given above): ' ) else: check_path = True path = os.path.join(folders, file) if os.path.isfile(path): conn = sqlite3.connect(path) cursor = conn.cursor() user_name = input("Please input username/user_id: ") folder_next = True files_table_added = [] while folder_next: check = False while not check: file_number = input("File Number: ") print("File Number: " + file_number) check = ask.ask_y_n("Is this file number correct") check_table = True while check_table: table = ask.ask_list("Table", db_tables()) file_table = file_number + "-" + table files_table_added.append(file_table) check_table = add_update_sql.check_file( conn, cursor, table, file_number, user_name, folders, file) folder_next = ask.ask_y_n("Add/update another record?") else: note = "current path: '" + path + "' to database is not valid. Check path and database name and run " \ "start_pccm_db() again." wrapper = textwrap.TextWrapper(width=100) string = wrapper.fill(text=note) print(string)
def pet_breast_cancer(self): module_name = self.module_list[2] breast_report = [ 'NA', ] * 7 check = False while not check: pet_breast = ask.ask_y_n( 'Does this report describe a breast cancer?') if pet_breast: print('\nPlease describe primary breast lesion\n') pet_breast_lesion_size = input( 'Dimensions of breast lesion/s: ') pet_breast_lesion_size_unit = ask.ask_list( 'Unit of breast lesion size', ['mm', 'cm']) pet_breast_lesion_suv = ask.check_number_input( 'Please enter SUV max of breast lesion: ', 'Please enter only SUV not description') pet_breast_lesion_location = input( 'Please enter description of lesion location: ') pet_breast_lesion_type = input( 'Please input description of lesion: ') pet_breast_lesion_comments = input( 'Please input any additional notes for breast lesion: ') pet_breast_nodes = ask.ask_y_n( 'Does the report describe breast related nodes?') if pet_breast_nodes: pet_breast_nodes_description = input( 'Please enter nodes description as given: ') else: pet_breast_nodes_description = 'nodes_not_described' pet_breast_skin = ask.ask_y_n( 'Does the PET report describe any skin changes?') if pet_breast_skin: pet_breast_lesion_skin = input( 'Please enter description of skin changes: ') else: pet_breast_lesion_skin = 'skin_changes_not_described' else: pet_breast_lesion_size, pet_breast_lesion_size_unit, pet_breast_lesion_suv, pet_breast_lesion_location,\ pet_breast_lesion_type, pet_breast_lesion_comments, pet_breast_nodes_description, \ pet_breast_lesion_skin = ['no_breast_cancer', ] * 8 breast_report = [ pet_breast_lesion_size, pet_breast_lesion_size_unit, pet_breast_lesion_suv, pet_breast_lesion_location, pet_breast_lesion_type, pet_breast_lesion_comments, pet_breast_nodes_description, pet_breast_lesion_skin ] columns_list = names(module_name) check = sql.review_input(self.file_number, columns_list[:-2], breast_report) data_list = breast_report + [self.user_name, sql.last_update()] return data_list
def add_data(self): block_list_table = BlockInformation(self.conn, self.cursor, self.file_number) enter = ask.ask_y_n("Enter Biopsy Report information?") if enter: data = self.biopsy_report_info() sql.update_multiple_key(self.conn, self.cursor, self.table_name, names.names_biopsy("biopsy_report_info"), key_name='pk', key_value=self.pk, data=data) enter = ask.ask_y_n("Enter Biopsy data?") if enter: data = self.biopsy_details() sql.update_multiple_key(self.conn, self.cursor, self.table_name, names.names_biopsy("biopsy_details"), key_name='pk', key_value=self.pk, data=data) data = self.ihc_biopsy_data() sql.update_multiple_key(self.conn, self.cursor, self.table_name, names.names_biopsy("ihc_biopsy_data"), key_name='pk', key_value=self.pk, data=data) data = self.review_biopsy() sql.update_multiple_key(self.conn, self.cursor, self.table_name, names.names_biopsy("review_biopsy"), key_name='pk', key_value=self.pk, data=data) is_surgery = ask.ask_y_n( 'Is a surgery associated with this biopsy?') if is_surgery: surgery_block_id, surgery_number_of_blocks = block_list_table.get_block_id( 'surgery') else: surgery_block_id = 'NA' sql.update_single_key(self.conn, self.cursor, self.table_name, 'surgery_block_id', key_name='pk', key_value=self.pk, var=surgery_block_id)
def tox_table(file_number, drug_cyc, tox_all): tox_index = 0 check_tox = False while not check_tox: tox = ask.ask_y_n( "Were there any toxic effects in administration of " + drug_cyc) if tox: add_tox = True while add_tox: check = False while not check: tox_present = ask.ask_option("Toxic effects of type", chemo.toxicity()) tox_grade = ask.ask_option( ("the grade of " + tox_present + "? "), ["Mild", "Moderate", "Severe", "Other"]) treatment = input("Treatment given for " + tox_grade + " " + tox_present + " (include all details): ") resp_treatment = ask.ask_option( ("Response to treatment given for " + tox_grade + " " + tox_present), ["Partial", "Complete", "No Effect", "Other"]) cyc_tox = input("Cycle at which toxicity occurred: ") change_tox = ask.ask_option("Changes to treatment", [ "No change", "Therapy changed due to toxicity", "Therapy " "stopped due to toxicity", "Therapy changed due " "to other reasons", "Therapy stopped due to other reasons" ]) if change_tox == "Therapy changed due to toxicity" or change_tox == "Therapy changed due to other reasons": change = input("Please describe changes to Therapy: ") change_tox = change_tox + ": " + change data = [ file_number, drug_cyc, tox_present, tox_grade, treatment, resp_treatment, cyc_tox, change_tox ] tox_all.loc[tox_index] = data check = review_df_row(tox_all) tox_index = tox_index + 1 add_tox = ask.ask_y_n('Add another toxicity type?') else: tox_present, tox_grade, treatment, resp_treatment, cyc_tox, change_tox = ("No Toxicity", ) * 6 data = [ file_number, drug_cyc, tox_present, tox_grade, treatment, resp_treatment, cyc_tox, change_tox ] tox_all.loc[tox_index] = data check_tox = review_df(tox_all) return tox_all
def add_data(conn, cursor, file_number, user_name): #file_row(cursor, file_number) table = "hormonetherapy_survival" enter = ask.ask_y_n("Enter Hormone Therapy Details?") if enter: col_list = names.names_longterm(module_name="hormone") data = hormone(file_number) update_multiple(conn, cursor, table, col_list, file_number, data) enter = ask.ask_y_n("Enter Recurrence and follow-up status?") if enter: col_list = names.names_longterm(module_name="metastasis") data = metastasis(file_number, user_name) update_multiple(conn, cursor, table, col_list, file_number, data)
def add_gen_info(conn, cursor, file_number, user_name): table = "patient_information_history" #file_row(cursor, file_number) enter = ask_y_n("Enter Patient Biographical Information") if enter: data = bio_info(file_number) update_multiple(conn, cursor, table, pccm_names.names_info("bio_info"), file_number, data) enter = ask_y_n("Enter Patient habits") if enter: data = phys_act(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("phys_act"), file_number, data) data = habits(file_number) update_multiple(conn, cursor, table, pccm_names.names_info("habits"), file_number, data) data = nut_supplements(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("nut_supplements"), file_number, data) enter = ask_y_n("Enter Patient family and reproductive details?") if enter: data = family_details(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("family_details"), file_number, data) enter = ask_y_n("Enter Patient and family medical history?") if enter: data = med_history(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("med_history"), file_number, data) data = cancer_history(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("cancer_history"), file_number, data) data = family_cancer(conn, cursor, file_number) update_multiple(conn, cursor, table, pccm_names.names_info("family_cancer"), file_number, data) enter = ask_y_n("Enter Patient Symptoms?") if enter: data = det_by(file_number) update_multiple(conn, cursor, table, pccm_names.names_info("det_by"), file_number, data) data = breast_symptoms(file_number, user_name) update_multiple(conn, cursor, table, pccm_names.names_info("breast_symptoms"), file_number, data) print_info(cursor, file_number)
def review_data_key(conn, cursor, table, key_name, key_value, columns, col_name, col_value): if 'file_number' in columns: # remove 1st position from column names (assumes it is file_number) col_list = columns[1:] else: col_list = columns sql_statement = 'SELECT ' + ", ".join(col_list) + ' FROM ' + table + " WHERE " + key_name + "= '" + key_value + "'" data = cursor.execute(sql_statement) data_list = data.fetchall() if not data_list: print("This " + col_name + ' ' + col_value + ' has not been entered in ' + table) enter = ask.ask_y_n("Do you want to enter now") if enter: add_pk_fk_to_table(conn, cursor, table, col_name=key_name, pk=key_value) print('added new row for this ' + key_name) return enter else: data_list = list(data_list[0]) col_number = len(col_list) if data_list == [None]*len(data_list): print("This section of the database has not been entered") enter = ask.ask_y_n("Do you want to enter now") return enter elif None in set(data_list): print("Some entries are missing from the database: ") for index in range(0, col_number): print(col_list[index] + " : " + str(data_list[index])) enter = ask.ask_option("Do you want to proceed?", ["Edit all", "Add new data only"]) if enter == "Edit all": return True else: enter = edit_few(conn, cursor, table, col_list, key_value, data_list) return enter else: print("Entries present in database are as follows : ") for index in range(0, col_number): print(col_list[index] + " : " + str(data_list[index])) enter = ask.ask_option("Do you want to", ["Edit all", "Edit some entries", "Edit None"]) if enter == "Edit some entries": for index in range(0, col_number): print(col_list[index] + " : " + str(data_list[index])) edit = ask.ask_y_n("Edit") if edit: data = input("Data for " + col_list[index] + ": ") update_single_pk(conn, cursor, table, col_list[index], pk_value=key_name, pk=key_value, var=data) return False elif enter == "Edit all": return True else: return False
def add_data(conn, cursor, file_number, user_name): table = "surgery_seport" #file_row(cursor, file_number) enter = ask_y_n("Do you want to enter Surgery Information?") if enter: data = surgery_information(file_number) add_update_sql.update_multiple(conn, cursor, table, names("surgery_information"), file_number, data) enter = ask_y_n("Do you want to enter dnter Node Excision Information?") if enter: data = node_excision(file_number) add_update_sql.update_multiple(conn, cursor, table, names("node_excision"), file_number, data) enter = ask_y_n("Do you want to enter details of Post-Surgery management (plans and complications)?") if enter: data = post_surgery(file_number, user_name) add_update_sql.update_multiple(conn, cursor, table, names("post_surgery"), file_number, data)
def drug_table_enter(file_number, drug_table): drug_add = True drug_index = 0 while drug_add: check_drug = False while not check_drug: drugs_administered = ask.ask_option("Drug used for therapy", chemo.drug_list()) dose_check = ask.ask_y_n('Is the drug dose available?') if dose_check: dose = ask.check_number_input( "Dose of " + drugs_administered + ':', 'Please input dose amount' 'without unit') if dose == 'NA': dose_unit = 'NA' else: dose_unit = input("Dose unit: ") else: dose, dose_unit = [ 'NA', ] * 2 cycle_check = ask.ask_y_n('Is the drug cycle available?') if cycle_check: cycle_frequency_per_week = ask.check_number_input( "Cycle Frequency: ", 'Please enter frequency per ' 'week, so three weekly is 3 and ' 'weekly is 1') number_cycle = ask.check_number_input( "Number of cycles actually given: ", 'Please enter numbers only') else: cycle_frequency_per_week, number_cycle = [ 'NA', ] * 2 drug_dose = 'NA' if number_cycle != 'NA' and dose != 'NA': drug_dose = float(dose) * int(number_cycle) data_drug = [ file_number, drugs_administered, number_cycle, cycle_frequency_per_week, str(drug_dose), dose_unit ] drug_table.loc[drug_index] = data_drug check_drug, drug_table = review_df_row(drug_table) drug_index = drug_index + 1 drug_add = ask.ask_y_n("Add another drug") return drug_table
def create_block_id(blocks_total): block_id_list = [] frozen = ask.ask_y_n('Are frozen sections (labelled FS) present?') no_frozen = 0 if frozen: no_frozen = int(input('Number of frozen sections: ')) frozen_list = [str(x) for x in range(no_frozen + 1)] frozen_id = ['FS-' + s for s in frozen_list[1:]] else: frozen_id = [] blocks = blocks_total - no_frozen block_id_chunks = list(divmod(blocks, 26)) chunk = block_id_chunks[0] suffix = [i for i in range(chunk)] if chunk == 0: for j in range(block_id_chunks[1]): alph_list = string.ascii_uppercase[j] block_id_list.append(alph_list) else: for i in range(chunk): if i == chunk - 1: for j in range(block_id_chunks[1]): alph_list = string.ascii_uppercase[j] + str(i) block_id_list.append(alph_list) else: for j in range(26): alph_list = string.ascii_uppercase[j] + suffix[i] block_id_list.append(alph_list) block_id_list = block_id_list + frozen_id print(", ".join(block_id_list)) check_list = ask.ask_y_n("Is block list correct?") while not check_list: block_id_list = [] check = ask.ask_y_n('Is Frozen series correct?') if not check: for i in range(blocks_total): block_id = input('Block id of block number ' + str(i + 1) + ': ') block_id_list.append(block_id) else: block_id_list = frozen_id for i in range(blocks): block_id = input('Block id of block number ' + str(i + 1) + ': ') block_id_list.append(block_id) print((", ").join(block_id_list)) check_list = ask.ask_y_n("Is block list correct?") return block_id_list
def family_cancer_table(conn, cursor, file_number): add_family = True type_cancer_list, relation_degree_list, type_relation_list, age_detect_list = [], [], [], [] all_data = [] while add_family: type_of_cancer = input("Type of Cancer: ") type_cancer_list.append(type_of_cancer) relation_to_patient = ask_option("Relation to patient", PatientInfo.family) relation_degree_list.append(relation_to_patient) type_relation = input("Specific Relationship:") type_relation_list.append(type_relation) age_at_detection_yrs = input('Age at detection (yrs) :') age_detect_list.append(age_at_detection_yrs) family_history = file_number, type_of_cancer, relation_to_patient, type_relation, age_at_detection_yrs family_history_list = "; ".join([ type_of_cancer, relation_to_patient, type_relation, age_at_detection_yrs ]) all_data.append(family_history_list) columns = 'file_number, type_cancer, relation_to_patient, type_relation, age_at_detection_yrs' table = "family_cancer_history" sql.insert(conn, cursor, table, columns, family_history) add_family = ask_y_n("Add more family cancer history? ") all_data_flat = "|".join(all_data) return (all_data_flat)
def add_data(conn, cursor, file_number, user_name): table = "clinical_exam" #file_row(cursor, file_number) enter = ask.ask_y_n("Enter Clinical Examination information") if enter: data = clinical_exam_initial(file_number, user_name) add_update_sql.update_multiple( conn, cursor, table, pccm_names.name_clinical("clinical_exam_initial"), file_number, data) enter = ask.ask_y_n("Enter Nipple Cytology report?") if enter: data = nipple_cytology(file_number) add_update_sql.update_multiple( conn, cursor, table, pccm_names.name_clinical("nipple_cytology"), file_number, data)
def review_input (file_number, columns, data): col_number = len (data) print ("Entries for database are as follows : ") for index in range (0, col_number): print (columns[index] +": " + data[index]) ans = ask.ask_y_n("Are entries for file "+ file_number+ " correct ?", True, False) return ans
def get_folder_name(): folders = "d:/repos/pccm_db/main/DB" file = 'PCCM_BreastCancerDB_2019_07_03.db' check_path = False path = os.path.join(folders, file) while not check_path: print('\nDatabase file ' + file + ' in folder ' + folders + ' is being used\n') check_location = ask.ask_y_n('Is this correct?') if not check_location: print("\n File is currently set as " + file) file = input( 'Please enter database file name (with .db extension): ') print("\n Folder is currently set as " + folders) folders = input( 'Please enter database folder name (full path as given above): ' ) path = os.path.join(folders, file) if os.path.isfile(path): check_path = True else: note = "current path: '" + path + "' to database is not valid. Check path and database name and enter " \ "again" wrapper = textwrap.TextWrapper(width=100) string = wrapper.fill(text=note) print(string) user_name = input("Please input username/user_id: ") return folders, file, user_name
def mri_mass(self, mass_id): check = False data_list = ask.default_data_list(self.col_list) while not check: if self.mammo_breast == "bilateral": mass_location = ask.ask_option("Location of mass " + str( mass_id), RadioTables.breast) else: mass_location = self.mammo_breast check_t1_t2 = ask.ask_y_n('Are both T1 and T2 image analysis' 'available for this mass?') type_of_imaging = ['T1', 'T2'] if not check_t1_t2: type_of_imaging = ask.ask_list('Observation of this mass is a' 'result of which type of' 'imaging? ', RadioTables.mri_image_type) data_list = self.mri_mass_detail(type_of_imaging, mass_id) if type_of_imaging in {'T1', 'T2'}: data_list = [('{0}_{1}'.format(type_of_imaging, data)) for data in data_list] mass_name = "Lesion " + str(mass_id) data_list = [self.file_number, mass_location, mass_name]+data_list check = sql.review_input(self.file_number, columns=self.col_list, data=data_list) data_list = [data_list] + [self.user_name, sql.last_update()] data_list = data_list + [self.user_name, sql.last_update()] return data_list
def check_file(conn, cursor, table, file_number, user_name, folders, file): from add_edit.edit_record import edit_record from add_edit.add_new import add_new from reports.radiology import Radiology if table != 'radiology': sql_statement = "SELECT rowid FROM " + table + " WHERE file_number = ?" cursor.execute(sql_statement, (file_number, )) data = cursor.fetchall() if len(data) == 0: if table not in {"follow_up_data", "pet_reports", 'radiology'}: cursor.execute("INSERT INTO " + table + "(file_number) VALUES ('" + file_number + "')") print(file_number + " does not exist in table " + table + ". Enter new record") add_new(conn, cursor, file_number, table, user_name, folders, file) else: todo = ask.ask_list(file_number + " already exists in table " + table + ".", ["Edit record", "Add new record for same file number", "Edit None"]) if todo == "Edit record": edit_record(conn, cursor, file_number, table, user_name, folders, file) elif todo == "Add new record for same file number": print("Add additional record module TBD") ask_table = ask.ask_y_n("Add another table?") else: radio = Radiology(conn, cursor, file_number, user_name) tables = radio.tables for tab in tables: ask_table = True while ask_table: sql_statement = "SELECT rowid FROM " + tab + " WHERE file_number = ?" cursor.execute(sql_statement, (file_number, )) dat = cursor.fetchall() if len(dat) == 0: print(file_number + " does not exist in table " + tab) enter_tab = ask.ask_y_n('Enter data?') if enter_tab: cursor.execute("INSERT INTO " + tab + "(file_number) VALUES ('" + file_number + "')") add_new(conn, cursor, file_number, tab, user_name, folders, file) else: todo = ask.ask_list(file_number + " already exists in table " + tab + ".", ["Edit record", "Edit None"]) if todo == "Edit record": edit_record(conn, cursor, file_number, tab, user_name, folders, file) # data.append(dat) # print(data, 'length data is =', len(data)) # # remove later - test_function ask_table = ask.ask_y_n("Add another data set for " + tab + "?") return ask_table
def review_df_row(df): check_row = len(df)-1 print(df.iloc[check_row].to_string()) check = ask.ask_y_n("Is data entered correct?") if check: return check, df else: df = df.drop(df.index[check_row]) return check, df
def add_ffpe(self): table_next = True while table_next: table = AddBlockData.get_table() if table == ffpe_db_tables()[0]: self.add_block_list() else: self.add_path_report(table) table_next = ask.ask_y_n("Add/update another table?")
def add_data(self): add_block = True while add_block: data = self.add_update_patient() data.to_sql("block_list", self.conn, index=False, if_exists="append") add_block = ask.ask_y_n('Add another block?')