automation

Cateodata mai am si zile din alea in care chiar trebuie sa muncesc, nu doar sa am opinii despre ce ar trebui altii sa faca. Da stiu, maxim de trist, da’ cateodata mai trag paiu’ scurt…

Cand am mult de lucru, mai ales pe implementari, incerc s-o dau pe automatizare cat se poate de mult din vreo doua motive mari si late:

  • sa nu-mi pierd mintile
  • sa nu gresesc prea mult ca mi-am pierdut mintile

Pentru asta ma dau in general cu Python ca mi-e la indemana si so far mi se pare tata’lor la structuri de date. Adica pentru ca pentru un fisier de intrare de genul:

smc3r01-t1,11.12.13.14,tf
snc4l01-t1,15.16.17.18,t
snt3b02-e1,19.20.21.22,f
tmc5o04-c1,23.24.25.26,tf

pot sa scot o structura de date de tip key/value intr-o linie de cod (bine, 3, da’ oricum):

#!/usr/bin/python3
import csv

with open('t.csv', mode='r') as t_infile:
  reader = csv.reader(t_infile)
  t_nodes = {rows[0]: [rows[1], rows[2]] for rows in reader}

Si dupa aia sa fac chestii cu t_nodes gen:

for n in t_nodes:
  print(n,t_nodes[n][0],t_nodes[n][1])

Pentru ca de fapt t_nodes arata de fapt asa:

{'smc3r01-t1': ['11.12.13.14', 'tf'],'snc4l01-t1': ['15.16.17.18', 't'], 'snt3b02-e1': ['19.20.21.22', 'f'], 'tmc5o04-c1': ['23.24.25.26', 'tf']}

Pai sa ai un key/value store (sau dictionary cum ii zice de fapt) in 3 linii de cod in care valorile sa fie o lista, genius. Sa nu mai zic ca poti avea un dictionare de dictionare pentru cand lucrurile chiar sunt complicate.

Exemplul asta l-am dat ca ca mi-a dat clientul un Excel cu cateva mii de linii si un alt Excel cu doar cateva sute de linii si mi-a zis sa fac sa fie bine :)

Varianta aia indiana era sa zic ca mai am nevoie de cativa oameni care sa utilizeze un GUI, unde dureaza minim 30-40 de secunde de dat click-uri, introdus date si validat sumar pentru fiecare linie din aia din fisier, si asta dupa ce intri intr-un ritm cat de cat decent de lucru.

Varianta mea dureaza 2 secunde pe linie ca e API-ul un pic incet. Si nici nu face greseli. Scriptul meu adica, ca API-ul nu e scris de mine sa fie perfect =)))

Alteori lucrurile sunt mai complicate decat a citi stuff dintr-un CSV, dar alea’s povesti pentru alte alta data.

O alta chestie de vreau sa zic, ca tot am adus vorba de Python, ala de a inventat f” string sa aiba noroc de-un harem de tinere si sa dea la buci pana o sa-i cada pula, ca e absolut geniala functionalitatea asta.

def mkgeneric(what, element):
  if element == '':
      return f' {what} "Any"'
  if len(element.split(',')) == 1:
      return f' {what} "{element.strip()}"'
  if len(element.split(',')) > 1:
      element = element.split(',')
      el = []
      for i in range(len(element)):
          el.append(f'{what}.{i+1} "{element[i].strip()}"')
      return ' '.join(el)

Fara asta scriam la .format() de-mi ieseau ochii, asa il bag direct pe unde trebuie fara nici o treaba, si asta e un exemplu simplu…

Tot pentru automatizare, dar mai mult pentru prototipare (da’ gay mai e cuvantul asta in romana) folosesc Postman, care este genial – mai ales ca poate sa iti zica si cam cum ar trebui sa arate codul intr-un limbaj de programare, gen Python, pentru ce incerci sa faci.


Pe langa treaba de mai sus, cu Postman poti face super debugging cand vrei sa vorbesti cu un API. M-a scos de cateva ori cand vorbeam cu API-uri necunoscute si cu documentatie scrisa de autisti…

Si e bun si cand iti faci singur API si vrei sa-l validezi ca si merge :))

Long story short, lucrurile devin un pic mai usoare daca le faci programatic.

3 thoughts on “automation

  1. Poți sa te joci și cu Pandas Libraries și datasets, e destul de bun in lucru cu Excel sau seturi de date structurate in general.

    1. Si, sa ajung la lucruri complicate sau complexe sa trebuiascsa sa le procesez cu Pandas. Momentan “import csv” face minuni :)) Don’t ask…

  2. Python este într-adevăr tatăl lor la structuri de date și la „vreau să scriu o chestie *acum*”, și eu sunt mare fan :-) Îmi place însă că și foarte extensibil, la modul că e documentat foarte clar felul în care cod în Python, rulat pe CPython se poate interfața cu cod scris în orice alt limbaj care e în stare să producă SO/DLL-uri, și atunci problema clasică cu „eu folosesc limbajul X pentru că are biblioteca Y care e super sexy” dispare instantaneu.

    Privitor la faza cu .format(), se poate și cu % ;-)

Leave a Reply to sin Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.