def initializeCurrentSession(self, mode, sessionSize): #if mode == 'kanji': if mode == modes.kanji: selection = Kanji.query.filter_by(active = True).all() #elif mode == 'words': elif mode == modes.words: selection = Word.query.filter_by(active = True).all() else: selection = () # Kanji && Words? self.endCurrentSesion() n = sessionSize shuffle(selection) if n > len(selection) : n = len(selection) # without any try's and ValueErrors random_selection = sample(selection, n) # serious stuff ahead! for item in random_selection: # mark n random items as 'current' item.current_session = True item.been_in_session = item.been_in_session + 1 #may be useful later on try: session.commit() except Exception, e: session.rollback() log.error(e)
def addItemsToDbGrade(self, grade): success = False try: grade = int(grade) if 0 < grade < 11: selection = self.db.character.filter(self.db.character.grade==grade).all() now = datetime.now() grade = u'grade' + str(grade) for kanji in selection: if session.query(Kanji).filter_by(character = kanji.literal).count() == 0: Kanji(character = kanji.literal, tags = grade, next_quiz = now, leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) success = True try: session.commit() except IntegrityError: session.rollback() success = False except: success = False return success
def updateJobStatus(self, jobID, status, msg): from tbl import EFJBLS from elixir import session session.close() obj = EFJBLS.query.filter_by(JBLSIDNM = jobID).first() pgmName = None if obj: pgmName = obj.JBLSPRPG now = dt.datetime.now() if obj.JBLSPRDT is None: obj.JBLSPRDT = now.date().tointeger() if obj.JBLSPRTM is None: obj.JBLSPRTM = now.time().tointeger() obj.JBLSUPDT = now.date().tointeger() obj.JBLSUPTM = now.time().tointeger() obj.JBLSPRST = status if msg: msg = msg[:64] obj.JBLSPRMS = msg if not session.transaction_started(): session.begin() try: session.update(obj) session.commit() except: session.rollback() raise return pgmName
def addItemsToDbJlpt(self, jlptGrade): success = False try: jlptGrade = int(jlptGrade) if 0 < jlptGrade < 5: selection = self.db.character.filter(self.db.character.jlpt==jlptGrade).all() #time for next quiz now = datetime.now() jlpt = u'jlpt' + str(jlptGrade) for kanji in selection: #check if already exists (time consuming?) #if len(Kanji.query.filter_by(character = kanji.literal).all()) == 0: if session.query(Kanji).filter_by(character = kanji.literal).count() == 0: # for easier management Kanji(character = kanji.literal, tags = jlpt, next_quiz = now, leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) success = True try: session.commit() except IntegrityError: session.rollback() #is it ok in case just one item err'd? success = False except ValueError, e: log.error(e)
def addSentenceToDb(self, kanji, sentence, translation): Kanji.query.filter_by(character = kanji).one().example.append(Example(sentence = sentence,translation = translation)) try: session.commit() except Exception, e: session.rollback() log.error(e)
def commitChanges(self): try: session.commit() session.flush() except IntegrityError as e: session.rollback() raise DatabaseException(e, self.Entity)
def toggleActive(self, item): item.active = not item.active item.current_session = not item.current_session try: session.commit() except Exception, e: session.rollback() log.error(e)
def addExamplesForKanji(self, kanji, examples): for example in examples: kanji.example.append(Example(sentence = example,translation = examples[example])) try: session.commit() except Exception, e: session.rollback() log.error(e)
def addKanjiToDb(self, character): if(len(Kanji.query.filter_by(character = character).all()) == 0): Kanji(character = character, tags = u'user', next_quiz = datetime.now(), leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) try: session.commit() except Exception, e: session.rollback() log.error(e)
def updateActive(self, criteria, flag): lookup = Kanji.query.filter(Kanji.tags.like(u'%' + criteria + '%' )).all() for item in lookup: item.active = flag try: session.commit() except Exception, e: session.rollback() log.error(e)
def addExamples(self, item, examples): '''Item is either kanji or word''' if item is not None: for example in examples: item.example.append(Example(sentence = example,translation = examples[example])) try: session.commit() except Exception, e: session.rollback() log.error(e)
def addWordToDb(self, kanji, word): """Adds word corresponding to kanji from quiz/example""" if len(word) > 1: if(len(Word.query.filter_by(word = word).all()) == 0): kanji.word.append(Word(word = word, next_quiz = datetime.now(), leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0)) try: session.commit() except Exception, e: session.rollback() log.error(e)
def _t(*args, **kwargs): commit = False try: res = func(*args, **kwargs) commit = True return res finally: if commit: session.commit() else: session.rollback()
def addWordToDbAndLinkToExample(self, kanji, word, sentence): if len(word) > 1: if(len(Word.query.filter_by(word = word).all()) == 0): newWord = Word(word = word, next_quiz = datetime.now(), leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) kanji.word.append(newWord) sentence.word.append(newWord) try: session.commit() except Exception, e: session.rollback() log.error(e)
def endCurrentSesion(self): for kanji in Kanji.query.all(): kanji.current_session = False kanji.wrong_in_current_session = 0 for word in Word.query.all(): word.current_session = False word.wrong_in_current_session = 0 try: session.commit() except Exception, e: session.rollback() log.error(e)
def clearDB(self): # Kanji.query.delete() # Word.query.delete() # Example.query.delete() #NB: for table in reversed(meta.Base.metadata.sorted_tables): meta.Session.execute(table.delete()); meta.Session.commit() try: for table in reversed(metadata.sorted_tables) : session.execute(table.delete()); session.commit() # session.commit() except Exception, e: session.rollback() log.error(e)
def remove_cards(): if request.method == 'POST': results = [] now = datetime.now() reason = request.form['reason'] if not reason: raise Exception("reason required") if not request.form['is_permanent']: raise Exception("is_permanent required") if request.form['is_permanent'] == 'yes': new_status = 'permanently_gone' else: new_status = 'temporarily_out' try: for key, val in request.form.items(): match = re.match('remove_(?P<num>\d+)', key) if not match: #if this isn't remove_id continue if not val: #if the browser passed us an unchecked checkbox continue rid = int(match.group('num')) card = InvCard.query.filter_by(rowid=rid).one() if card.inventory_status != "present": raise Exception("can't remove non-present card") results.append({ 'rowid': card.rowid, 'set_name': card.set_name, 'name': card.name, 'box': card.box, 'box_index': card.box_index}) card.box = None card.box_index = None card.inventory_status = new_status InvLog(card=card, direction='removed', reason=reason,date=now) session.commit() results = sorted(results, key = lambda r: (r['box'],r['box_index'])) return render_template("results.html", cards=results) except Exception as e: session.rollback() raise e
def addItemsToDb(self, jlpt=-1, grade=-1, frequency=0, compare='='): success = False if frequency == 0: try: jlpt = int(jlpt) grade = int(grade) if (0 < grade < 11) or (0 < jlpt < 5): #if jlpt != '-1': #elif grade != '-1': selection = self.db.character.filter(or_(self.db.character.grade==grade, self.db.character.jlpt==jlpt)).all() #add timers now = datetime.now() grade = u'grade' + str(grade) jlpt = u'jlpt' + str(jlpt) for kanji in selection: if session.query(Kanji).filter_by(character = kanji.literal).count() == 0: Kanji(character = kanji.literal, tags = jlpt + u';' + grade, next_quiz = now, leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) success = True try: session.commit() except IntegrityError: session.rollback() success = False except: success = False elif frequency > 0: selection = self.db.character.filter(self.db.character.freq==frequency).all() for kanji in selection: if session.query(Kanji).filter_by(character = kanji.literal).count() == 0: Kanji(character = kanji.literal, tags = u'', next_quiz = now, leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) success = True try: session.commit() except IntegrityError: session.rollback() success = False return success
def addItemsToDb(self, min, max, exact=False, tag='user'): self.count = 0 success = False items = self.frequency.getFrequencyRange(min, max, exact) now = datetime.now() for item in items: if session.query(Item).filter_by(item = item).count() == 0: Item(item = item.lower(), tags = tag, next_quiz = now, leitner_grade = Leitner.grades.None.index, active = True, current_session = False, been_in_session = 0) self.count = self.count + 1 success = True try: session.commit() except IntegrityError: session.rollback() success = False return success
def saveSessionStats(self, stats): stats.calculateActiveTime() try: current_session = Session.query.filter_by(date = date.today()).one() current_session.items_correct += stats.answeredCorrect current_session.items_wrong += (stats.totalItemSeen - stats.answeredCorrect) current_session.time_running += (datetime.now() - stats.startedQuiz).seconds current_session.time_active += stats.totalQuizActiveTime.seconds current_session.time_paused += stats.totalPauseTime.seconds current_session.times_launched += 1 except NoResultFound: Session(date = date.today(), items_correct = stats.answeredCorrect, items_wrong = (stats.totalItemSeen - stats.answeredCorrect), time_running = (datetime.now() - stats.startedQuiz).seconds, time_active = stats.totalQuizActiveTime.seconds, time_paused = stats.totalPauseTime.seconds, times_launched = 1) try: session.commit() except Exception, e: session.rollback() log.error(e)
def move_cards(): if request.method == 'POST': results = [] now = datetime.now() new_box = request.form.items["new_box"] new_box_index = session.query(func.max(InvCard.box_index)).filter_by(box=new_box).one()[0] try: for key, val in request.form.items(): match = re.match('move_(?P<num>\d+)', key) if not match: #if this isn't move_id continue if not val: #if the browser passed us an unchecked checkbox continue rid = int(match.group('num')) card = InvCard.query.filter_by(rowid=rid).one() if card.inventory_status != "present": raise Exception("can't move non-present card") results.append({ 'rowid': card.rowid, 'set_name': card.set_name, 'name': card.name, 'box': card.box, 'box_index': card.box_index}) new_box_index += 1 card.box = new_box card.box_index = new_box_index results = sorted(results, key = lambda r: (r['box'],r['box_index'])) return render_template("results.html", cards=results) except Exception as e: session.rollback() raise e
def set_values_pessoa(usuario, validado): # Instanciando o modelo e associando os campos validados e # transformados em valores python à instância que será # salva no db. usuario.ip_addr = validado['remote_addr'] # -- Dados de acesso usuario.email = validado['email'] if validado.get('senha'): set_senha(usuario, validado['senha']) # -- Dados pessoais usuario.nome = validado['nome'] usuario.cpf = validado['cpf'] usuario.data_nascimento = validado['data_nascimento'] usuario.sexo = validado['sexo'] # -- Sobre a sua localização geográfica endereco = get_or_create(common_models.Endereco, cep=validado['end_cep'], uf=validado['end_uf'], cidade=validado['end_cidade'], bairro=validado['end_bairro'], logradouro=validado['end_logradouro'], numero=validado['end_numero'], complemento=validado['end_complemento'], latitude=validado['end_latitude'], longitude=validado['end_longitude'])[0] usuario.endereco = endereco # -- Contatos e espaços na rede usuario.website = validado['website'] usuario.telefones = [] for i, num in enumerate(validado['pessoa_tel']): tel = get_or_create(common_models.Telefone, numero=num, tipo=validado['pessoa_tel_tipo'][i])[0] usuario.telefones.append(tel) usuario.redes_sociais = [] if validado.has_key('rs_nome'): for i in range(len(validado['rs_nome'])): rsocial = get_or_create(common_models.RedeSocial, nome=validado['rs_nome'][i], link=validado['rs_link'][i])[0] usuario.redes_sociais.append(rsocial) usuario.feeds = [] if validado.has_key('feed_nome'): for i in range(len(validado['feed_nome'])): feed = get_or_create(common_models.Feed, nome = validado['feed_nome'][i], link = validado['feed_link'][i])[0] usuario.feeds.append(feed) try: session.commit() except Exception, e: session.rollback() raise e
def updateQuizItem(self, item): try: session.commit() except Exception, e: session.rollback() log.error(e)
def tearDown(self): """Method used to destroy a database""" session.rollback() drop_all()
try: session.commit() except Exception, e: session.rollback() raise e projeto = save_files(projeto, validado["avatar"], validado["documentacoes"]) if validado.get("files_to_remove"): projeto = remove_docs(projeto, validado["files_to_remove"]) try: session.commit() except Exception, e: session.rollback() raise e return projeto def remove_docs(projeto, docs): docs = map(long, docs.split(",")) saved_docs = [i for i in projeto.documentacoes] projeto.documentacoes = [] for doc in saved_docs: if doc.id in docs: try: remove_file(projeto.id, doc.doc) except Exception, e: print
def set_values_projeto(projeto, validado, user): blank = lambda x: None if not x.strip() else x.strip() # -- Dados do projeto projeto.nome = validado["nome"] if validado["tipo"] == "outro": projeto.tipo = validado["tipo_outro"] else: projeto.tipo = validado["tipo"] projeto.tipo_convenio = validado["tipo_convenio"] projeto.numero_convenio = validado["numero_convenio"] # -- Localização geográfica do projeto endsede = get_or_create( common_models.Endereco, cep=validado["end_proj_cep"], numero=validado["end_proj_numero"], logradouro=validado["end_proj_logradouro"], complemento=blank(validado["end_proj_complemento"]), uf=validado["end_proj_uf"], cidade=validado["end_proj_cidade"], bairro=validado["end_proj_bairro"], latitude=blank(validado["end_proj_latitude"]), longitude=blank(validado["end_proj_longitude"]), )[0] projeto.endereco_sede = endsede projeto.local = validado["local_proj"] projeto.enderecos = [] if projeto.local == "outros": for i in range(len(validado["end_outro_nome"])): endereco = get_or_create( common_models.Endereco, nome=validado["end_outro_nome"][i], cep=validado["end_outro_cep"][i], numero=validado["end_outro_numero"][i], logradouro=validado["end_outro_logradouro"][i], complemento=blank(validado["end_outro_complemento"][i]), uf=validado["end_outro_uf"][i], cidade=validado["end_outro_cidade"][i], bairro=validado["end_outro_bairro"][i], latitude=blank(validado["end_outro_latitude"][i]), longitude=blank(validado["end_outro_longitude"][i]), )[0] projeto.enderecos.append(endereco) # -- Contatos e espaços na rede ###################### # CAMPOS EXCLUÍDOS!!! # projeto.frequencia = validado['frequencia'] ###################### projeto.redes_sociais = [] for i in range(len(validado["rs_nome"])): rsocial = get_or_create(common_models.RedeSocial, nome=validado["rs_nome"][i], link=validado["rs_link"][i])[0] projeto.redes_sociais.append(rsocial) projeto.feeds = [] for i in range(len(validado["feed_nome"])): feed = get_or_create(common_models.Feed, nome=validado["feed_nome"][i], link=validado["feed_link"][i])[0] projeto.feeds.append(feed) # -- Comunicação e Cultura Digital projeto.email = validado["email_proj"] projeto.website = validado["website_proj"] def get_tel(numero, tipo): tel = get_or_create(common_models.Telefone, numero=numero, tipo=tipo)[0] return tel projeto.sede_possui_tel = validado["sede_possui_tel"] == "sim" if projeto.sede_possui_tel: for i, t in enumerate(validado["sede_tel"]): tel = get_tel(t, validado["sede_tel_tipo"][i]) projeto.telefones.append(tel) else: projeto.pq_sem_tel = validado["pq_sem_tel"] if projeto.pq_sem_tel == "outro": projeto.pq_sem_tel = validado["pq_sem_tel_outro"] projeto.sede_possui_net = validado["sede_possui_net"] == "sim" if projeto.sede_possui_net: projeto.tipo_internet = validado["tipo_internet"] else: projeto.pq_sem_internet = validado["pq_sem_internet"] if projeto.pq_sem_internet == "outro": projeto.pq_sem_internet = validado["pq_sem_internet_outro"] # -- Entidade Proponente projeto.entidade = get_or_create(models.Entidade, nome=validado["nome_ent"])[0] if validado.get("endereco_ent_proj") == "nao": projeto.entidade.endereco = get_or_create( common_models.Endereco, nome=validado["nome_ent"], cep=validado["end_ent_cep"], numero=validado["end_ent_numero"], logradouro=validado["end_ent_logradouro"], complemento=blank(validado["end_ent_complemento"]), uf=validado["end_ent_uf"], cidade=validado["end_ent_cidade"], bairro=validado["end_ent_bairro"], latitude=blank(validado["end_ent_latitude"]), longitude=blank(validado["end_ent_longitude"]), )[0] else: projeto.entidade.endereco = projeto.endereco_sede projeto.entidade.telefones = [] for i, t in enumerate(validado["ent_tel"]): tel = get_tel(t, validado["ent_tel_tipo"][i]) projeto.entidade.telefones.append(tel) projeto.entidade.email = validado["email_ent"] projeto.entidade.website = validado["website_ent"] projeto.entidade.convenios = [] if validado["convenio_ent"] == "sim": for i in validado["outro_convenio"]: conv = get_or_create(models.Convenio, nome=i)[0] projeto.entidade.convenios.append(conv) # -- Atividades exercidas pelo projeto # --- Qual a área de atuação das atividades do Projeto? projeto.atividades = [] for i in validado["atividade"]: obj = get_or_create(models.Atividade, nome=i)[0] projeto.atividades.append(obj) # --- Com qual Público Alvo o Projeto é desenvolvido? # ---- Sob aspectos de Faixa Etária projeto.publico_alvo = [] for i in validado["publico_alvo"]: obj = get_or_create(models.PublicoAlvo, nome=i)[0] projeto.publico_alvo.append(obj) # ---- Sob aspectos das Culturas Tradicionais projeto.culturas_tradicionais = [] for i in validado["culturas_tradicionais"]: obj = get_or_create(models.CulturaTradicional, nome=i)[0] projeto.culturas_tradicionais.append(obj) # ---- Sob aspectos de Ocupação do Meio projeto.ocupacao_do_meio = [] for i in validado["ocupacao_do_meio"]: obj = get_or_create(models.OcupacaoDoMeio, nome=i)[0] projeto.ocupacao_do_meio.append(obj) # ---- Sob aspectos de Gênero projeto.genero = [] for i in validado["genero"]: obj = get_or_create(models.Genero, nome=i)[0] projeto.genero.append(obj) # --- Quais são as Manifestações e Linguagens que o Projeto utiliza # em suas atividades? projeto.manifestacoes_linguagens = [] for i in validado["manifestacoes_linguagens"]: obj = get_or_create(models.ManifestacaoLinguagem, nome=i)[0] projeto.manifestacoes_linguagens.append(obj) # --- O Projeto participa de alguma Ação do Programa Cultura Viva? projeto.acao_cultura_viva = [] if validado["participa_cultura_viva"] == "sim": for i in validado["acao_cultura_viva"]: obj = get_or_create(models.AcaoCulturaViva, nome=i)[0] projeto.acao_cultura_viva.append(obj) projeto.descricao = validado["descricao"] # -- Parcerias do Projeto projeto.parcerias = [] if validado["estabeleceu_parcerias"] == "sim": for i in validado["parcerias"] + validado["outro_parceiro"]: obj = get_or_create(models.Parceiro, nome=i)[0] projeto.parcerias.append(obj) # -- Índice de acesso à cultura projeto.ind_oficinas = validado["ind_oficinas"] projeto.ind_expectadores = validado["ind_expectadores"] projeto.ind_populacao = validado["ind_populacao"] projeto.responsavel = user try: session.commit() except Exception, e: session.rollback() raise e