Example #1
0
 def setUp(self):
     self.pipeline = PdlScraperPipeline()
     self.item = dict(
         fecha_presentacion=u'10/10/2013',
         codigo=u'11111111111',
         numero_proyecto=u'11111111111/2014-CR',
         short_url=u'',
         titulo='',
         expediente='',
         pdf_url='',
         time_created='',
         time_edited=datetime.date.today(),
         seguimiento_page='',
         grupo_parlamentario='',
         iniciativas_agrupadas=u'00154, 00353, 00368, 00484, 00486',
         nombre_comision='',
         numero_de_ley='',
         titulo_de_ley='',
         proponente='',
         congresistas=u'Espinoza Cruz  Marisol,Abugattás '
         u'Majluf  Daniel Fernando,Acha Roma'
         u'ni  Walter,Apaza Condori  Emiliano,'
         u'Nayap Kinin  Eduardo,Reynaga'
         u'Soto  Jhon Arquimides,Valencia '
         u'Quiroz  Jaime Ruben',
         seguimientos=[
             '',
             u'28/08/2014 Decretado a... Economía',
             u' ',
         ])
     self.db = db_connect()
Example #2
0
    def get_my_urls(self):
        db = db_connect()
        start_urls = []
        append = start_urls.append

        query = "select codigo, iniciativas_agrupadas, seguimiento_page " \
                "from pdl_proyecto WHERE legislatura={} order by time_edited".format(settings.LEGISLATURE)
        res = db.query(query)

        for i in res:
            iniciativas = i['iniciativas_agrupadas']
            if type(iniciativas) == list:
                if len(iniciativas) < 1:
                    if i['seguimiento_page'] != '':
                        # this field is empty, scrape it!
                        append(i['seguimiento_page'])

            elif iniciativas is None:
                if i['seguimiento_page'] != '':
                    append(i['seguimiento_page'])

            elif iniciativas.strip() == '':
                if i['seguimiento_page'] != '':
                    append(i['seguimiento_page'])

        return start_urls
Example #3
0
    def get_my_urls(self):
        """
        Find those proyectos with no seguimientos in our database or those
        that need to be updates.
        :return: set of URLs
        """
        db = db_connect()
        start_urls = []
        append = start_urls.append

        # get list of proyects ids from pdl_proyecto table with no events
        query = "select seguimiento_page, pdl_proyecto.id, codigo, evento " \
                "from pdl_proyecto LEFT OUTER JOIN pdl_seguimientos ON " \
                "(pdl_proyecto.id = pdl_seguimientos.proyecto_id) WHERE " \
                "pdl_proyecto.legislatura={}".format(settings.LEGISLATURE)
        res = db.query(query)
        for i in res:
            if i['evento'] is None:
                append(i['seguimiento_page'])

        # get list of proyectos ids from pdl_proyecto table with events but
        # are not law yet

        # first, get those that are law
        these_proyecto_ids_are_law = []
        append = these_proyecto_ids_are_law.append
        # use a SQLalchemy expression
        table = db['pdl_seguimientos'].table
        query = table.select(
            table.c.evento.like('%Promulgado%')
            | table.c.evento.like('%Publicado%'))
        res = db.query(query)
        for i in res:
            if i['proyecto_id'] not in these_proyecto_ids_are_law:
                append(i['proyecto_id'])

        # now get those that have events but are not law already
        these_proyecto_ids_are_not_law = []
        append = these_proyecto_ids_are_not_law.append
        query = "select distinct proyecto_id from pdl_seguimientos " \
                "LEFT OUTER JOIN pdl_proyecto ON " \
                "(pdl_proyecto.id = pdl_seguimientos.proyecto_id) where "\
                "pdl_proyecto.legislatura = {}".format(settings.LEGISLATURE)
        res = db.query(query)
        for i in res:
            if i['proyecto_id'] not in these_proyecto_ids_are_law and \
                    i['proyecto_id'] not in these_proyecto_ids_are_not_law:
                self.logger.info("Appending %s" % str(i['proyecto_id']))
                append(i['proyecto_id'])

        # get proyecto codes from proyecto ids and add to URL list
        table = db['pdl_proyecto']
        for i in these_proyecto_ids_are_not_law:
            res = table.find_one(id=i)
            if res is not None:
                if res['seguimiento_page'] not in start_urls:
                    start_urls.append(res['seguimiento_page'])

        return start_urls
Example #4
0
    def test_save_item(self):
        # database should have it
        db = db_connect()
        table = db['pdl_proyecto']
        self.assertIsNotNone(table.find_one(codigo=self.item['codigo']))

        self.pipeline.save_item(self.item)

        # delete item
        table.delete(codigo=self.item['codigo'])
    def get_my_urls(self):
        db = db_connect()
        start_urls = []
        append = start_urls.append

        query = "select seguimiento_page from pdl_proyecto where " \
            "fecha_presentacion=''"

        res = db.query(query)
        for i in res:
            append(i['seguimiento_page'])

        return start_urls
Example #6
0
    def test_save_slug(self):
        db = db_connect()
        table = db['pdl_slug']
        fixed_item = self.pipeline.process_item(self.item, ProyectoSpider)
        fixed_item['congresistas'] = u'Pacheco Soy, Yóní'
        self.pipeline.save_slug(fixed_item)

        res = table.find_one(slug='pacheco_soy_yoni/')
        self.assertEqual(res['nombre'], u'Pacheco Soy, Yóní')

        res = self.pipeline.save_slug(fixed_item)
        self.assertEqual(res, 'slug already in database')

        table.delete(slug='pacheco_soy_yoni/')
Example #7
0
    def test_save_seguimientos(self):
        db = db_connect()
        table = db['pdl_proyecto']
        table.insert(ITEM)
        ITEM['seguimientos'] = [
            (datetime.date(2012, 10, 13), 'Evento1'),
            (datetime.date(2013, 11, 14), 'Evento2'),
        ]
        db.query("delete from pdl_seguimientos where 1=1")
        self.pipeline.save_seguimientos(ITEM)

        res = db.query("select * from pdl_seguimientos")
        result = []
        for i in res:
            result.append(i)
        expected = 2
        self.assertEqual(expected, len(result))
Example #8
0
    def get_my_urls(self):
        """
        Find those proyectos with no PDF url in our database.
        :return: set of URLs
        """
        db = db_connect()
        start_urls = []
        append = start_urls.append

        query = "select expediente, pdf_url from pdl_proyecto WHERE " \
                "legislatura={}".format(settings.LEGISLATURE)
        res = db.query(query)
        for i in res:
            if i['pdf_url'] is None or i['pdf_url'].strip() == '':
                append(i['expediente'])
                self.logger.info('Appending %s to start_urls.' %
                                 str(i['expediente']))

        return start_urls
Example #9
0
    def get_my_urls(self):
        db = db_connect()
        start_urls = []
        append = start_urls.append

        query = "select seguimiento_page from pdl_proyecto where " \
            "proponente = '' or " \
            "grupo_parlamentario = '' or " \
            "nombre_comision = '' or " \
            "titulo_de_ley = '' or " \
            "numero_de_ley = '' or " \
            "proponente is null or " \
            "grupo_parlamentario is null or "  \
            "nombre_comision is null or " \
            "titulo_de_ley is null or " \
            "numero_de_ley is null"

        res = db.query(query)
        for i in res:
            append(i['seguimiento_page'])

        return start_urls
Example #10
0
 def setUp(self):
     self.pipeline = ExpedientePipeline()
     self.db = db_connect()
Example #11
0
 def setUp(self):
     self.pipeline = IniciativasPipeline()
     self.db = db_connect()