def tipos_acidentes(request):
    """ Return the render with the kinds of accidents. """

    try:
        type_dao = TiposAcidentesDAO()
        types_accidents_list = type_dao.tipos_acidentes()
        types_accidents_year_list = type_dao.tipos_acidentes_ano()
        probability_list = type_dao.probabilidade_tipos_acidentes()
        average_deviation_list = type_dao.media_desvio_tipos_acidentes()

        type_list = get_type_list(probability_list)

    except (MySQLdb.Error, ResultadoConsultaNuloError):
        # logger.error(str(e))
        erro = "Ocorreu um erro no sistema, tente novamente mais tarde!"
        response = render_to_response(
            "index.html", {
                'erro': erro
            }, context_instance=RequestContext(request)
        )

        return response

    response = render_to_response(
        "tipos_acidentes.html", {
            'tipos_acidentes_list': types_accidents_list,
            'tipos_acidentes_ano_list': types_accidents_year_list,
            'anos': types_accidents_year_list[0].ano_list,
            'probabilidade_tipos_acidentes_list': probability_list,
            'tipos': type_list,
            'media_desvio_tipos_acidentes_list': average_deviation_list,
        }, context_instance=RequestContext(request)
    )

    return response
    def test_tipos_acidentes_ano(self):
        """
        Test if the method tipos_acidentes_ano is correctly instantiated.

        @brief Local variables
            tipos_acidentes_list -
                List of number of accidents and it's types.
            anos -
                List with years.
            descricao_tipos_acidentes_ano -
                List with a better description of each accident per year.
        """

        self.dao = TiposAcidentesDAO()
        tipos_acidentes_ano_list = self.dao.tipos_acidentes_ano()

        anos = tipos_acidentes_ano_list[0].ano_list
        self.assertEquals([
            2007,
            2008,
            2009,
            2010,
            2011,
            2012,
            2013
        ], anos)

        descricao_tipos_acidentes_ano = []
        for acidente in tipos_acidentes_ano_list:
            descricao_tipos_acidentes_ano.append(acidente.tipo)

        self.assertIn("Tombamento", descricao_tipos_acidentes_ano)
    def test_media_desvio_tipos_acidentes(self):
        """
        Test if the method media_desvio_tipos_acidentes is calculationg the
        average and the standar deviation correctly.
        @brief Local variables
            media_desvio_list -
                List of standard deviation's averages.
        """

        self.dao = TiposAcidentesDAO()
        media_desvio_list = self.dao.media_desvio_tipos_acidentes()

        for media_desvio_tipos_acidentes in media_desvio_list:
            self.assertTrue(media_desvio_tipos_acidentes.media > 0)
            self.assertTrue(media_desvio_tipos_acidentes.desvio > 0)
    def test_tipos_acidentes(self):
        """
        Gives a description of the class being tested.
        """

        self.dao = TiposAcidentesDAO()
        tipos_acidentes_list = self.dao.tipos_acidentes()

        self.assertAlmostEquals(len(tipos_acidentes_list), 10, delta=10)

        descricao_tipos_acidentes = []
        for acidente in tipos_acidentes_list:
            descricao_tipos_acidentes.append(acidente.tipo)

        self.assertIn("Tombamento", descricao_tipos_acidentes)
    def test_probabilidade_tipos_acidentes(self):
        """
        Test if the method probabilidade_tipos_acidentes is correctly
        calculating the probability.

        @brief Local variables
            probabilidade_tipos_list -
                List with probability of accidents per type.
        """

        self.dao = TiposAcidentesDAO()
        probabilidade_tipos_list = self.dao.probabilidade_tipos_acidentes()

        for prob_tipos in probabilidade_tipos_list:
            for probabilidade in prob_tipos.probabilidade_por_limite_list:
                self.assertTrue(probabilidade >= 0 and probabilidade <= 100)
class TestTiposAcidentes(DAO_Tests):

    """docstring for TestTiposAcidentes
    Class that tests the methods from tipos_acidentes_dao
    """

    def test_tipos_acidentes(self):
        """
        Gives a description of the class being tested.
        """

        self.dao = TiposAcidentesDAO()
        tipos_acidentes_list = self.dao.tipos_acidentes()

        self.assertAlmostEquals(len(tipos_acidentes_list), 10, delta=10)

        descricao_tipos_acidentes = []
        for acidente in tipos_acidentes_list:
            descricao_tipos_acidentes.append(acidente.tipo)

        self.assertIn("Tombamento", descricao_tipos_acidentes)

    def test_tipos_acidentes_ano(self):
        """
        Test if the method tipos_acidentes_ano is correctly instantiated.

        @brief Local variables
            tipos_acidentes_list -
                List of number of accidents and it's types.
            anos -
                List with years.
            descricao_tipos_acidentes_ano -
                List with a better description of each accident per year.
        """

        self.dao = TiposAcidentesDAO()
        tipos_acidentes_ano_list = self.dao.tipos_acidentes_ano()

        anos = tipos_acidentes_ano_list[0].ano_list
        self.assertEquals([
            2007,
            2008,
            2009,
            2010,
            2011,
            2012,
            2013
        ], anos)

        descricao_tipos_acidentes_ano = []
        for acidente in tipos_acidentes_ano_list:
            descricao_tipos_acidentes_ano.append(acidente.tipo)

        self.assertIn("Tombamento", descricao_tipos_acidentes_ano)

    def test_probabilidade_tipos_acidentes(self):
        """
        Test if the method probabilidade_tipos_acidentes is correctly
        calculating the probability.

        @brief Local variables
            probabilidade_tipos_list -
                List with probability of accidents per type.
        """

        self.dao = TiposAcidentesDAO()
        probabilidade_tipos_list = self.dao.probabilidade_tipos_acidentes()

        for prob_tipos in probabilidade_tipos_list:
            for probabilidade in prob_tipos.probabilidade_por_limite_list:
                self.assertTrue(probabilidade >= 0 and probabilidade <= 100)

    def test_media_desvio_tipos_acidentes(self):
        """
        Test if the method media_desvio_tipos_acidentes is calculationg the
        average and the standar deviation correctly.
        @brief Local variables
            media_desvio_list -
                List of standard deviation's averages.
        """

        self.dao = TiposAcidentesDAO()
        media_desvio_list = self.dao.media_desvio_tipos_acidentes()

        for media_desvio_tipos_acidentes in media_desvio_list:
            self.assertTrue(media_desvio_tipos_acidentes.media > 0)
            self.assertTrue(media_desvio_tipos_acidentes.desvio > 0)