def post(self, request, *args, **kwargs): form_class = self.get_form_class() form = self.get_form(form_class) if form.is_valid(): query_text = request.POST["pdb_code"] print query_text pdb_status_getter = PDBstatusGetter(query_text) pdb_status = pdb_status_getter.get_status() status_text = str(pdb_status) if status_text == 'False': pdb_info_getter = PDBinfoGetter(query_text) pdb_map = pdb_info_getter.main() print pdb_map return render(request, self.template_name, {'pdb_map': pdb_map, 'code': query_text, 'pdb_status': pdb_status, 'msg': self.msg, 'spt_ref_file': self.spt_ref_file, 'uniprot_id': self.uniprot_id, 'genbank': self.genbank, 'title': self.title, 'target_residue_files': self.target_residue_files, 'sequence_annotations': self.sequence_annotations, 'length_sa': self.length_sa}) elif status_text == 'True': pdb_code = query_text.upper() # Check if the pdb and ciff files have been downloaded. If not, # then fetch them. preprocessor = PDBPreProcessor(pdb_code) preprocessor.preprocess_check() number_of_structures, chains_in_asymmetric_unit = \ preprocessor.count_structures_in_asymmetric_unit() experiment = preprocessor.get_experiment_type() resolution = preprocessor.get_diffraction_resolution() # Get organism ID, gene names, pdb_sequences, and paper # metadata from .ciff file cif_parser = CIFFParser(pdb_code) chains, genes, organisms, pdb_sequences, title, authors = \ cif_parser.get_gene_annotations() sequence_annotations = \ cif_parser.collate_sequence_annotations() cif_parser.write_fasta(sequence_annotations) gene_info = cif_parser.get_gene_info_from_genbank() spt_writer = JmolSPTWriter(pdb_code) spt_writer.write_spt() spt_ref_file = 'jmol_script_' + pdb_code + '.spt' if sequence_annotations != []: for gene in gene_info: gene_name = gene_info[gene]['GENE'][0] product = gene_info[gene]['PRODUCT'] function = gene_info[gene]['FUNCTION'] ref_seq = gene_info[gene]['PROTEIN_ID'] for information in sequence_annotations: if gene_name.upper() == information[1]: information[1] = gene_name chain = information[0] organism = information[2] aa_sequence = information[3] # Add data to database created, msg = \ set_pdb_information( pdb_code, title, authors, genes, organism, number_of_structures, chain, chains_in_asymmetric_unit, ref_seq, product, function, gene_name, spt_ref_file, aa_sequence) print msg colors = ['yellow', 'green', 'red', 'blue', 'orange', 'purple', 'grey'] recorded_info = {} for entry in sequence_annotations: if entry[1].upper() in gene_info: recorded_info[entry[1].upper()] = \ gene_info[entry[1].upper()] recorded_info[entry[1].upper()]['SEQUENCE'] = \ entry[3] recorded_info[entry[1].upper()]['CHAIN'] = \ entry[0] recorded_info[entry[1].upper()]['ORGANISM'] = \ entry[2] library_calculator = \ LibraryCalculator(aa_sequence=entry[3]) saturated_library_size = \ library_calculator.calculate_library_size( full_saturation=True) recorded_info[entry[1].upper()]['LIBRARY_SIZE'] = \ saturated_library_size recorded_info[entry[1].upper()]['COLOR'] = \ colors[sequence_annotations.index(entry)] tot_library_size = 0 for key in recorded_info: tot_library_size += \ recorded_info[key]['LIBRARY_SIZE'] print "recorded_info:", recorded_info print "sequence annotations:", sequence_annotations print "gene info:", gene_info return render(request, self.template_name, {'tot_library_size': tot_library_size, 'recorded_info': recorded_info, 'resolution': resolution, 'experiment': experiment, 'colors': colors, 'msg': self.msg, 'target_residue_files': self.target_residue_files, 'number_of_structures': number_of_structures, 'str_chains': chains_in_asymmetric_unit, 'title': title, 'authors': authors, 'gene_info': gene_info, 'spt_ref_file': spt_ref_file, 'code': pdb_code, 'chains': chains, 'genes': genes, 'organisms': organisms, 'pdb_sequences': pdb_sequences, 'sequence_annotations': sequence_annotations}) else: return render(request, self.template_name, {'code': query_text, 'pdb_status': pdb_status, 'msg': self.msg, 'spt_ref_file': self.spt_ref_file, 'uniprot_id': self.uniprot_id, 'genbank': self.genbank, 'title': self.title, 'target_residue_files': self.target_residue_files, 'sequence_annotations': self.sequence_annotations, 'length_sa': self.length_sa})