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()
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
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
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
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/')
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))
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
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
def setUp(self): self.pipeline = ExpedientePipeline() self.db = db_connect()
def setUp(self): self.pipeline = IniciativasPipeline() self.db = db_connect()