protected void Procesar(ConfigProceso config, FuenteRedes fuente) { // coger un script en python, precompilar y correr en cada parte var txt = File.ReadAllText(config.ScriptFile); var source = Engine.CreateScriptSourceFromString(txt); var compiled = source.Compile(); AppNotifier.Print("Cargando datos para " + fuente.City.Nombre); var datos = fuente.Obtener(config.CarpetaTrabajo); var scope = Engine.CreateScope(); Resultados = new List<Resultado>(); scope.SetVariable("fuentes", datos); scope.SetVariable("resultados", Resultados); scope.SetVariable("proc", fuente); compiled.Execute(scope); AppNotifier.Print("Resultados: " + Resultados.Count); int borrados = RepoGeneral.BorrarResultados(new ResultadoForm { Proceso = "REDES", Ciudad = fuente.City.Nombre }); AppNotifier.Print("Borrados " + borrados); AppNotifier.Print("Grabando"); Grabador.Guardar(Resultados, (i, msg) => { if (i % 500 == 0) { AppNotifier.Print("Guardados " + i); } if (msg == "total") AppNotifier.Print("Fin guardar"); }); AppNotifier.Print("Fin proceso redes"); }
public void Calcular(ConfigProceso config, FuenteRedes fuente) { var pathScript = Path.GetDirectoryName(config.ScriptFile); Engine = Utils.GetScriptingEngine(f => f.AddSearchPath(pathScript)); var outs = new CallbackStream(); outs.Callback += s => AppNotifier.Print(s); Engine.Runtime.IO.SetOutput(outs, outs.OutEncoding); try { Procesar(config, fuente); } catch (Exception ex) { var error = Engine.GetService<ExceptionOperations>().FormatException(ex); AppNotifier.Print(error, ex); } }
protected void Calcular2(ConfigProceso config) { // coger un script en python, precompilar y correr en cada parte var scope = Engine.CreateScope(); Resultados = new List<Resultado>(); scope.SetVariable("ficha", Ficha); scope.SetVariable("catalogo", Catalogo); scope.SetVariable("fuenteDatos", Fuente); scope.SetVariable("mapeos", Mapeos); scope.SetVariable("ciudad", City); scope.SetVariable("resultados", Resultados); scope.SetVariable("proc", this); var txt = File.ReadAllText(config.ScriptFile); var source = Engine.CreateScriptSourceFromString(txt); var compiled = source.Compile(); compiled.Execute(scope); Print("Resultados: " + Resultados.Count); Print("Grabando"); Progreso(Resultados.Count, "inicio"); Grabador.Guardar(Resultados, (i, msg) => { if (i % 500 == 0) { Print("Guardados " + i); Progreso(i, msg); } if (msg == "total") Print("Fin guardar"); }); }
public void Calcular(ConfigProceso config) { Engine = Utils.GetScriptingEngine(f => f.AddSearchPath(config.CarpetaTrabajo)); var outs = new CallbackStream(); outs.Callback += s => Print(s); Engine.Runtime.IO.SetOutput(outs, outs.OutEncoding); try { Calcular2(config); } catch (Exception ex) { //http://stackoverflow.com/questions/1465262/getting-traceback-information-from-ironpython-exceptions //engine.GetService<ExceptionOperations>().FormatException(exception); var error = Engine.GetService<ExceptionOperations>().FormatException(ex); Print(error, ex); //var msg = "Error de sintaxis " + Utils.FormatSyntaxError(exs); } }
private void Redes_Click(object sender, EventArgs e) { var city = ComboCiudad.ComboBox.SelectedItem as Ciudad; if (city == null || datosProceso.Fichas.Count == 0) { MessageBox.Show("Seleccione ciudad y asegurese de cargar las fichas"); return; } var fuente = new FuenteRedes(datosProceso.Fichas, city); var proc = new ProcesadorRedes(); var conf = new ConfigProceso(); conf.CarpetaTrabajo = Path.Combine(config.CarpetaTrabajo, "Redes"); conf.ScriptFile = Path.Combine(config.CarpetaTrabajo, "calculo_redes.py"); proc.Calcular(conf, fuente); }
private void BtnProceso_Click(object sender, EventArgs e) { var proc = new Procesador(); var error = PrepararProceso(proc); if (!string.IsNullOrEmpty(error)) { LogMessage(error); MessageBox.Show(error); return; } dynamic opciones = new ExpandoObject(); opciones.limite = 0; var task = new Task(() => { proc.OnMessage += LogMessageEvent; proc.OnProgress += ReportProgreso; var reloj = new Stopwatch(); reloj.Start(); LogMessage("Empezando con " + proc.City.Nombre); var conf = new ConfigProceso { CarpetaTrabajo = config.CarpetaTrabajo, ScriptFile = Path.Combine(config.CarpetaTrabajo, config.ScriptProceso) }; try { proc.Calcular(conf); LogMessage("Calculo terminado para " + proc.City.Nombre); } catch (Exception ex) { LogMessage("Error " + ex.Message, ex); } finally { reloj.Stop(); proc.OnMessage -= LogMessageEvent; proc.OnProgress -= ReportProgreso; LogMessage("Terminado en " + reloj.Elapsed.TotalSeconds + "segundos"); } }); task.Start(); }