示例#1
0
        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");
        }
示例#2
0
 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);
     }
 }
示例#3
0
        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");
            });
        }
示例#4
0
        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);
            }
        }
示例#5
0
 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);
 }
示例#6
0
        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();
        }