« first day (1796 days earlier)      last day (1305 days later) » 
00:00 - 14:0014:00 - 00:00

2:00 PM
@Pikoh ahhh entonces ahi no molesta ni falla
 
Mira el ejemplo que puso @g3rv4, esta claro ahi
 
@JuanPerez a ver... Ayer me mostraste una excepción (error no controlado), según el texto de la excepción que copiaste, el problema se daba en strptime, esta función lee una cadena con un cierto formato y trata de convertirla en una cadena. Imagino que si aquí está el error, el problema es que está recibiendo una cadena que no es capaz de convertir a una fecha. No puedo decirte dónde está el error, por que el error pareciera estar en los datos.
 
@Pikoh yo diría que es relevante también a programación de escritorio... podés tener una variable con personas con datos actualizados, otra con datos viejos y buscar
 
@Lo que trato de decirte es que revises estos, es decir, cuando haces datetime.strptime(json_data.get(pet),'%m/%d/%y'), mirá json_data.get(pet), es un formato válido? seguramente no. Fijate además la excepción: ValueError: unconverted data remains: 17, hay una fecha que tiene un formato distinto, apuesto que alguna viene con los años con cuatro cifras, por ejemplo 3/1/2017, el 17 del error es la parte de la cadena que le sobró
 
var usuariosAActualizar = todosLosUsuarios.Where(u=>usuariosConCambios.Contains(u))
^ esto usa Equals por atrás... si estás usando en DNI, entonces esto no va a funcionar como la persona que escribe esto espera
 
2:03 PM
@g3rv4 en escritorio es raro tener un cache, por lo que no es tan relevante. Y no teniendo cache, la actualización de las clases se hace al vuelo no se necesita comparar. De hecho, yo pocas veces he tenido que hacer override de equals
 
@PatricioMoracho Y se puede hacer que si no viene el formato adecuado que el proceso siga que no de ese error ?
 
@Pikoh estoy hablando de tener cosas en memoria y decidir qué actualizar en una base de datos
o en un XML :P
 
@g3rv4 y en ese caso, otra opción es usar un flag de modificación, que es mas sencillo de comparar que toooodas las propiedades del objeto
@g3rv4 si si, te entiendo perfectamente. Pero como digo, yo prefiero otras opciones a sobreescribir Equals
 
@Pikoh genial, estás buscando alternativas para justificar implementar mal una API, definida por MS, usada por muchas librerías (de MS y third party)
podés buscarle todas las vueltas que quieras para que funcione, sin dudas... pero el día que se rompa, va a ser dificilísimo de encontrar
 
@g3rv4 que api implemento mal? si no uso Equals, no implemento mal nada
 
2:06 PM
@JuanPerez, eso es es esconder el problema debajo de la alfombra, antes que nada revisa que formatos de fecha puedes tener y después vemos que hacer. Ignorar un formato es casi el mismo trabajo que procesar cada versión.
 
@Pikoh ah, yo estaba hablando de implementarlo como que es el DNI
23 mins ago, by Pikoh
@g3rv4 imagina una clase de personas. lo normal es que tengas un identificador unico (D.N.I. en españa) que comparandolo ya sabes que son dos personas iguales
 
@PatricioMoracho El formato de fecha de la data original viene asi:
 
esto está mal... si no implementás equals, queda la definición por defecto que mira que las dos instancias sean la misma en memoria, que no está mal
 
@g3rv4 efectivamente. Pero no suelo usar equals. P.dni == p2.dni
 
m/d/y
10/1/19
@PatricioMoracho Y necesito Y-m-d
 
2:08 PM
@Pikoh P.dni == p2.dni está mal. No usarlo... no está mal si no lo necesitás
 
Pero fijate que el año no viene completo
 
@g3rv4 está mal..por que?
 
@PatricioMoracho Hice esto:
print(json_data.get(pet))
                    print(datetime.strftime(datetime.strptime(json_data.get(pet),'%m/%d/%y'),"%y-%m-%d") )
10/1/19
19-10-01
5/1/19
19-05-01
3/1/19
19-03-01
@PatricioMoracho Y esta fue la salida
Pero fijate que falta el año bien
 
@Pikoh porque... dos instancias que tienen distintos valores (que harían a las dos instancias distintas) dan Equals true. Si hay algo cacheando instancias (que podés no ser vos, sino un ORM ponele), hacer Equals le va a dar true
 
Efectivamente. Por eso no uso cache en ninguna de mis aplicaciones
 
2:11 PM
esto se puede manifestar por cambiar p.Direccion, hacer después p.Save() y que no se persistan los cambios en la BD
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-5705f32f0bdc> in <module>
     13                         "customer_id": int(json_data.get('$id')),
     14                         "name": pet,
---> 15                         "value": (datetime.strftime(datetime.strptime(json_data.get(pet),'%m/%d/%y'),"%Y-%m-%d") if pet == 'Pet Birthday 1' or pet == 'Pet Birthday 2' else json_data.get(pet))
 
a lo que voy... es que el hecho de que vos no uses cache no quiere decir que librerías que vos usás no usen caché
 
@JuanPerez ahora no importa el formato en que lo necesites, olvidate por un rato de eso, el problema no está ahí. El problema es como interpretar una cadena como fecha. Acá está el problema: strptime(json_data.get(pet),'%m/%d/%y')
 
o de que vos no uses cache no quiere decir que un dev, en 5 años, no use cache
o que el hecho de que vos no uses cache hoy no quiere decir que vos no uses cache en 5 años
 
@g3rv4 a ver,estamos mezclando cosas. Yo cuando persisto los datos en base de datos uso DataSets, que ya llevan control de los cambios. Por cierto, usando un "flag" como dije antes, y almacenando la version antigua y la nueva
 
2:12 PM
@g3rv4 lo que me has dicho funciona, aunque aun no logro comprender bien el por que de esta necesidad para que distinct funcione
 
@PatricioMoracho Ah ok
@PatricioMoracho Y que se puede hacer ahi ?
 
@Pikoh eso está perfecto mientras desarrolles algo que tiene que andar hoy, con poca gente en el equipo. No es escalable, ni future proof, ni... recomendable romper una API
y... me tengo que ir a trabajar :P y como no trabajamos juntos, no tenemos por qué estar de acuerdo...
 
@g3rv4 el API de los DataSets no es de microsoft?
 
@Pikoh si, estoy de acuerdo en que tu solución anda hoy
 
@JuanPerez Mirá toma esta línea de código: print(datetime.datetime.strptime('5/1/2017', '%m/%d/%y')) ejecutala sola y obtendras una excepción similar a la que estas recibiendo. Mirá la fecha que le estoy pasando y el formato que se espera
 
2:14 PM
para gente que entiende cómo te gusta programar
 
hoy y siempre. Probablemente no para web, pero si para escritorio
 
si trabajáramos juntos, metería un google doc gigante, armaría reuniones con managers
 
@PatricioMoracho Correcto

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-19-835761f915fd> in <module>
----> 1 print(datetime.datetime.strptime('5/1/2017', '%m/%d/%y'))

AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
 
Pero bueno, te dejo trabajar. Ya seguiremos en otro momento :)
 
@Pikoh eso es mentira... el día que agregues una librería que use .Equals, se rompe
 
2:15 PM
@g3rv4 cierto
tienes razon
 
el día que entre alguien nuevo que use .Equals esperando comparar dos objetos, no le anda
 
@JuanPerez Te falta importar datetime, no lo puse por que asumí que te ibas a dar cuenta: import datetime;print(datetime.datetime.strptime('5/1/2017', '%m/%d/%y'))
 
todo es peor si ya no estás en el equipo para explicar tu razonamiento
por eso elegiría esta como una de las batallas a dar si entrara a trabajar con vos
 
@PatricioMoracho Si esta importado
 
entiendo tu punto de vista.
 
2:16 PM
from datetime import datetime
 
así que ya sabés: asegurate de estar mirando los CVs y tirar el mío rápido si alguna vez me presento
 
@g3rv4 al contrario. Se aprende mucho de alguien con diferentes puntos de vista y con experiencia en otros ambitos distintos
 
@JuanPerez ¿Que se puede hacer? lo que trato de decirte hace rato. Revisar los datos, no queda otra, analiza todos los posibles los formatos de fecha que recibes.
 
@g3rv4 de hecho, me has convencido. Enhorabuena :)
 
@JuanPerez No está importado por que la excepción es otra, corre exactamente esto y nada más que esto import datetime;print(datetime.datetime.strptime('5/1/2017', '%m/%d/%y'))
 
2:23 PM
@PatricioMoracho Tienes razon ahora si esta mostrando el mismo error que estoy presentando
@PatricioMoracho Estoy ejecutando todo el script aplicandole el filtro para que solo me muestre los registros que vengan con fechas
 
@g3rv4 yo te echo el mío rápido, pero para ser tu subordinado
Aun estoy esperando a que me digas si salen vacantes
 
@Pikoh \o/ voy sacando "aplicar para trabajar en la empresa de Pikoh" de mi lista de tareas pendientes
@NicolasOñate \o/ we're hiring!
 
@g3rv4 hay algo que no entiendo de todas maneras de tu razonamiento. Pero si estas ocupado ya lo comentamos otro dia
 
@JuanPerez Fijate el año de mi ejemplo, estas esperando un año de 2 números pero recibes uno de 4. El excedente 17 es lo que te muestra la excepcion. Igualmente es una hipótesis mía, puede ser cualquier otra cosa, pero lo que es seguro que hay un dato que estás tratando de convertir a un fecha y tiene un formato distinto al que esperas.
 
@Pikoh escribilo acá así queda y cuando pueda respondo
 
2:26 PM
@PatricioMoracho Es eso Patricio la fecha original no viene con los 4 numeros sino 2 nada mas
 
@g3rv4 imaginemos el ejemplo de antes. Tu tienes un cache con personas. Efectivamente, tu puedes comparar objetos con equals y ver que son diferentes. Pero tendrás que saber que antes eran iguales de alguna forma. Como lo haces?
 
@g3rv4 que buen momento para preguntarte! a ver si doy la talla
 
@JuanPerez Ahi puede estar el problema, estas asumiendo que viene siempre con dos dígitos y en algún momento puede llegarte una con cuatro.
 
@Pikoh ah, si... en el cache, tenés algo tipo un Dictionary<int, Persona>, donde int es el identificador de la bd
o puede ser el DNI si ese es tu identificador
(aunque... yo no haría el DNI para no andar comparando strings)
 
@g3rv4 pues a eso me referia. La diferencia es que tu usas equals para comparar los objetos y ver si tienen cambios, y yo uso otro metodo. Pero entiendo que tu enfoque es mas ortodoxo y probablemente mejor
@g3rv4 yo tampoco, era un ejemplo. Siempre id numerico en mi opinion
Ha sido una discusion enriquecedora. Todo por culpa de @NicolasOñate ;)
 
2:32 PM
@PatricioMoracho Si correcto porque no veo otra cosa ya que he probado varias veces el codigo y siempre viene asi en ese formato "m/d/y"
 
@g3rv4 (ya lo ultimo) en mi defensa, como digo yo todas las gestiones de base de datos las hago usando DataSet (que al final es un cache en memoria que refleja los datos subyacentes en la base de datos). Por lo que toda la gestion esa la hace el sistema. Yo modifico datos en el DataSet, llamo a Update y el sistema se encarga de todo. Es una forma de trabajar mas antigua, pero yo es que soy ya muy viejo
y no se romperá, dado que no se usan objetos y no corresponde llamar a equals nunca
 
Datasets. XD
 
@Pikoh claro, la única razón por la que mi enfoque es mejor, es porque no soy sólo yo el que hace eso, es la forma correcta de hacer las cosas en .NET
entonces, otros devs (y otras librerías) lo hacen así
 
Los usé hasta el cansancio. Y si tengo que elegir, los sigo usando.
 
@g3rv4 usando objetos si. Pero usando dataset, no
 
2:35 PM
@JuanPerez Si siempre viniera en ese formato, entiendo que no deberías tener ninguna excepción. Nuevamente: revisa los datos, imprime por pantalla json_data.get(pet), el que nos importa es el último print antes del error
 
@Pikoh no se rompe porque vos hacés las cosas de una forma siempre :)
@NicolasOñate presentate! yo estaba seguro de que no daba la talla... y ya llevo 4 años acá
con sus subidas y bajadas... es sin dudas el mejor trabajo que he tenido
 
@PatricioMoracho Si porque yo estoy transformando el año para 4 digitos y solo vienen 2
@PatricioMoracho O estoy equivocado ?
 
@JuanPerez No, el formato %y en minúscula es de 2 digitos
 
@g3rv4 ahi creo que no tienes razon, lo siento. Los DataSet son un método estandard del framework que no usa Equals. Ahora todo el mundo usa entidades, pero antes de eso estaban los DataSet :)
 
@PatricioMoracho Pero se necesita los 4 digitos para poder actualizar en bigcomerme
 
2:38 PM
@Pikoh tenés razón... yo decía porque si siempre usás DataSets, si... pero en 5, 10 años, alguien va a actualizar tu producto para usar otra librería
o puede no ser DataSets, pero una librería que hace algo distinto
implementar una API de una forma que no es la esperada por el framework o por otros devs, es poner una bomba de tiempo
 
@g3rv4 de hecho, estoy en proceso de cambiar a Dapper. Por eso te he tirado de la lengua a ver ;)
 
@JuanPerez sigues sin darte cuenta dónde está el error? no importa el formato que necesites pasarle luego a la API, el problema es que antes de eso necesitas leer una fecha desde una cadena
 
@Pikoh bien ahí! igual este no es un problema que vayas a tener con Dapper
 
Si, me esta gustando. Cosa que EF no consiguió nunca
 
dapper es lo mejor del mundo
 
2:40 PM
por eso sigo con mi "libreria personal"
pero ha sido una discusion enriquecedora para mi.
 
@JuanPerez Esto: datetime.strftime(datetime.strptime(json_data.get(pet),'%m/%d/%y'),"%Y-%m-%d") son dos funciones, strftime la usas para hacer consistente la fecha para el API, pero strptime se ejecuta antes y es para convertir una cadena a un objeto tipo fecha, acá esta el error
 
aunque ya me habias convencido hace un rato, pero he hecho de abogado del diablo un rato para que me dieras mas argumentos
 
@PatricioMoracho Vale estoy volviendo a correr el script para ver el momento donde hace el error
@PatricioMoracho Supongas que no venga una fecha valida que se podría hacer ?
 
@g3rv4 claro, no pierdo nada por probar :)
 
@JuanPerez Primero se estudia el caso, después se piensa que hacer. Ubica las cadenas que dan error y luego ves ¿son fechas válidas con otro formato? ¿es basura?
 
2:53 PM
@PatricioMoracho O supongamos que ejecutando todo el script ahora no de el error de ayer ya que los datos cambiaron
@PatricioMoracho Ya esta el proceso en ejecución aun no ha mostrado el error de ayer
 
@JuanPerez Bien, entonces tampoco podemos ver dónde estaría el error. Cuando puedas reproducirlo lo investigas
 
@PatricioMoracho Si esperemos que salga el error para mirar que pasa
@PatricioMoracho Una consulta
datetime.strftime(datetime.strptime(json_data.get(pet),'%m/%d/%y'),"%y/%m/%d")
@PatricioMoracho Quiere decir que acá no importa si vienen 2 o 4 digitos para hacer la actualizacion en la api ?
En la api los otros 2 ceros se rellenaran con "00" ?
 
@JuanPerez Vamos por partes, ¿que hace esto datetime.strptime(json_data.get(pet),'%m/%d/%y')?
 
@PatricioMoracho Devuelve una cadena formateada
@PatricioMoracho Me tiro el error:
 
3:12 PM
@JuanPerez No, justamente eso no es lo que hace. strptime lee una cadena con un determinado formato y devuelve un datetime. -> docs.python.org/3/library/…
 
{'customer_id1': 32346, 'name1': 'Pet Birthday 1', 'value1': '06/26/2017'}
Ah no mostro el registro
{'customer_id1': 32346, 'name1': 'Pet Birthday 1', 'value1': '06/26/2017'}
@PatricioMoracho Ese fue el ultimo registro que mostro
 
@JuanPerez Pero eso es la información ya procesada no?
 
@Pikoh jajajaja
 
@PatricioMoracho Ese registro que te muestro es la original
@PatricioMoracho Donde dio el error fue en la procesada
 
@JuanPerez 'value1' no es la original, es la fecha ya procesada, al menos en el último código que copiaste. Te vuelvo a repetir. Imprime json_data.get(pet) antes de hacer el dataPerson.append(..) y revisa el último print antes del error.
 
3:23 PM
@PatricioMoracho Vale, si justo estoy en eso sacando todo tal cual como viene original sin el append
 
4:06 PM
@PatricioMoracho Estas ?
@PatricioMoracho Esa es la data original, fijate que algunos registros vienen con ese formato
@PatricioMoracho Entonces, ese es el problema ?
@PatricioMoracho Son varios registros que vienen en ese formato
 
4:39 PM
dataPerson = []
for item in dataMemberships:
    id_ = item['id']
    response = requests.get(f'{base_urlKlaviyo}/api/v1/person/{id_}', params=params)
    if response.status_code == 200:
        json_data = json.loads(response.text)
        pets= ['Pet Name 1', 'Pet Name 2', 'Pet Type 1', 'Pet Type 2', 'Pet Breed 1', 'Pet Breed 2', 'Pet Birthday 1', 'Pet Birthday 2']
        keys_resp = json_data.keys()
        for pet in pets:
            if pet in keys_resp:
                datapk = {}
                datapk["customer_id"] = int(json_data.get("$id"))
@PatricioMoracho Hice algo así
 
@JuanPerez Si el problema es ese, tienes dos formatos posibles, por lo que muestras el más común sería el dd/mm/yyyy, que es el que no estas usando, el otro es mm/dd/yy. Lo que hiciste está bien para resolver el problema, básicamente pruebas un formato y si te lanza una excepción pruebas con el otro, esto funcionará siempre que tengas solo dos formatos posibles.
 
@PatricioMoracho Correcto
@PatricioMoracho Se podría hacer otras condiciones en dado caso que no venga nada ? o otro tipo tipo de formato ?
 
@JuanPerez, Ahora, como buena práctica, deberías investigar por que llegan dos formatos distintos ¿es razonable que sea así o es un problema que podría arreglarse? Los problemas siempre conviene ir a resolverlos en el origen, lo que haces ahora es un paliativo, por que realmente no tienes seguridad en cuanto a la información que te llega, por eso te digo que deberías investigar por ese lado, de dónde viene esa fecha.
 
@PatricioMoracho Voy a mirar lo que me comentas
@PatricioMoracho Una pregunta es posible mejorar los tiempos para que el proceso no dure tanto tiempo ya que tarda como 30 minutos aproximadamente en capturar toda la data
 
5:02 PM
@JuanPerez Eso, el único que puede responderlo eres tú que conoce bien lo que hace el script. Solo te comento, 1) Ayer ya habíamos visto que la API soportaba hasta 10 "registros", pero tu estas enviando de a uno por vez, ahí tenés un lugar dónde eventualmente optimizar 2) Podrías investigar por el lado de múltiples hilos, si la api lo soporta
 
@PatricioMoracho Cuando esta insertando en la api me sale este error en algunos de los registros
{"status":422,"title":"Create form field value failed.","type":"https://developer.bigcommerce.com/api-docs/getting-started/api-status-codes","errors":{"0.form_field_value":"Option 'Goldendoodle' does not exist in 'Pet Breed 1'"}}
{'Error': "<class 'http.client.RemoteDisconnected'>", 'Line Number': '5', 'Details': 'Remote end closed connection without response'}
Y tambien me muestra esto
try:
    for dataUpdate in dataPerson:
        dataList = json.dumps([dataUpdate])
        conn.request("PUT", "/stores/bgjc1kd1rm/v3/customers/form-field-values", dataList, headers)
        res = conn.getresponse()
        data = res.read()
        print(data.decode("utf-8"))
except Exception as e:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        message = {
            'Error': str(exc_type),
            'Line Number': str(exc_tb.tb_lineno),
            'Details': str(e)
        }
        print(message)
Cuando hago esto
 
@JuanPerez Ni idea. Parece un error de negocios: "Option 'Goldendoodle' does not exist in 'Pet Breed 1'".
 
[{"customer_id": 31761, "name": "Pet Breed 1", "value": "Goldendoodle"}]
Pero si aparece
 
 
2 hours later…
7:18 PM
@PatricioMoracho Una consulta, como puedo verificar si vienen espacios dentro del array dataPerson
@PatricioMoracho Me parece que el error puede ser que venga algún espacio en la palabra Pet Breed 1
 
hola
 
Buenas @EdgarGc
 
Una pregunta, estoy trayendo una colección de datos y deseo paginarlas. Lo hago de esta manera pero, no pasa nada.

$questionnaires = Questionnaire::with('questions.answers')->paginate(1);
tengo entendido que agregando el método paginate(numero) puedes hacer que se pagine (válgame la redundancia).
 
@EdgarGc ¿ Que eso laravel ?
 
Si
Se me olvido
 
7:25 PM
@EdgarGc ¿ Que versión ?
 
7
Estaba leyendo la doc y te mostraba unos ejemplos con eloquent (usando where) y pense que con with() podria funcionar igual, veo que no
 
public function index()
{
        $users = DB::table('users')->paginate(15);

        return view('user.index', ['users' => $users]);
}
 
public function show(Questionnaire $questionnaires){
$questionnaires = Questionnaire::with('questions.answers')->paginate(1);

return view('questionnaire.show', compact('questionnaires'));
}
Lo tengo de esta manera
 
@EdgarGc ¿por qué 1?
 
Porque quiero que solo pase 1
 
7:27 PM
@EdgarGc ¿ Y cual es el sentido de paginar y enviarle un solo registro ?
 
Que, ahorita con show estoy viendo todos los registros
 
@EdgarGc ¿ Y que tiene que ver ?
 
Porque question es una pregunta, la cual tiene respuestas (answers) y solo quiero mostrar esa unica pregunta con sus respuestas
1.-¿Que lenguajes soportan POO?
A- PHP
B-Java
C-LISP
D-FORTRAN
 
@EdgarGc entonces te falta filtrar la pregunta por su id y recién entonces cargar sus relaciones y posterior paginar
prueba con $question = Question::with('answers')->findOrFail($id)->paginate(numero); lo que pasas en el método de paginate es el número de registros que quieres ver por página, entonces sería el número de respuestas por página
bueno acomoda ese código a lo que tienes, es solo una propuesta
 
Ah, con que se debe llamar a la coleccion completa y luego filtrar
Eso tiene sentido
Voy a intentar con lo que me comentas @BetaM
 
 
1 hour later…
8:39 PM
@JuanPerez Puede ser, pero no tengo idea.
 
@PatricioMoracho En la api de bigcomerce tengo 20,000 por hora
@PatricioMoracho Porque es raro que se actualicen unos registros y otros no
 
Si, pero no puedo ayudar mucho en esto, más allá de decirte que aísles el caso en particular y lo estudies en detalle dónde podría estar el problema
 
Vale te entiendo
 
9:31 PM
@quevedo Buenas...
¿ Como te ha ido ?
 
10:17 PM
0
Q: Error en formato de código por salto de línea en cadenas o mezcla de comillas dobles y simples

TribyRespondiendo una pregunta, veo que el código que coloqué no aparece correctamente: Esto no aparece correctamente, se pierde el formato por "romper" la cadena con el salto de línea o por usar comillas simples dentro de una cadena delimitada por comillas dobles (¿o viceversa?). $guardar_venta = "IN...

 
 
1 hour later…
11:44 PM
@JuanPerez Hola
No vi antes tu saludo. Estaba asistiendo a un cliente
 
00:00 - 14:0014:00 - 00:00

« first day (1796 days earlier)      last day (1305 days later) »