def save_filter(request, filter_name=None): if request.method == "POST": OutFormSet = formset_factory(OutForm) outformset = OutFormSet(request.POST) filterform = FilterForm(request.POST) if not outformset.is_valid() or not filterform.is_valid(): return HttpResponse("invalid form") filter_name=filterform.cleaned_data["name"] form_li = [i.cleaned_data for i in outformset.forms] if len(form_li) > 0: form_li[-1]["logical_operation"] = "none" dname = {"name" : filter_name} if filterform.cleaned_data.get("comment") is "": dname["comment"] = filterform.cleaned_data["comment"] _filter = make_filter_with_forms(form_li, dname) s = make_dbdb_session() ret = s.query(Filter).filter_by(name=filter_name).scalar() if ret is not None: s.delete(ret) s.commit() s.add(_filter) s.commit() s.close() return HttpResponse("%(name)s has been saved<br>======it looks like======<br> %(expr)s" % {'name' : filter_name, 'expr': _filter.expression})
def out_form(request): if request.method== "POST": OutFormSet = formset_factory(OutForm) outformset = OutFormSet(request.POST) if not outformset.is_valid(): HttpResponse("formset is not valid") db_form = DBForm(request.POST) s = make_dbdb_session() ret_prox = s.query(Db).all() dbs = [(i.name, i.name) for i in ret_prox] s.close() del ret_prox db_form.fields['input_db'].choices = dbs db_form.full_clean() input_db_name = db_form.cleaned_data["input_db"] if not verify_db_name(input_db_name): return HttpResponse("need a real dbname") session = make_input_db_session(input_db_name, echo=ECHO) start = time.time() base_q = session.query(device).join("master_record") filter_dict_li = [i.cleaned_data for i in outformset.forms] filter_to_commit = make_filter_with_forms(filter_dict_li, {"name":db_form.cleaned_data["filter_name"]}) base_q = base_q.filter(filter_to_commit.expression) base_q = base_q.\ options(joinedload(device.problems), joinedload(device.master_record)) ret_o = base_q.all() li_to_commit = ret_o for i in ret_o: def span_left_from_dev(j): if j.text_records: [make_transient(i) for i in j.text_records] if j.patients: [make_transient(i) for i in j.patients] make_transient(j) def span_right_from_dev(j): if j.problem_code: make_transient(j.problem_code) make_transient(j) [span_right_from_dev(j) for j in i.problems] span_left_from_dev(i.master_record) make_transient(i) session.close() db_name = db_form.cleaned_data["output_db"] engine1 = create_engine("mysql://root@localhost:3306/mysql") if db_name in db_deny_set: return HttpResponse("You can't play with that db") if " " in db_name: return HttpResponse("no spaces here") dbdb_session = make_dbdb_session() ret_prox = dbdb_session.query(Db).all() dbli = [i.name for i in ret_prox] if db_name in dbli: if db_form.cleaned_data["drop_output_selector"]: engine1.execute("drop database " + db_name) engine1.execute("create database " + db_name) i = dbli.index(db_name) db_entry = ret_prox[i] db_entry.date_created = datetime.now() relation = Db_relation(child_db_name=db_name,parent_db_name=input_db_name) else: db_entry = Db(name=db_name, date_created=datetime.now()) relation = Db_relation(parent_db_name=input_db_name, child_db_name=db_name) engine1.execute("create database " + db_name) dbdb_session.add(filter_to_commit) dbdb_session.commit() relation._filter = filter_to_commit db_entry.child_relations.append(relation) dbdb_session.add(db_entry) dbdb_session.commit() dbdb_session.close() del engine1 engine1b = create_engine('mysql://root@localhost:3306/' + db_name) Base.metadata.create_all(bind=engine1b) del engine1b engine2 = create_engine('mysql://root@localhost:3306/' + db_name, echo=ECHO) nDBSesh = sessionmaker(bind=engine2)() #adds on duplicate key... to the mass inserts for the newly created db @compiles(Insert) def add_string(insert, compiler, **kw): s = compiler.visit_insert(insert, **kw) MDR_tables = [ "master_table", "text_table", "patient_table", "device_problem_table", "device_table", ] rems = "" if insert.table.name == "problem_code_table": rems = "device_problem_code = device_problem_code" elif insert.table.name in MDR_tables: rems = "MDR_report_key = MDR_report_key" return s + " ON DUPLICATE KEY UPDATE " + rems nDBSesh.add_all(li_to_commit) nDBSesh.commit() nDBSesh.execute("CREATE INDEX date_index ON master_table (date_report)") nDBSesh.execute("CREATE INDEX mdr_key_index ON text_table (MDR_report_key)") nDBSesh.close() del engine2 #redefining add_string prevents insert dying on other things @compiles(Insert) def add_string(insert, compiler, **kw): s = compiler.visit_insert(insert, **kw) return s stop = time.time() dif = stop - start return HttpResponse("inserted this many records into new db: " + str(len(ret_o)) + "<br>" + str(dif)+ "<br><br>" + "====The expression made looked like this==== <br>" + str(filter_to_commit.expression) + "") else: return HttpResponse("You gotta post")