#!/usr/bin/env python3 import simplekml import utm from api import Descripciones, Organismo, Puesto, dict_from_txt puestos = [ p for p in Puesto.load() if p.idCentroDirectivo != 1301 and p.idProvision not in ( "L", ) and p.isTAI() ] descripciones = Descripciones.load() organismos = Organismo.load() rcp_organi = {} for o in organismos: for c in o.codigos: if isinstance(c, int): rcp_organi[c] = o kml = simplekml.Kml() kml.document.name = "TAI" style_normal = simplekml.Style() style_normal.iconstyle.color = simplekml.Color.blue style_normal.iconstyle.icon.href = 'http://maps.google.com/mapfiles/ms/micons/blue.png' kml.document.style = style_normal style_con_vacantes = simplekml.Style()
cod, prov = tds idde["provincias"][int(cod)] = prov todos = [] organismos = {} for xls in xlss: count = count + 1 print("%3d%% completado: %-30s" % (count * 100 / total, os.path.basename(xls)), end="\r") wb = xlrd.open_workbook(xls) sh = wb.sheet_by_index(0) for rx in range(sh.nrows): row = [parse(c) for c in sh.row(rx)] if len(row) > 1 and isinstance(row[0], int): p = Puesto(*row) todos.append(p) isCsic = p.idMinisterio == 47811 if p.idMinisterio and p.idMinisterio not in organismos: organismos[p.idMinisterio] = Organismo( p.idMinisterio, p.deMinisterio, isCsic=isCsic) if p.idCentroDirectivo and p.idCentroDirectivo not in organismos: idPadres = set({p.idMinisterio, }) organismos[p.idCentroDirectivo] = Organismo( p.idCentroDirectivo, p.deCentroDirectivo, idPadres=idPadres, isCsic=isCsic) if p.idUnidad and p.idUnidad not in organismos: idPadres = set({p.idCentroDirectivo or p.idMinisterio, }) organismos[p.idUnidad] = Organismo( p.idUnidad, p.deUnidad, idPadres=idPadres, isCsic=isCsic) print("100%% completado")
#!/usr/bin/python3 import simplekml import utm from api import Descripciones, Organismo, Puesto, dict_from_txt puestos = [p for p in Puesto.load() if p.idCentroDirectivo != 1301 and p.idProvision not in ("L",) and p.isTAI()] descripciones = Descripciones.load() organismos = Organismo.load() rcp_organi = {} for o in organismos: for c in o.codigos: if isinstance(c, int): rcp_organi[c] = o kml = simplekml.Kml() kml.document.name = "TAI" style_normal = simplekml.Style() style_normal.iconstyle.color = simplekml.Color.blue style_normal.iconstyle.icon.href = 'http://maps.google.com/mapfiles/ms/micons/blue.png' kml.document.style = style_normal style_con_vacantes = simplekml.Style() style_con_vacantes.iconstyle.color = simplekml.Color.green style_con_vacantes.iconstyle.icon.href = 'http://maps.google.com/mapfiles/ms/micons/green.png'
re_categoria = re.compile(r"^\s*\d+\.\s*-\s*(.+)\s*:\s*$") re_spip = re.compile(r"^\s*(Página:|Fecha:|\d+/\d+/20\d+|\d+ de \d+)\s*$") re_residencia = re.compile(r"^\s*(\d+-\d+-\d+)\s+([A-Z].*)\s*$") re_sp = re.compile(r" +") re_bk = re.compile(r"\s+") re_puesto = re.compile(r"\b(\d{6,7})\b") re_map = re.compile( r"http://maps.googleapis.com/maps/api/staticmap\?center=(.*?)&.*") re_ll = re.compile(r"https://maps.google.es/maps\?.*&ll=([\d\.,\-]+).*") re_ll2 = re.compile( r"https://www.google.com/maps/search/\?api=1&query=([\d\.,\-]+)") re_paren = re.compile(r"\(.*$") arregla_direcciones = get_direcciones_txt() puestos_v1 = Puesto.load(name="datos/v1.0/destinos_all.json", descripciones="datos/v1.0/descripciones.json") organis_v1 = Organismo.load(name="datos/v1.0/organismos.json") def parse(cell, parse_number=True): if not cell: return None v = cell.value if isinstance(v, float): return int(v) if v.is_integer() else v if isinstance(v, str): v = v.strip() v = re_space.sub(" ", v) v = v.replace("PROGRAMDOR", "PROGRAMADOR") if parse_number and re_number.match(v): v = float(v.replace(",", "."))
idUnidOrganica = set( [int(i[33:-5]) for i in glob("fuentes/administracion.gob.es/id_*.html")]) organismos = {} for o in Organismo.load(): if o.idUnidOrganica not in idUnidOrganica: o.idUnidOrganica = None for c in o.codigos: organismos[c] = o cod_dir_latlon = get_cod_dir_latlon() arreglos = yaml_from_file("arreglos/rpt_dir3.yml") notas = dict_from_txt("arreglos/notas.txt") todos_puestos = {p.idPuesto: p for p in Puesto.load(name="destinos_tai")} vacantes_tai = [p for p in Puesto.load() if p.isTAI() and p.estado == "V"] class Org: def __init__(self, codigo, descripcion): ll = cod_dir_latlon.get(codigo, None) self.nota = notas.get(codigo, None) self.clave = codigo self.codigo = codigo self.descripcion = descripcion self.hijos = set() self.puestos = [] self.rpt = None self.deDireccion = None self.organismo = organismos.get(codigo, None)
wb_out = xlwt.Workbook() ws_out = wb_out.add_sheet('Oferta normalizada') row = ws_out.row(0) for i, v in enumerate(["PUESTO\nNÚMERO", "ID MINISTERIO", "MINISTERIO", "ID CENTRO", "CENTRO", "ID UNIDAD", "UNIDAD"]): row.write(i, v) ''' org_convocatoria=Org(None, None) puestos = [] unidades = [] wb = xlrd.open_workbook("fuentes/2017_L.xls", logfile=open(os.devnull, 'w')) sh = wb.sheet_by_index(0) for rx in range(1, sh.nrows): r = [parse(c) for c in sh.row(rx)] if len(r)==10: p = Puesto() p.ranking=r[0] p.idPuesto=r[-3] p.dePuesto = get_puesto(r[-4]) p.nivel=r[-2] p.complemento=r[-1] p.provincia=get_provincia(r[4]) p.localidad=r[5] p.deMinisterio=r[1] p.deCentroDirectivo=r[2] p.deUnidad=r[3] p.idMinisterio, p.idCentroDirectivo = get_ministerio_centro(p.deMinisterio, p.deCentroDirectivo) if p.deUnidad: p.idUnidad=get_unidad(p.idMinisterio, p.idCentroDirectivo, p.deUnidad) else: p.idUnidad=get_unidad(p.idMinisterio, p.idCentroDirectivo, p.deCentroDirectivo)
help='Solo genera la parte de las direcciones') parser.add_argument('--destinos', action='store_true', help='Solo genera la parte de destinos') parser.add_argument('--ranking', action='store_true', help='Solo genera la parte del ranking') args = parser.parse_args() j2 = Jnj2("j2/", "docs/") # Excluir CENTROS PENITENCIARIOS, y volver a comprobar que es TAI # Excluir nivel 18 (puede que salta alguno pero serán tan pocos...) todos_tai = [ p for p in Puesto.load() if p.idCentroDirectivo != 1301 and p.idProvision not in ( "L", ) and p.isTAI() ] todos_19 = [p for p in todos_tai if p.nivel < 19] descripciones = Descripciones.load() organismos = {} for o in Organismo.load(): for c in o.codigos: organismos[c] = o if args.todo or args.direcciones: nf = Info(todos_tai, descripciones, organismos) j2.save("direcciones.html", info=nf, parse=fix_html)
if not cell: return None v = cell.value if isinstance(v, float): return int(v) if v.is_integer() else v if isinstance(v, str): v = v.strip() v = re_space.sub(" ", v) if parse_number and re_number.match(v): v = float(v.replace(",", ".")) return int(v) if v.is_integer() else v return v if len(v) else None return v puestos = Puesto.load(name="2017_L") unidades = {p.ranking: p.idUnidad for p in puestos} url = None with open(".ig_leer_puestos") as f: lineas = [l.strip() for l in f.readlines() if l.strip()] url = lineas[0] def get_ok_index(idUnidad, *arg): last_unidad = None index = 0 for a in arg: unidad = unidades[a] if last_unidad is None or unidad != last_unidad: last_unidad = unidad index = index + 1