Пример #1
0
def getLegislativeBody(body_name):
    """  """
    try:
        body = list(
            dbConn.build_collection('orgao').find({"tipoOrgao": body_name}, {
                '_id': 0,
                'sigla': 1
            }))
        if len(body) > 0:
            body_initials = [item['sigla'] for item in body]
            return body_initials
        else:
            return None
    except Exception as e:
        print(e)
Пример #2
0
    def __init__(self):
        self._collection_deputy = dbConn.build_collection('deputado')
        self._query_fields = {
            '_id': 0,
            'ideCadastro': 1,
            'nomeParlamentarAtual': 1,
            'ufRepresentacaoAtual': 1,
            'partidoAtual': 1,
            'urlFoto': 1
        }

        @app.route("/deputy_listing", methods=['POST'])
        def getDeputyListing():
            allDeputiesId = self.getDeputyIdList()
            allDeputies = []
            for depId in allDeputiesId:
                result = list(
                    self._collection_deputy.find({
                        'ideCadastro': depId
                    }, self._query_fields).sort('numLegislatura', -1))
                allDeputies.append(result[0])
            return {'allDeputies': allDeputies}

        @app.route("/deputy_listing_legislature", methods=['POST'])
        def getDeputyListingLegislature():
            legislature_number = request.form['legislature']
            allDeputiesId = self.getDeputyIdList()
            allDeputies = []
            for depId in allDeputiesId:
                result = list(
                    self._collection_deputy.find({
                        'ideCadastro':
                        depId,
                        'numLegislatura':
                        str(legislature_number)
                    }))
                allDeputies.append(result[0])
            return {'allDeputies': allDeputies}
Пример #3
0
def get_count_deputies_by_gender():
    genderCount = {}
    result = list(
        dbConn.build_collection('deputado').aggregate([{
            "$group": {
                "_id": {
                    "legislatura": "$numLegislatura",
                    "sexo": "$sexo",
                    "deputado": "$ideCadastro"
                }
            }
        }]))

    for item in result:
        if item['_id']['legislatura'] in genderCount:
            if item['_id']['sexo'] in genderCount[item['_id']['legislatura']]:
                genderCount[item['_id']['legislatura']][item['_id']
                                                        ['sexo']] += 1
            else:
                genderCount[item['_id']['legislatura']][item['_id']
                                                        ['sexo']] = 1
        else:
            genderCount[item['_id']['legislatura']] = {item['_id']['sexo']: 1}
    return genderCount
Пример #4
0
 def __init__(self, id_register):
     self.id_register = id_register
     self._collection = dbConn.build_collection('deputado')
     self.history = self._history()
Пример #5
0
    def __init__(self):

        self._collection_deputy = dbConn.build_collection('deputado')
        self._collection_uf = dbConn.build_collection('uf')
        self._collection_expense = dbConn.build_collection('gasto')

        @app.route("/professions", methods=['POST'])
        def getProfessionsChartData():
            allProfessionData = {}
            for legislature in LEGISLATURES:
                query_search = {'numLegislatura': str(legislature)}
                query_field = {'nomeProfissao': 1, '_id': 0}
                result = list(
                    self._collection_deputy.find(query_search, query_field))
                if result:
                    result_values = [
                        list(map(str.strip, item['nomeProfissao'].split(',')))
                        if item['nomeProfissao'] is not None else
                        ["Não informada"] for item in result
                    ]
                    result_values_merged = list(
                        chain.from_iterable(result_values))
                    result_counter = dict(Counter(result_values_merged))
                    result_counter_fmt = {
                        'data': [{
                            'name': key,
                            'value': value
                        } for key, value in result_counter.items()]
                    }
                    allProfessionData.update(
                        {str(legislature): result_counter_fmt['data']})
            return {'professionData': allProfessionData}

        @app.route("/schooling", methods=['POST'])
        def getSchoolingChartData():
            allSchoolingData = {}
            for legislature in LEGISLATURES:
                query_search = {'numLegislatura': str(legislature)}
                query_field = {'escolaridade': 1, '_id': 0}
                result = list(
                    self._collection_deputy.find(query_search, query_field))
                if result:
                    result_values = [
                        item['escolaridade'] if item['escolaridade']
                        is not None else "Não informado" for item in result
                    ]
                    result_counter = dict(Counter(result_values))
                    result_counter_sorted = {
                        key: value
                        for key, value in sorted(result_counter.items(),
                                                 key=lambda item: item[1],
                                                 reverse=True)
                    }
                    result_counter_fmt = {
                        'data':
                        [[key, value]
                         for key, value in result_counter_sorted.items()]
                    }
                    allSchoolingData.update(
                        {str(legislature): result_counter_fmt['data']})
            return {'schoolingData': allSchoolingData}

        @app.route("/total_spent", methods=['POST'])
        def getTotalSpentChartData():
            allSpent = {}
            for legislature in LEGISLATURES:
                query = [{
                    '$match': {
                        'codLegislatura': legislature
                    }
                }, {
                    '$group': {
                        '_id': 0,
                        'sum': {
                            '$sum': '$vlrLiquido'
                        }
                    }
                }]
                result = list(self._collection_expense.aggregate(query))
                if result:
                    result = result[0]['sum']
                    allSpent.update({legislature: format_number(result)})
            return {'allSpent': allSpent}

        @app.route("/values_by_state", methods=['POST'])
        def getValuesByState():
            query = {'sigla': 1, 'cotaParlamentar': 1, '_id': 0}
            result = list(self._collection_uf.find({}, query))
            result_fmt = [[
                'br-' + item['sigla'].lower(), item['cotaParlamentar']
            ] for item in result]
            return {'data': {'56': result_fmt}}

        @app.route("/deputies_quantity", methods=['POST'])
        def getDeputiesQuantity():
            query = {'sigla': 1, 'cotaParlamentar': 1, '_id': 0}
            result = list(self._collection_uf.find({}, query))
            result_fmt = [[
                'br-' + item['sigla'].lower(), item['cotaParlamentar']
            ] for item in result]
            return {'data': result_fmt}

        @app.route("/party_representation", methods=['POST'])
        def getPartiesRepresentation():
            data = {}
            for legislature in LEGISLATURES:
                query = [{
                    '$match': {
                        'numLegislatura': str(legislature)
                    }
                }, {
                    '$group': {
                        '_id': '$partidoAtual.sigla',
                        'count': {
                            '$sum': 1
                        }
                    }
                }]
                result = list(self._collection_deputy.aggregate(query))
                if len(result) > 0:
                    result_fmt = [[
                        item['_id'], item['count'], item['_id'],
                        color_party(item['_id'])
                    ] for item in result]
                    data.update({legislature: result_fmt})
            return {'data': data}
Пример #6
0
    def getPresenceInEvent(self,
                           event_collection_name,
                           presence_key_name,
                           date_key_name,
                           legislature_number=55):
        """ Given a event collection name and which key is used to identify the presences and the date,
        returns a dictionary w/ the total n of events, the presence of the deputy and the median presence for that
        event (given the deputy's period of exercise)"""
        try:
            # ======= periods of active exercise
            # dates_in_exercise = self.getDeputyDatesExercise(legislature_number)

            if event_collection_name.endswith('comissao_inquerito'):
                print('CPI')
                cpi_comissions_initials = getLegislativeBody(
                    'Comissão Parlamentar de Inquérito')

                # ======= recover all events
                query = {
                    'ideCadastro': str(self.deputy.id_register),
                    'numLegislatura': str(legislature_number)
                }
                result_member_comissions = list(
                    self._collection_deputy.find(query))

                if len(result_member_comissions) > 0:
                    result_member_comissions = result_member_comissions[0]

                    deputy_cpi = [
                        item['siglaComissao'] for item in
                        result_member_comissions['comissoes']['comissao']
                        if item['siglaComissao'] in cpi_comissions_initials
                    ]

                    if len(deputy_cpi) > 0:

                        query_event = {'legislatura': int(legislature_number)}
                        all_events = list(
                            dbConn.build_collection(
                                event_collection_name).find(query_event))
                        cpi_events = [
                            event for event in all_events
                            if event['sigla'] in deputy_cpi
                        ]

                        if len(all_events) > 0:
                            presences = list(
                                chain.from_iterable([
                                    event[presence_key_name]
                                    for event in cpi_events
                                ]))
                            presences_by_deputy = Counter(presences)
                            mean_presence = np.mean(
                                list(presences_by_deputy.values()))
                            print(presences_by_deputy)
                            deputy_presence = presences_by_deputy[int(
                                self.deputy.id_register)]

                            print(event_collection_name, deputy_presence,
                                  len(cpi_events))

                            return {
                                'presence': deputy_presence,
                                'mean-presence': mean_presence,
                                'all-events': len(cpi_events)
                            }
                        else:
                            print('No events')
                            return None
                    else:
                        print('Deputy has no CPI')
                        return None
                else:
                    print('Deputy has no commission field')
                    return None

            elif event_collection_name.endswith('comissao_permanente'):
                print('CP')
                cp_comissions_initials = getLegislativeBody(
                    'Comissão Permanente')

                # ======= recover all events
                query = {
                    'ideCadastro': str(self.deputy.id_register),
                    'numLegislatura': str(legislature_number)
                }
                result_member_comissions = list(
                    self._collection_deputy.find(query))

                if len(result_member_comissions) > 0:
                    result_member_comissions = result_member_comissions[0]

                    deputy_cp = [
                        item['siglaComissao'] for item in
                        result_member_comissions['comissoes']['comissao']
                        if item['siglaComissao'] in cp_comissions_initials
                    ]

                    if len(deputy_cp) > 0:

                        query_event = {'legislatura': int(legislature_number)}
                        all_events = list(
                            dbConn.build_collection(
                                event_collection_name).find(query_event))
                        cp_events = [
                            event for event in all_events
                            if event['sigla'] in deputy_cp
                        ]

                        if len(all_events) > 0:
                            presences = list(
                                chain.from_iterable([
                                    event[presence_key_name]
                                    for event in cp_events
                                ]))
                            presences_by_deputy = Counter(presences)
                            mean_presence = np.mean(
                                list(presences_by_deputy.values()))
                            deputy_presence = presences_by_deputy[int(
                                self.deputy.id_register)]

                            print(event_collection_name, deputy_presence,
                                  len(cp_events))

                            return {
                                'presence': deputy_presence,
                                'mean-presence': mean_presence,
                                'all-events': len(cp_events)
                            }
                        else:
                            print('No events')
                            return None
                    else:
                        print('Deputy has no CP')
                        return None
                else:
                    print('Deputy has no commission field')
                    return None

            elif event_collection_name.endswith(
                    'audiencia_publica') or event_collection_name == "votacao":

                # ======= recover all events
                print(event_collection_name)
                query_event = {'legislatura': int(legislature_number)}
                query_deputy = {
                    'legislatura': int(legislature_number),
                    presence_key_name: float(self.deputy.id_register)
                }

                all_events = list(
                    dbConn.build_collection(event_collection_name).find(
                        query_event))

                if len(all_events) > 0:
                    presences = list(
                        chain.from_iterable([
                            event[presence_key_name] for event in all_events
                        ]))
                    presences_by_deputy = Counter(presences)
                    mean_presence = np.mean(list(presences_by_deputy.values()))

                    if event_collection_name == 'votacao':
                        deputy_presence = presences_by_deputy[str(
                            self.deputy.id_register)]
                    elif event_collection_name.endswith('audiencia_publica'):
                        deputy_presence = dbConn.build_collection(
                            event_collection_name).find(query_deputy).count()

                    print(event_collection_name, deputy_presence,
                          len(all_events))
                    return {
                        'presence': deputy_presence,
                        'mean-presence': mean_presence,
                        'all-events': len(all_events)
                    }
                else:
                    print('No events')
                return None
        except Exception as e:
            print(e)
Пример #7
0
 def __init__(self, id_register):
     self._collection_deputy = dbConn.build_collection('deputado')
     self._collection_authors = dbConn.build_collection('autoria')
     self._collection_expenses = dbConn.build_collection('gasto')
     self.deputy = self._set_up_deputy(id_register)