Ejemplo n.º 1
0
Archivo: db.py Proyecto: Xifax/suzu
    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)
Ejemplo n.º 2
0
Archivo: db.py Proyecto: Xifax/suzu
 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
Ejemplo n.º 3
0
  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
Ejemplo n.º 4
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 5
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 6
0
        def commitChanges(self):
            try:
                session.commit()
                session.flush()

            except IntegrityError as e:
                session.rollback()
                raise DatabaseException(e, self.Entity)
Ejemplo n.º 7
0
        def commitChanges(self):
            try:
                session.commit()
                session.flush()

            except IntegrityError as e:
                session.rollback()
                raise DatabaseException(e, self.Entity)
Ejemplo n.º 8
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 9
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 10
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 11
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 12
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 13
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 14
0
 def _t(*args, **kwargs):
     commit = False
     try:
         res = func(*args, **kwargs)
         commit = True
         return res
     finally:
         if commit:
             session.commit()
         else:
             session.rollback()
Ejemplo n.º 15
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 16
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 17
0
Archivo: db.py Proyecto: Xifax/suzu
    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)
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
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
Ejemplo n.º 20
0
Archivo: db.py Proyecto: Xifax/suzu
 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
Ejemplo n.º 21
0
 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
Ejemplo n.º 22
0
Archivo: db.py Proyecto: Xifax/suzu
 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)
Ejemplo n.º 23
0
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
Ejemplo n.º 24
0
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
Ejemplo n.º 25
0
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
Ejemplo n.º 26
0
Archivo: db.py Proyecto: Xifax/suzu
 def updateQuizItem(self, item):
     try:
         session.commit()
     except Exception, e:
         session.rollback()
         log.error(e)
Ejemplo n.º 27
0
 def tearDown(self):
     """Method used to destroy a database"""
     session.rollback()
     drop_all()
Ejemplo n.º 28
0
    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
Ejemplo n.º 29
0
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