[Python] [PYTHON] Verificare se una stringa contiene dei caratteri

2023-11-30 Per discussione Valerio Pachera
Ciao a tutti, devo fare una cosa relativamente, verificare se in una
stringa (*in qualsiasi punto*) ci sono certi caratteri.

Questo restituisce null perché la x è alla fine della stringa e non
all'inizio.
>>> p = re.compile('[xyz]')
>>> re.match(p, 'ciaox')

Questo invece fa match perché la stringa è all'inizio.
>>> re.match(p, 'xciao')


Anche se non mi interessa l'output potrei usare
>>> re.findall(p, 'ciaox')
['x']

e verificare se la lista è vuota o meno.

Voi cosa fareste?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [PYTHON] Suggerimento framework

2023-07-24 Per discussione Valerio Pachera
Il giorno mer 19 lug 2023 alle ore 13:04 Marco Giusti <
marco.giu...@posteo.de> ha scritto:

> Io userei Flask, e' semplice da usare e completo
>

Grazie della risposta.
Sto studiando questo framework.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] [PYTHON] Suggerimento framework

2023-07-19 Per discussione Valerio Pachera
Buongiorno a tutti, vi chiedo un consiglio:

vorrei realizzare una pagina web che NON richiede autenticazione,
dove posso fare upload di un file
deve esserci un controllo sulla dimensione del file
una volta caricato il file lato server deve essere eseguito con comando che
lo leggere e ritorna del testo come output;
l'output deve essere visualizzato nella pagina.

Ho un discreta confidenza con python ma poco background di programmazione
web.

Che approccio / framework mi consigliate?

Grazie.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [python] escludere righe vuote o commentate

2023-02-05 Per discussione Valerio Pachera
Il giorno mer 1 feb 2023 alle ore 12:43 Marco Giusti 
ha scritto:

> for line in open(filename):
>  if line.strip() and not line.startswith("#"):
>  clean.append(line)
>
>
Credo vada modificato così, altrimenti le righe che iniziano con degli
spazi e seguire da un cancelletto vengono aggiunte alla lista:

for line in open(filename):
 line = line.strip()
 if line and not line.startswith("#"):
 clean.append(line)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [python] escludere righe vuote o commentate

2023-02-01 Per discussione Valerio Pachera
Il giorno mer 1 feb 2023 alle ore 10:25 Valerio Pachera 
ha scritto:

> Ciao a tutti, vorrei ottenere lo stesso risultato di
>
> grep -Ev '(^[[:blank:]]*$|^#)'
>

 Per ora ho usato questo approccio:

with open('file.txt') as f:
p = re.compile('^\s*$|^#.*')
clean = [line for line in f.readlines() if not re.match(p, line)]

clean è una lista con le righe "buone" del file.
Notare che mantengono il \n alla fine.
Per stampare quindi il contenuto mi basta fare join di una stringa vuota.

  print(''.join(clean))

Nel mio caso specifico voglio poi portare tutto su una singola riga.
In tal caso, devo rimuovere il fine riga (usando strip) e fare il join
usando uno spazio.

with open('template.txt') as template_content:
p = re.compile('^\s*$|^#.*')
clean = [line.*strip*() for line in template_content.readlines() if not
re.match(p, line)]
print(' '.join(clean))

Sono comunque curioso di vedere altre implementazioni :-)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] [python] escludere righe vuote o commentate

2023-02-01 Per discussione Valerio Pachera
Ciao a tutti, vorrei ottenere lo stesso risultato di

grep -Ev '(^[[:blank:]]*$|^#)'

Ho pensato a questo:

p = re.compile('^\s*$|^#.*', re.MULTILINE)

\s
Matches any whitespace character; this is equivalent to the class [
\t\n\r\f\v].

Se provo però a sostituire le righe che matchano con una stringa vuota, non
viene rimosso il new line.

re.sub(p, '', mystring)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Parsing di un file ldif invalido

2022-09-15 Per discussione Valerio Pachera
Il giorno mer 14 set 2022 alle ore 15:36 Marco Giusti <
marco.giu...@posteo.de> ha scritto:

>
>
> #!/usr/bin/env python3
>
> import sys
> from ldif3 import LDIFParser
>
> ldif_path = sys.argv[1]
>
> with open(ldif_path, 'rb') as ldif_file:
>  parser = LDIFParser(ldif_file)
>
>  for dn, entry in parser.parse():
>  try:
>  print(dn, entry['cn'])
>  except ValueError:
>  continue
>
>
> Ciao, grazie della risposta ma l'errore avviene nel momento in cui la
variabile dn viene popolata, prima del try.
Credo che non sia possibile gestire l'eccezione in questa fase :-(.
Dovrebbe essere gestita dal modulo ldif3.
Mentre scrivevo questo sono andata a spulciare la documentazione della
libreria  e fra i parametri ho
trovato:
"strict (boolean) – If set to False, recoverable parse errors will produce
log warnings rather than exceptions."

Ho modificato lo script come segue:

---
#!/usr/bin/env python3

import sys
from pprint import pprint
from ldif3 import LDIFParser

ldif_path = sys.argv[1]

with open(ldif_path, 'rb') as ldif_file:
parser = LDIFParser(ldif_file, *strict=False*)

for dn, entry in parser.parse():
pprint(dn)
pprint(entry)
---

Ho eseguito lo script:

---
./test.py bad_sample.ldif 2> error.log

'cn=*Mario, Rossi*,mail=mario.ro...@domain.com'
OrderedDict([('objectclass',
  ['top',
   'person',
   'organizationalPerson',
   'inetOrgPerson',
   'mozillaAbPersonAlpha']),
 ('givenName', ['Mario Rossi']),
 *('cn', ['Mario, Rossi']),*
 ('mail', ['mario.ro...@domain.com']),
 ('modifytimestamp', ['1632815299'])])

cat error.log
No valid string-representation of distinguished name cn=Mario, Rossi,mail=
mario.ro...@domain.com.
---

In questo modo lo script non si blocca e ho comunque traccia dei contatti
problematici da sistemare in sorgente!
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Parsing di un file ldif invalido

2022-09-14 Per discussione Valerio Pachera
Buongiorno a tutti, ho la seguente esigenza: parsare un file ldif prodotto
dall'esportazione di una rubrica di Thunderbird.

Prendiamo questo ldif come esempio:
---
dn: cn=Mario Rossi,mail=mario.ro...@domain.com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: mozillaAbPersonAlpha
givenName: Mario Rossi
cn: Mario Rossi
mail: mario.ro...@domain.com
modifytimestamp: 1632815299
---

E il codice necessario per fare il parsing:
---
#!/usr/bin/env python3

import sys
from ldif3 import LDIFParser

ldif_path = sys.argv[1]

with open(ldif_path, 'rb') as ldif_file:
parser = LDIFParser(ldif_file)

for dn, entry in parser.parse():
print(dn, entry['cn'])
---

Funziona perfettamente fino a che non trovi un contatto che una virgola nel
CN.
Esempio di ldif problematico:
---
dn: cn=Mario, Rossi,mail=mario.ro...@domain.com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
objectclass: mozillaAbPersonAlpha
givenName: Mario Rossi
cn: Mario, Rossi
mail: mario.ro...@domain.com
modifytimestamp: 1632815299
---

Errore che si ottiene:
---
Traceback (most recent call last):
  File "./simple.py", line 11, in 
for dn, entry in parser.parse():
  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 384, in parse
yield self._parse_entry_record(block)
  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 360, in
_parse_entry_record
self._check_dn(dn, attr_value)
  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 339, in
_check_dn
self._error('No valid string-representation of '
  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 330, in
_error
raise ValueError(msg)
ValueError: No valid string-representation of distinguished name cn=Mario,
Rossi,mail=mario.ro...@domain.com.
---

Nota: il CN a volte è espresso come base64 e al suo interno ci può essere
una virgola che rompe la sintassi.

*E' possibile "ignorare" i valori errati con un try?* Come applicarlo al
ciclo?
https://stackoverflow.com/questions/39889811/python-ldif3-parser-and-exception-in-for-loop

Ogni suggerimento è ben accetto :-)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Suggerimento per creazione classe

2022-01-01 Per discussione Valerio Pachera
Il giorno ven 31 dic 2021 alle ore 14:25 Massimo Masson 
ha scritto:

> ...
> Rapidamente, potresti "staticizzare" i due path nella classe, ad esempio:
>
> class Account(object):
>  src = 'sorgente_'
>  dst = 'destinazione_'
>
> ...
>
> poi magari cerca sui decoratori @staticmethod ed anche @classmethod.
> Ma intanto credo faccia quello che hai chiesto...
>
>
A dire il vero no, perche' i percorsi li devo definire al di fuori della
classe.
Mi sono rinfrescato la memoria sui name space, class variables and class
methods grazie al mitico Corey Shafer e ho trovato la risposta :-)
https://www.youtube.com/watch?v=ZDa-Z5JzLYM=PL-osiE80TeTsqhIuOqKhwlXsIBIdSeYtc

import os.path

class Account(object):

def __init__(self, name):
self.name = name
self.src_path = os.path.join(Account.src_path, self.name)
self.dst_path = os.path.join(Account.dst_path, self.name)

@classmethod
def set_commont_paths(cls, src_path, dst_path):
cls.src_path = src_path
cls.dst_path = dst_path

def export(self):
# do many things
print(f'export account {self.name} from {self.src_path} to
{self.dst_path}')

Account.set_commont_paths('/opt/', '/mnt/backups')
instance = Account('john.doe')
instance.export()
instance = Account('someone')
instance.export()

risultato:

export account john.doe from /opt/john.doe to /mnt/backups/john.doe
export account someone from /opt/someone to /mnt/backups/someone

I punti chiave sono:
- aver usato il nome della classe Account nel metodo __init__ in da leggere
la variabile al di fuori dello scope della funzione/metodo.
- aver creato un class method che modifica le variabili di classe.

Notare che prima di istanziare degli account, devo per forza richiamare il
class method Account.set_commont_paths, altrimenti al costruttore
mancheranno le variabili di classe.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Suggerimento per creazione classe

2021-12-31 Per discussione Valerio Pachera
Buongiorno a tutti, scusatemi in anticipo se non saro' chiaro.
Devo capire se si puo' fare una cosa e come.
Sto cercando di improntare struttura di questa classe:

class Account():

def __init__(self, name):
self.name = name

def self.export(self):
src_path = os.path.join(src_path, self.name)
dst_path = os.path.join(dst_path, self.name)
# do many things
print(f'export {src_path} to {dst_path}')

instance = Account('john.doe')
instance.export()

Come avrete notato, src_path e dst_path non sono dichiarati.
Tali percorsi sono uguali per qualsiasi istanza della classe, percio'
vorrei evitare di doverli passare al costruttore, altrimenti per istanziare
un oggetto dovrei scrivere:

instance = Account(src_path, dst_path, 'john.doe')

e lo trovo ridondante.
Vorrei inizializzare i parametri src_path e dest_path 1 sola volta in modo
che siano poi disponibili a tutte le istanze, ammesso che si possa fare.

Suggerimenti?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] [PYTHON] Leggere certificato x509

2021-11-05 Per discussione Valerio Pachera
Ciao a tutti, il mio obiettivo è ottenere la lista dei Subject
Alternative Name di un certificato.

X509v3 Subject Alternative Name:
DNS:nome1.domain.tld , DNS:nome2.domain.tld, DNS:nome3.domain.tld

Ho ottenuto un risultato parziale tramite:

---
#!/usr/bin/env python3

from pprint import pprint

from cryptography import x509
from cryptography.hazmat.backends import default_backend

with open('/tmp/file.cer') as f_cert:
pem_data = f_cert.read().encode('ascii')
cert = x509.load_pem_x509_certificate(pem_data, default_backend())
print(cert.subject)
---

Prendendo spunto da
https://stackoverflow.com/questions/16899247/how-can-i-decode-a-ssl-certificate-using-python

Guardando la documentazione
https://cryptography.io/en/latest/x509/reference/#x-509-certificate-object
o anche semplicemente tramite
print(help(cert))
vedo l'elenco delle "proprietà" che posso richiamare (non so bene come
riferirmi).

Ad esempio, potrei voler stampare il Common Name tramite

print(cert.subject)

Non so bene come interpretare l'output che ottengo:

, value='nomeprincipale.domain.tld')>])>

Non è una lista, stringa, tupla ...
1) Come posso ricavare/estrapolare il valore "nomeprincipale.domain.tld" ?

Rispondere a questa domanda sicuramente mi aiuta, ma non ho ancora
raggiunto il mio scopo: ottenere la lista dei Subject Alternative
Name.

Non vedo la possibilità di richiamare qualcosa tipo

cert.subject_alternative_name

2) Come posso ricavare i Subject Alternative Names?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Chiarimento sugli iteratori

2021-09-17 Per discussione Valerio Pachera
Il caso simil reale è questo

ho una funzione che legge un file, e potrei ritornare una grande lista.
Al posto di ritornare la lista, faccio lo yield del dato estratto, al
fine di risparmiare RAM.

def parsefile(path):
# tante belle cose
yield x

Ho poi altre due funzioni che generano delle stringhe.
Come argomento potrei passare il listone, ma passo l'iteratore


data = parsefile(path):

def tampastinga1(data):
 # prendi il necessario da data
 return stinga

def stampastringa2(data):
# prendi il necessario da data
return stringa

Ebbene, la seconda funzione non ritorna nulla.

Il giorno ven 17 set 2021 alle ore 16:57 Valerio Pachera
 ha scritto:
>
> Buongiorno a tutti, ho notato questa cosa:
>
> #!/usr/bin/env python3
>
> def test():
> for x in range(0, 10):
> yield x
>
> iterator = test()
>
> print(test)
>
> for x in iterator:
> print(x)
>
> for x in iterator:
> print(x)
>
> -
>
> Restituisce
>
> 
> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
>
> ---
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Chiarimento sugli iteratori

2021-09-17 Per discussione Valerio Pachera
Buongiorno a tutti, ho notato questa cosa:

#!/usr/bin/env python3

def test():
for x in range(0, 10):
yield x

iterator = test()

print(test)

for x in iterator:
print(x)

for x in iterator:
print(x)

-

Restituisce


0
1
2
3
4
5
6
7
8
9

---

Mentre se modifico lo script con

for x in test():
print(x)

for x in test():
print(x)

---

Ottengo


0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

---

Nella mia testa pensavo fosse indifferente richiamare "iterator"
anziché "test()".
Se verifico il tipo di dato ottengo

iterator = test()
print(type(test))



--

Non mi è chiarissimo il motivo per cui, al secondo ciclo for non viene
restituito alcun dato.
Sapete darmi una dritta?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] aiuto espressione regolare

2021-08-23 Per discussione Valerio Pachera
Il giorno lun 23 ago 2021 alle ore 11:20 Pietro Brunetti
 ha scritto:
>
> Io farei il tamarro.
>
> Rimuoverei tutte le virgole (a priori) e poi cambierei "mail=" con ",mail=".

Avevo pensato la stessa cosa ma bisogna farlo solo sulle righe che
iniziano con "dn: cn=".
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] aiuto espressione regolare

2021-08-23 Per discussione Valerio Pachera
Buongiorno a tutti, mi ritrovo a fare il parse di un file ldif.
Ottengo però errore su alcune entry "scritte male", es:

ValueError: No valid string-representation of distinguished name
cn=descrizione con, delle, virgole,mail=john.doe.domain.com.

La presenza di virgole nel cn: manda in crisi il modulo.
Pensavo quindi di correggere il file prima di parsarlo.

Le stringhe di esempio nel file ldif sono

dn: cn=descrizione con, delle, virgole,mail=maria.diquat...@cnosfap.net

cn: descrizione con, delle, virgole

Nel primo caso, vorrei fare il match delle righe che iniziano con "dn:
cn=" e tramite un capturing group fare il match di tutti i caratteri
alfanumerici eccetto la virgola, fino a ",mail" e fare la stampare il
capturing gruop.

Nel secondo caso, un'espressione tipo: se la riga inizia con cn:
rimuovi tutte le rigole.
Anche in questo caso potrei usare un capturing group matchando i
caratteri alfanumerici.

Riuscite a darmi una dritta sulla sintassi che usereste voi?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] SOAP request tramite Zeep a Zimbra

2021-06-04 Per discussione Valerio Pachera
Buongiorno a tutti, esiste questa libreria per generare delle richieste
SOAP verso zimbra:
https://github.com/Zimbra-Community/python-zimbra

tuttavia ero curioso di provare la libreria zeep
https://docs.python-zeep.org

per avere un paragone e capire se può essere una valida alternativa.
Sarò sincero, non mangio xml a colazione e vi chiedo se qualcuno ha voglia
di aiutarmi a generare una richiesta SOAP valida tramite zeep.

Zimbra ha una buona documentazione delle proprie API:
https://files.zimbra.com/docs/soap_api/8.8.15/api-reference/index.html

Una delle più banali è la GetAccountInfo.
All'inizio di ogni pagina c'è specificato se serve un "Authorization token
required" (autenticazione utente "normale") oppure "Admin Authorization
token required" (utente amministratore).

Altro concetto importante per l'ambiente Zimbra sono i name space.
GetAccountInfo fa parte dello urn:zimbraAccount.
Tale info la si trova sempre nelle pagine delle api ma ance nella vsdi

python3 -mzeep
https://my-zimbra.addr.tld/service/wsdl/ZimbraUserService.wsdl
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: urn:zimbra
ns1: urn:zimbraMail
ns2: urn:zimbraAccount
ns3: urn:zimbraRepl
ns4: urn:zimbraSync
ns5: urn:zimbraVoice

Nonostante abbia chiaro cosa inserire in una richiesta, non mi è chiaro
come fare con la libreria zeep.
Sempre nell'esempio di GetAccountInfo, il contenuto nel tag name viene
interpretato in base a quando inserito nel paramentro "by". Se by="name",
il contenuto del tag sara ad esempio joun@domain.com, se è by="id" sarà
una codice, tipo 1973122c-53c9-4459-b8f9-51a2293dee33.
Non ho idea di come vadano passate queste 2 informazioni e tanto meno
quella del name space.

In fine credo che la parte più difficile nell'uso della libreria zeep è
probabilmente la gestione della sessione SOAP che non ho idea di come
vadano gestite.

Preciso che non sono uno sviluppatore e studio python nei ritagli di tempo
:-(
Non ho quindi un particolare background su programmazione / interazione con
servizi web dal punto di vista di programmazione.

Un saluto.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [Python3] virtualenv aggiornato su vecchia distro

2021-06-04 Per discussione Valerio Pachera
Il giorno lun 31 mag 2021 alle ore 14:34 Strap Lab  ha
scritto:

> ...
> Quindi, se vuoi differenti versioni di python senza aggiornare il sistema
> operativo ti suggerirei l'utilizzo di pyenv https://github.com/pyenv/pyenv
> che ti aiuterà a scaricare e compilare la versione di Python che desideri
>

Vi confermo che sono riuscito ad usare pyenv ed installare python 3.9.5 e
far girare lo script con le sue benedette librerie.
Grazie ancora dell'aiuto!
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [Python3] virtualenv aggiornato su vecchia distro

2021-05-31 Per discussione Valerio Pachera
Il giorno lun 31 mag 2021 alle ore 14:34 Strap Lab  ha
scritto:

>
>
> Sì, devi compliarti le versioni di Python che ti servono.
> Quindi, se vuoi differenti versioni di python senza aggiornare il sistema
> operativo ti suggerirei l'utilizzo di pyenv https://github.com/pyenv/pyenv
> che ti aiuterà a scaricare e compilare la versione di Python che desideri
> (c'è pure asdf https://github.com/asdf-vm/asdf che fa anche di più
> nell'eventualità).
> Non badare alle funzionalità di attivazione e disattivazione
> dell'interprete che ti mette a disposizione pyenv, usalo principalmente per
> automatizzare la build degli interpreti Python, perché altrimenti il
> sistema operativo farà parecchia confusione e non vogliamo che accada.
> Una volta scaricata e installata la versione di Python con pyenv puoi
> continuare ad utilizzare virtualenv indicando il python path che ti
> interessa con il parametro -p.
>

Grazie mille per i suggerimenti, questa sembra la strada migliore!
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] [Python3] virtualenv aggiornato su vecchia distro

2021-05-31 Per discussione Valerio Pachera
Grazie per le risposte.
Avevo valutato (velocemente) se usare virtualenv o venv e la mia scelta era
ricaduta sul primo perché ha alcune funzionalità in più, in particolare,
paragonato a virtualenv
https://virtualenv.pypa.io/en/latest/
"cannot create virtual environments for arbitrarily installed python
versions (and automatically discover these),"

Il vero problema che sto cercando di aggirare è questo (su ubuntu 16.04):

pip3 --version
Traceback (most recent call last):
File "/usr/bin/pip3", line 11, in 
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/pip/__init__.py", line 12, in
main
from pip._internal.utils.entrypoints import _wrapper
File
"/usr/local/lib/python3.5/dist-packages/pip/_internal/utils/entrypoints.py",
line 4, in 
from pip._internal.cli.main import main
File "/usr/local/lib/python3.5/dist-packages/pip/_internal/cli/main.py",
line 58
sys.stderr.write(f"ERROR: {exc}")
^
SyntaxError: invalid syntax

notare che avendo pip3 "rotto" di suo, non posso neanche usarlo per
installare altri moduli nel virtual env.

Ho provato quindi ad installare una versione specifica di pip:
https://stackoverflow.com/questions/66212924/pip-sys-stderr-writeferror-exc-with-python-3-5

Ho installato
apt-get install python3-venv

e provato a creare e attivare il virtual env
python3 -m venv venv
source venv/bin/activate

Installo con successo i moduli che mi servono:
pip3 install htmlentities Jinja2 ldap3 python-zimbra six

eseguo il mio script e va in crisi su qualcosa relativo a Jinja2

./myscript.py -h
Traceback (most recent call last):
File "./myscript.py", line 7, in 
from jinja2 import Environment, FileSystemLoader
File
"/opt/Custom/myscript/venv/lib/python3.5/site-packages/jinja2/__init__.py",
line 5, in 
from .bccache import BytecodeCache as BytecodeCache
File
"/opt/Custom/myscript/venv/lib/python3.5/site-packages/jinja2/bccache.py",
line 61
self.code: t.Optional[CodeType] = None
^
SyntaxError: invalid syntax

Controllo la variabile d'ambiente

echo $PATH
/opt/Custom/ss-signatures/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

E qua credo proprio che l'interprete sia troppo vecchio.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] [Python3] virtualenv aggiornato su vecchia distro

2021-05-31 Per discussione Valerio Pachera
Buongiorno a tutti, mi trovo nella seguente situazione:
ho una ubuntu 16.04 con python 3.5 e devo far girare una script che
richiede vari moduli aggiornati (tra cui Jinja2).

Sul mio portatile ho creato, tramite virtualenv, un ambiente comprensivo di
tali moduli e python3.8 (opzione --always-copy) per poi scoprire che il
virtualenv non è "portabile".
Esso infatti usa dei percorsi assoluti.

Facendo una ricerca trovo menzionata l'opzione --relocatable ma che non
trovo nel --help
https://stackoverflow.com/questions/32407365/can-i-move-a-virtualenv

virtualenv --version
virtualenv 20.4.7 from
/usr/local/lib/python3.8/dist-packages/virtualenv/__init__.py

virtualenv --help | grep reloc

L'altra strada sarebbe quella di creare il virtualenv direttamente sulla
ubuntu 16.04 ma non saprei come fare a generare un virtualenv con la
versione 3.8 (o 3.9) di python.

Immagino che il primo suggerimento sia "aggiorna la ubuntu" e avete
ragione, ma esiste la possibilità di avere un virtualenv con python
aggiornato su una distro vecchia?

Grazie in anticipo :-)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ordinare lista di dizionari

2021-05-19 Per discussione Valerio Pachera
Ho trovato la risposta :-)

https://stackoverflow.com/questions/72899/how-do-i-sort-a-list-of-dictionaries-by-a-value-of-the-dictionary

Il giorno mer 19 mag 2021 alle ore 16:50 Valerio Pachera
 ha scritto:
>
> Ciao, avendo questa lista:
>
> [
> {'name': 'mario', 'age': 50},
> {'name': 'luigi', 'age':25},
> {'name': 'sonic', 'age':63}
> ]
>
> come posso ordinare per età?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Ordinare lista di dizionari

2021-05-19 Per discussione Valerio Pachera
Ciao, avendo questa lista:

[
{'name': 'mario', 'age': 50},
{'name': 'luigi', 'age':25},
{'name': 'sonic', 'age':63}
]

come posso ordinare per età?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] atlassian api

2021-02-18 Per discussione Valerio Pachera
Ho capito a quale epic name di riferiva il post di stackoverflow: si
tratta di un custom field che varia su ogni installazione di
atlassian/jira.
Osservando la epic creata da interfaccia web ho individuato la chiave
dove inserire la epic name e l'ho aggiunta alla mia richiesta

'customfield_10901': 'Epic crea via API'

E ha funzioanto.

Il giorno lun 15 feb 2021 alle ore 18:01 Valerio Pachera
 ha scritto:
>...
> ricevo un errore che non mi fa capire cosa sto sbagliando
>
> Creating issue "test rest"
> Traceback (most recent call last):
>   File "./ss-jira-epic-templates.sh", line 16, in 
> jira.issue_create(
>   File "/usr/local/lib/python3.8/dist-packages/atlassian/jira.py",
> line 982, in issue_create
> return self.post(url, data={"fields": fields})
>   File "/usr/local/lib/python3.8/dist-packages/atlassian/rest_client.py",
> line 303, in post
> response = self.request(
>   File "/usr/local/lib/python3.8/dist-packages/atlassian/rest_client.py",
> line 236, in request
> response.raise_for_status()
>   File "/usr/local/lib/python3.8/dist-packages/requests/models.py",
> line 941, in raise_for_status
> raise HTTPError(http_error_msg, response=self)
> requests.exceptions.HTTPError: 400 Client Error: Bad Request for url:
> https://zextras.atlassian.net/rest/api/2/issue
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] atlassian api

2021-02-15 Per discussione Valerio Pachera
Buon giorno a tutti, sto provando a creare dei Task e delle Epic con la libreria
https://atlassian-python-api.readthedocs.io/

Ho trovato molto utile l'esempio di creazione di un task riportato su
questo repository:
https://github.com/atlassian-api/atlassian-python-api/tree/master/examples/jira

jira.issue_create(
fields={
"project": {"key": "TEST"},
"issuetype": {"name": "Task"},
"summary": "test rest",
"description": "rest rest",
}
)

Se provo però a creare una Epic,

jira.issue_create(
fields={
"project": {"key": "TST"},
"issuetype": {"name": "Epic"},
"summary": "test rest",
"description": "rest rest",
}
)

ricevo un errore che non mi fa capire cosa sto sbagliando

Creating issue "test rest"
Traceback (most recent call last):
  File "./ss-jira-epic-templates.sh", line 16, in 
jira.issue_create(
  File "/usr/local/lib/python3.8/dist-packages/atlassian/jira.py",
line 982, in issue_create
return self.post(url, data={"fields": fields})
  File "/usr/local/lib/python3.8/dist-packages/atlassian/rest_client.py",
line 303, in post
response = self.request(
  File "/usr/local/lib/python3.8/dist-packages/atlassian/rest_client.py",
line 236, in request
response.raise_for_status()
  File "/usr/local/lib/python3.8/dist-packages/requests/models.py",
line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url:
https://zextras.atlassian.net/rest/api/2/issue

Facendo una ricerca ho trovato questo topic:
https://stackoverflow.com/questions/43985072/unable-to-create-epic-using-jira-cloud-rest-api-c
La cosa più probabile è che debba passare qualche altra coppia chiave
valore necessaria alla creazione di una Epic.
Il topic menziona "Epic Name" ma ho il sospetto si riferisca alla issuetype.
Ho guardato l'output di jira.issue('TST-9') che è una Epic creata via
web e non ho trovato alcun riscontro di "Epic Name".

Secondo voi, cosa sto sbagliando?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] atlassian api

2021-02-12 Per discussione Valerio Pachera
Rispondo a me stesso: è possibile su Jira creare un token di autenticazione
da usare nello scirpt al posto della password utente senza quindi
coinvolgere okta direttamente nelle preferenze del proprio utente.

"API token

A script or other process can use an API token to perform basic
authentication with Jira Cloud applications or Confluence Cloud. You must
use an API token if the Atlassian account you authenticate with has had
two-step verification enabled. You should treat API tokens as securely as
any other password."

Saluti!

Il giorno gio 11 feb 2021 alle ore 17:05 Valerio Pachera 
ha scritto:

> Ciao a tutti, questa e' una domanda un po' generica: vorrei usare la
> libreria
> https://atlassian-python-api.readthedocs.io/
> per creare dei ticket su jira in modo automatizzato.
>
> L'istanza jira su cui mi devo autenticare pero' usa okta come identity
> manager con il 2FA.
>
> Come posso fare in questo caso per autenticarmi e usare questa libreria?
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] atlassian api

2021-02-11 Per discussione Valerio Pachera
Ciao a tutti, questa e' una domanda un po' generica: vorrei usare la
libreria
https://atlassian-python-api.readthedocs.io/
per creare dei ticket su jira in modo automatizzato.

L'istanza jira su cui mi devo autenticare pero' usa okta come identity
manager con il 2FA.

Come posso fare in questo caso per autenticarmi e usare questa libreria?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Sostituzione di lettere accentate con html entities

2020-11-27 Per discussione Valerio Pachera
Credo di aver trovato la risposta:

https://pypi.org/project/htmlentities/

import htmlentities
htmlentities.encode("perché c'è una città")
"perch c' una citt"

Il giorno gio 26 nov 2020 alle ore 17:35 Valerio Pachera 
ha scritto:

> Ciao a tutti, ho uno script che usa jinja2 come sistema di template.
> Leggo i dati da una sorgente ldap e con quelli faccio il render del
> template.
> Problema: alcuni nomi e cognomi hanno le lettere accentate.
> Vorrei convertire queste lettere nella rispettiva entity html.
> Jinja di suo puo' fare l'escape ma lo fa solo di alcuni caratteri
> "pericolosi" &><'
> Potrei arrangiarmi con una serie di replace() ma mi chiedevo se esiste
> qualcosa di piu' elegante.
> Dalla documentazione di jinja2 non mi sembra vi sia tale funzionalita'.
> Voi cosa ne pensate?
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Sostituzione di lettere accentate con html entities

2020-11-26 Per discussione Valerio Pachera
Ciao a tutti, ho uno script che usa jinja2 come sistema di template.
Leggo i dati da una sorgente ldap e con quelli faccio il render del
template.
Problema: alcuni nomi e cognomi hanno le lettere accentate.
Vorrei convertire queste lettere nella rispettiva entity html.
Jinja di suo puo' fare l'escape ma lo fa solo di alcuni caratteri
"pericolosi" &><'
Potrei arrangiarmi con una serie di replace() ma mi chiedevo se esiste
qualcosa di piu' elegante.
Dalla documentazione di jinja2 non mi sembra vi sia tale funzionalita'.
Voi cosa ne pensate?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Argomenti funzione posizionali e opzionali

2020-11-26 Per discussione Valerio Pachera
Il giorno dom 22 nov 2020 alle ore 18:47 Daniele Zambelli <
daniele.zambe...@gmail.com> ha scritto:

>
> Dato che il contenuto e la signature sono necessari per il
> funzionamento della funzione e che i due tipi di signature sono
> entrambi stringhe, io avrei fatto così:
>
> def modify_signature(content, signature, signature_type='id'):
> if signature_type == 'id':
> fa qualcosa
> elif signature_type == 'name':
> fa qualcosaltro
> else:
> raise ValueError(.)
>
>
Direi che questo approccio e' adatto a quello che sto cercando di fare.

Grazie.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Argomenti funzione posizionali e opzionali

2020-11-20 Per discussione Valerio Pachera
Il giorno ven 20 nov 2020 alle ore 15:53 Alessandro Dentella <
sandro.dente...@gmail.com> ha scritto:

>
>
> non mi è chiaro perché non metti content al primo posto::
>
>
Inizialmente l'avevo messo per ultimo e questo ha generato errore facendomi
rivalutare anche gli altri due argomenti.
Ora lo passo per primo.

def modify_signature(content, signature_id='', signature_name=''):

Espressa così posso richiamare la funzione con 1 solo argomento

modify_signature(content)

In reltà devo passare almeno uno dei due parametri.

Inizio a pensare che l'unico modo sia gestire il controllo dentro la
funzione.

def modify_signature(content, signature_id='', signature_name=''):
if signature_id or signature name:
#do stuff
pass
else:
print('Missing id o name')
sys.exit()
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Argomenti funzione posizionali e opzionali

2020-11-20 Per discussione Valerio Pachera
Ciao a tutti, sto definendo una funziona a cui devo passare un valore per
id o per nome.

Il mio approccio è stato questo

def modify_firma(signature_id='', signature_name='', content):
   if signatrue_id:
  pass
elif signature_name:
pass

Ci sono due problemi: il parametro content è posizionale e va messo prima.
Questo errore mi ha fatto pensare che devo passare almeno uno dei parametri
signature_id o signature_name.
Posso spostare la logica di controllo all'interno della funzione ma mi
chiedevo quale sia la via migliore per gestire questa situazione.

L'altra idea è quella di mettere due parametri posizioni, il primo dei
quali sarà un dizionario.

def modifiy_signature(reference, content):
if 'id' in reference:
pass
elif 'name' in reference:
pass

Cosa consigliate?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Espressione reoglare

2020-09-02 Per discussione Valerio Pachera
Il giorno mer 2 set 2020 alle ore 18:02 Marco Beri  ha
scritto:

>
> Mi piace il tuo senso di sorpresa 
>

Avendo poco tempo per studiare le RE e usandole poche volte, per me tendono
all'alchimia :-)
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Espressione reoglare

2020-09-02 Per discussione Valerio Pachera
Il giorno sab 29 ago 2020 alle ore 00:03 Marco Beri 
ha scritto:

> ...
> Ops, mi correggo:
>
> \w+\b(?
> Sembra funzionare alla grande!
Mo me la studio per bene.
Grazie.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Espressione reoglare

2020-08-28 Per discussione Valerio Pachera
Ciao a tutti, consideriamo la seguente stringa:

'uno due intruso due tre uno'

voglio matchare 'intruso'.
A dire il vero, voglio trovare qualsiasi cosa non  sia 'uno', 'due', 'tre',
'quattro'.
'quattro' non è presente nella stringa ma potrebbe esserci.
Anche la presenza delle altre parole "buone" è opzionale.

Come strategia ho pensato a questo pattern:

'((?:uno)|(?:due)|(?:tre)|(?:quattro)|(?: ))'

Così faccio il match di tutte le parole "buone".
Ora dovrei solo riuscire a negare il pattern e quindi matchare intruso.

Sto testandolo la regex su https://regex101.com/ e mi sembra di essere
sulla buona strada ma non so come fare la negazione del pattern.
Speravo in un semplice ^ ma non è il carattere giusto.

Suggerimenti?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dubbio su name space / variabili globali

2020-08-22 Per discussione Valerio Pachera
Il giorno ven 21 ago 2020 alle ore 21:33 Pietro Brunetti <
gunzap...@gmail.com> ha scritto:

> Non sto a sindacare, ogni linguaggio fa delle scelte. Ma se ci pensi anche
> la scelta di Python ha una sua logica. Ti impedisce di avere delle funzioni
> con side effect difficili da debuggare.
>
> Immagina un codice pieno di funzioni che modifichino variabili esterne al
> loro scopo. Come trovi un eventuale errore senza dare di matto?
>

Sono pienamente d'accordo.
Io avrei impedito anche la lettura delle variabili del global scope
all'interno di una funzione se non dichiarata come global.
La regola invece è: lettura si, scrittura no.
Anche a mia è solo una considerazione.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dubbio su name space / variabili globali

2020-08-20 Per discussione Valerio Pachera
Ho trovato la risposta piuttosto facilmente:
https://www.programiz.com/python-programming/global-local-nonlocal-variables

Quando provo ad assegnare un valore alla variabile, la tratta come locale!
E quindi va in paranoia perché non è stata dichiarata prima.
Diciamo che avrei preferito restituisse errore anche nel primo caso.

Il giorno gio 20 ago 2020 alle ore 10:14 Valerio Pachera 
ha scritto:

> >>> def f():
> ... print(n)
> ...
> non ho ancora dichiarato n.
> La dichiaro esternamente alla funzione, quindi (correggetemi se sbaglio) n
> sarà una variabile globale.
>
> >>> n = 10
> >>> f()
> 10
>
> A conferma di quanto scritto sopra, n viene stampata.
>
> Ora faccio la stessa cosa ma faccio incrementare di 1 la variabile alla
> funzione prima di stamparla.
>
> >>> def f():
> ... n += 1
> ... print(n)
> ...
> >>> n = 10
> >>> f()
> Traceback (most recent call last):
>   File "", line 1, in 
>   File "", line 2, in f
> UnboundLocalError: local variable 'n' referenced before assignment
>
> E qua non capisco...perché riesco a stamparla ma non ad incrementarla?
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Dubbio su name space / variabili globali

2020-08-20 Per discussione Valerio Pachera
>>> def f():
... print(n)
...
non ho ancora dichiarato n.
La dichiaro esternamente alla funzione, quindi (correggetemi se sbaglio) n
sarà una variabile globale.

>>> n = 10
>>> f()
10

A conferma di quanto scritto sopra, n viene stampata.

Ora faccio la stessa cosa ma faccio incrementare di 1 la variabile alla
funzione prima di stamparla.

>>> def f():
... n += 1
... print(n)
...
>>> n = 10
>>> f()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in f
UnboundLocalError: local variable 'n' referenced before assignment

E qua non capisco...perché riesco a stamparla ma non ad incrementarla?
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Libreria per controllare validità record SPF

2020-07-06 Per discussione Valerio Pachera
Ciao a tutti, sapete se esiste già una libreria che esegue un controllo
della sintassi e validità di un record SPF?

Quello che vorrei ottenere è passare un nome dominio ad una funzion /
classe.
Questa si dovrebbe occupare di fare una query DNS per cercare un eventuale
record SPF.
Se lo trova, ne controlla la sintassi.
Se ci sono degli include o dei redirect, deve "seguirli/risolverli" in modo
tale da tenere anche la conta del numero di query DNS che non deve essere
superiore a 10.

Ho trovato delle librerie che controllano se una data mail è conforme ad un
record SPF.
Non una reale mail: vanno passati ip, sender , helo etc per simulare la
consegna di una mail.
Non è quello che vorrei.

Semplicemente, avendo un centinaio di domini, vorrei ogni tanto ciclare e
controllare che non siano state fatte modifiche errate ai record SPF.

Prima di mettermi a scrivere io una libreria, mi sembra giusto valutare il
lavoro di altri.

Ogni consiglio è ben accetto.

Grazie.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Gestione delle date tra python e mysql

2017-01-16 Per discussione Valerio Pachera
Ciao a tutti, sto decidendo come salvare le date in un database mysql:
- come INT, ovvero in posixtimestamp
- come TIMESTAMP di mysql, che salva in formato leggibile e salva la data
in formato UTC (GMT+0) ma la restituisce secondo la timezone del server.
https://dev.mysql.com/doc/refman/5.5/en/datetime.html

Leggendo la documentazione di python vedo che può restirure la data nello
stesso formato
  datetime.isoformat(*sep='T'*, *timespec='auto'*)
ovvero una stringa
  -MM-DDTHH:MM:SS+HH:MM

Quello che non trovo, è se posso istanziare un oggetto di time datetime
passando come paramentro una stringa nel formato iso (senza adoperarmi di
split vari).
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] aiuto espressioni regolari

2013-04-23 Per discussione Valerio Pachera
Il giorno 23 aprile 2013 12:44, Marco De Paoli depao...@gmail.com ha
scritto:

 Il carattere ^ appena dopo la quadra aperta indica negazione.
 Per cui [^ ,] fa match con qualunque carattere esclusi lo spazio e la
 virgola


Ok, ora mi è chiaro.
Grazie 1000.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] command line parsing

2013-04-06 Per discussione Valerio Pachera
Ciao a tutti, sto creando una spece di cli per amministrare delle macchine
virtuali.
Quello che mi preme è tenere una sintassi semplice semplice e rigida.

Ho letto un po' di documentazione su argparse ma faccio fatica a capire se
fa al caso mio o è meglio che mi scriva un semplice parser.

La sintassi della cli NON prevede trattini ( - ).
Il comando sarebbe logicamente diviso in sottocomandi (subparser potrebbe
essere utile).

cli.py guest shutdown nomehost
cli.py host shutdown nomehost

Per il sottocomando 'guest' sono previste varie opzioni, alcune che
possono essere comuni con il sottocomando 'host', come nell'esempio.

Cosa ne pensate?

Alla fine della fiera 'guest' e 'shutdown' insieme identificano la funzione
che andrò a richiamare che avrà come argomento nomehost.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Ottenere chiave di un dizionario con valore maggiore

2013-03-29 Per discussione Valerio Pachera
d = {'uno':1, 'due':2, 'tre':3}
print(max(d))

stampa 'uno' perché la funzione max paragona le chiavi.
Io avrei bisogno di paragonare il valore associato alle chiavi.

può fare?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Ottenere chiave di un dizionario con valore maggiore

2013-03-29 Per discussione Valerio Pachera
Il 29 marzo 2013 14:43, Valerio Pachera siri...@gmail.com ha scritto:
 d = {'uno':1, 'due':2, 'tre':3}
 print(max(d))

Dimentivato: python3
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] python 3 - domande vaie

2013-01-09 Per discussione Valerio Pachera
Grazie delle risposte (quelle utili).
Questo tipo di sintassi risulta particolarmente utile nelle disequazioni.
Ad esempio se voglio verificare se il valore di x è in un certo intervallo:

if 100 = x = 200:
print('x è tra 100 e 200)

Molto più leggibile di

if 100 = x and x = 200:
print('x è tra 100 e 200)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] python 3 - domande vaie

2013-01-02 Per discussione Valerio Pachera
Grazie per le risposte precedenti.
Ho notato una cosa, valida anche per python 2 che prima non sapevo:
si può scrivere in costrutto if senza passare 'or' o 'and'
  if x !=2 !=5 == 4:
print ('vero)

Se non erro, sono legati da and logico.

Non mi spiego questo però:

 x = 3

 if x  7 5:
... print ('vero')
...
 if x  5 7:
... print ('vero')
...
vero
 if x  7 and x  5:
... print ('vero')
...
vero

Perchè ha importanza l'ordine delle disequazioni nel primo if e non nel terzo?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] python 3 - domande vaie

2012-12-26 Per discussione Valerio Pachera
Ciao ragazzi, non sono un programmatore ma ogni tanto ho bisogno di
farmi degli script ed è parecchio che uso python.
Ho deciso di provare pyton3 su debian wheezy e vorrei raccogliere in
questo thread le cose che non riesco a chiarirmi da solo leggendo la
documentazione.

Sto leggendo e provando le differenze fra python 2 e 3
  http://docs.python.org/3.0/whatsnew/3.0.html

Cosa ne pensate di questo:

---
d = {'uno':1, 'due':2, 'tre':3, 'quattro':4}

for key in d.keys():
print (key)

quattro
tre
due
uno
---

Stampa le chiavi dell'array dall'ultima alla prima.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Lanciare processo in foreground da un processo in background

2012-06-19 Per discussione Valerio Pachera
Il 13 giugno 2012 18:00, Giovanni Marco Dall'Olio
dalloli...@gmail.com ha scritto:
 Secondo me devi usare Popen nel modulo subprocess.
 Prova per esempio a digitare sull'interprete interattivo di python:

 import subprocess
 p = subprocess.Popen(['sleep', '10'])

Funziona anche in back ground!
Grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Lanciare processo in foreground da un processo in background

2012-06-13 Per discussione Valerio Pachera
Ciao a tutti, sto creando uno script che lancia mplayer quando si
verifica una certa condizione.
Se lancio lo script in foreground, maplayer funziona, altrimenti
rimane come in sospeso.
Per eseguire il comando uso il modulo 'commands'.

Bastano 2 righe per fare una prova:

---
import commands
commands.getstatusoutput ('mplayer /usr/share/sounds/k3b_success1.wav')
---

python -u prova.py
e
python -u prova.py 

Ho provato anche a forkare il processo ma ottengo lo stesso risultato

---
def play_sound(sound):
print sound
commands.getstatusoutput ('mplayer '+ sound )

player = multiprocessing.Process ( target=play_sound,
args=(/usr/share/sounds/k3b_success1.wav,) )
player.start()
---

Premetto che non sono un programmatore e python lo conosco parzialmente.

Grazie, ciao.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] script per rinomiare file

2011-10-05 Per discussione Valerio Pachera
Ciao ragazzi, ho bisogno di una dritta.
Ho necessità di rinominare dei file da un windows 2008.
Questi file contengono dei caratteri accentati o particolari, come '°'.
Devo sostituire questi caratteri con caratteri alfanumerici non accentati.

Siccome la gestione delle stringe non è una cosa banale, come mi
consigliate di procedere?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] stip nome file da stringa

2011-09-05 Per discussione Valerio Pachera
immaginiamo di avere queste stringhe

'-drive file=/mnt/dat/disco.raw,cache=none'
'-hdb /mnt/dat/disco.raw'

e di voler estrarre disco.raw ovvero la stringa che continene
finisce con .raw e inizia dopo il primo slash.

Ho letto un po' di manuale delle regex e ho provato questo:

p = re.compile('/.*\.raw')
print p.search(disco).group()

che ci va vicini, sono che riporta tutto in path, ovvero /mnt/dati/disco.raw.

Voi come fareste?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] stip nome file da stringa

2011-09-05 Per discussione Valerio Pachera
Non è il massimo della eleganza, un po' prolissa ma di facile
comprensione e dovrebbe funzionare:

stringa = '-drive file=/mnt/dat/disco.raw,cache=none'

def stripFileName(stringa, estensione):
return stringa.split(estensione)[0].split('/')[-1] + estensione

print stripFileName(stringa, '.raw')
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Background su windows

2011-06-07 Per discussione Valerio Pachera
Il 07 giugno 2011 12:04, Marco De Paoli depao...@gmail.com ha scritto:
 dopo aver lanciato lo script vorresti riottenere il command prompt (ossia un
 comportamento simile alla '' su linux), oppure vorresti un esecuzione senza
 bisogno di alcuna finestra di comandi?

Siccome lo script è un ciclo infinito, quando lo eseguo lo lancio
dalla finestra del dos, la lascia aperta e con il prompt occupato.
Vorrei fare in modo che restituisca il prompt come avviene su linux.
A chiudere la finestra mi arrangio io.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e redirezione output

2011-05-19 Per discussione Valerio Pachera
Il 19 maggio 2011 12:35, Daniele Varrazzo p...@develer.com ha scritto:
 Nope. La scrittura avviene in un buffer di qualche Kb e quando è pieno i
 suoi dati vengono flushati via. Se fai scrivere 100K di output al tuo
 script vedrai che l'output avviene in blocchi.

Aggiungo un'altra osservazione: se uccido il processo (con kill e non
kill -9), tutto quello che era nel buffer non viene scritto.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Python e redirezione output

2011-05-18 Per discussione Valerio Pachera
Ho notato un comportamento piuttosto ambiguo di python 2.5 su debian lenny.

Un semplice script con un ciclo infinito e uno sleep di 60 secondi che
stampa la data ed ora attuali.

script.py  /var/log/myscript.log 21

Se provo a visualizzare il contenuto del file tramite cat o less lo vedo vuoto.
Se interrompo lo script tramite ctrl+c, vedo comparire i print delle
deta ed il trace back del ctrl+c.


A dire il vero, non sempre fa così. A volte, il file di log risulta
leggibile (cioè vedo i print delle date) ma, ad un certo punto, le
fate smettono di essere scritte.
Il processo python è ancora attivo.
Sembra proprio che si interrompa la redirezione.
Nota: non c'è logrotate su quel file di log.

Mi sapete dire qualcosa a riguardo?

Un mio amico consiglia di scrivere i file di log damite l'oggetto file di python
f = open('/var/log/myscript.log')

Questa soluzione però non mi entusiasma.

Grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] trova e sostituisci

2010-04-16 Per discussione Valerio Pachera
Avrei bisogno di una cosa tipo

stringa = ' questa stringa  ha tabulazionie più spazi nel mezzo e
/ alla fine   

print stringa.replace('\t', '').strip()

questa concatenazione rimuove tutte le taulazione e tutti gli spazi ad
_inizio_ e _fine_ stringa.
Vorrei essere sicuro di lasciare un solo spazio fra le parole.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] trova e sostituisci

2010-04-16 Per discussione Valerio Pachera
Il 16 aprile 2010 15.19, Daniele Varrazzo p...@develer.com ha scritto:
 Non solo: split() senza argomento collassa i whitespace: whitespace
 consecutivi (tab, spazi, cr, lf...) contano come una sola separazione.

Perfetto!!
Grazie!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] trova e sostituisci

2010-04-15 Per discussione Valerio Pachera
Ciao a tutti, vi posso dire con piacere che la mia piccola
applicazione web sta cominciando a prendere vita.
Ora apro una nuova discussione specifica per i file.
Sto leggendo la documentazione:
http://docs.python.org/library/stdtypes.html#bltin-file-objects
http://diveintopython.org/file_handling/file_objects.html
ma faccio fatica a trovare un modo semplice per fare quello che mi
serve. Mi spiego:

ho un file di configurazione che devo leggere, trovare una specifica
riga, verificare se su questa riga è presente un valore. Se non c'è,
lo devo appendere alla riga.
Partiamo da un esempio:


gruppo disney
...
...
membri pippo,pluto
...
...
---

Andiamo per step:

1) cerchiamo _solo_ la parola chiave 'membri'

f = open(file.txt,r)
for line in f.readlines()
if 'membri' in line: print line
f.close

questo funziona

2) Una volta individuata la riga vorrei rimuoverla e sostituirla con
quella elaborata


f = open(file.txt,w)
for line in f.readlines()
if 'membri' in line:
nuova = line + 'hello world'
#rimuovi line
f.writeline(nuova)
f.close

E' possibile fare qualcosa del genere mentre si scorre il file?
Come consigliare altrimenti di fare?

Successivamente dovrò inoltre poter rimuovere nomi dalla riga 'membri'.

Grazie
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] trova e sostituisci

2010-04-15 Per discussione Valerio Pachera
Il 15 aprile 2010 12.39, Vitto natha...@gmail.com ha scritto:
 Ti consiglio il modulo ConfigParser che fa proprio quello che chiedi a patto
 che il file abbia una determinata struttura.

Vado subito a vedere!
Grazie!

PS:
Avevo già addocchiato la funzione

string.replace(str, old, new[, maxreplace])¶
Return a copy of string str with all occurrences of substring old
replaced by new. If the optional argument maxreplace is given, the
first maxreplace occurrences are replaced.

E anche l'oggetto Template che possono tornare veramente utili.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] trova e sostituisci

2010-04-15 Per discussione Valerio Pachera
Il 15 aprile 2010 12.51, Vitto natha...@gmail.com ha scritto:
 Come ti dicevo richiede una struttura del file particolare per cui se hai
 dei file di configurazione già in essere che non puoi modificare allora
 direi che lo string.replace fa al caso tuo.

Ho trovato anch'io un buon esempio
(http://effbot.org/librarybook/configparser.htm) ma, come hai
giustamente scritto, il mio file di configurazione ha una sintassi
diversa :(
Ad ogni modo posso prendere spunto da questo modulo e creare una
classe che fa al caso mio (tempo permettendo).
Il mio problema al momento consiste nel scrivere linee di testo in un
file già esistente.
Altrimenti devo caricare l'intero file in una variabile e cercare di
cavarmela con replace ma non mi sembra molto adeguato.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] piccola applicazione web

2010-04-10 Per discussione Valerio Pachera
Il 01 aprile 2010 19.15, Pietro Battiston too...@email.it ha scritto:
 Un esempio funzionante:

 http://mail.python.org/pipermail/tutor/2003-August/024857.html

Questo sembra essere quello che più si addice al caso mio.
Ho provato l'esempio postato e funziona a dovere.
Tutto quello che ho dovuto fare su debian lenny è stato:

1-installare apache
2-posizionare lo scirpt in /usr/lib/cgi-bin/test.py
3-creare un form con action=cgi-bin/test.py
  (lo riporto in fondo a questa mail nel caso passa interessare a qualcuno)

Ora volevo fare delle prove. Visto che lo script restituisce codice
html ho provato a fare in modo che lo script restituisca solo una
pagina html minimale.
Quindi ancora più semplice dell'esempio. Non capisco perché, ma
ottengo errore 500 The server encountered an internal error or
misconfiguration and was unable to complete your request. ...

Questo è il codice di test.py
-
import cgi, sys, string, cgitb
cgitb.enable()

#form = cgi.FieldStorage(  )

html = 
html
head titleProve Python/title /head

body
h1greetings/h1
hello world
/body

/html


print html
---

poi punto il browser su
http://localhost/cgi-bin/test.py
e ottengo l'errore citato in precedenza.

Da notare inoltre che ho importato e attivato cgibt  per ottenere
degli errori più utili al debug ma non sembra funzionare
http://docs.python.org/library/cgi.html

nota: sto usando python 2.5.




FORM PER L'ESEMPIO DEL LINK
hrml
head
/head
body
form method=post name=test action=cgi-bin/test.py
input type=text name=name /
input type=text name=shoesize /
input type=text name=job /
input type=text name=language /

input type=text name=comment /
input type=submit name=submit value=invia/
/form
/body
/html
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] piccola applicazione web

2010-04-10 Per discussione Valerio Pachera
Il 10 aprile 2010 18.19, Pietro Battiston too...@email.it ha scritto:

 Nota il
  print Content-type: text/html
 all'inizio del mio script...

M...questo non mi è chiarissmi. Chi legge / achi serve
Content-type: text/html ?
Subito pensavo fosse parte del codice html della pagina (che andasse a
prendere il posto di doctype e tutta la pappardella).
Ora noto pero che leggendo l'html della pagina generata dal tuo
script, non è presente Content-type: text/html.

Se lo commento e provo a ricaricare la pagina, mi vhiene chiesto di
scaricare test.py (quindi non lo esegue).

Beh, ho provato a ri-aggiungerlo al mio codice...ma ottengo lo stesso errore

-
import cgi, sys, string, cgitb
cgitb.enable()


print Content-type: text/html
print

form = cgi.FieldStorage(  )

html = 
html
head titleProve Python/title /head

body
h1greetings/h1
hello world
/body

/html


print html
-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] piccola applicazione web

2010-04-01 Per discussione Valerio Pachera
Ciao a tutti, ho bisogno di creare una pagina web contenente un form.
I valori inseriti nel form devono essere passati ad un script python
che va a scrivere su dei file.
Ho bisogno inoltre di popolare il form leggendo (tramite script
python) gli stessi file su cui devo andare a scrive.
Questo per permettere all'utente di non riscrivere ogni volta i valori
inseriti in precedenza nel form e scritti su file.

La mia esperienza in python è piuttosto ridotta. Conosco discretamente
html e css.
Stavo valutando l'uso di un framework ma mi sembra una soluzione
alquanto sovradimensionata.

Grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] eseguire un blocco di codice ogni tot tempo

2009-10-14 Per discussione Valerio Pachera
Ciao a tutti, è da molto che molto che non prendo in mano python e non
l'ho mai studiato in modo approfondito. Sono proprio a livello newbie.

Avrei la necessità di eseguire un blocco di docie ad esepio ogni 3 ore

Pensavo a qualcosa tipo

while true:
  statments
  sleep 3*60*60

solo che sleep non c'è in python

oppure ad un funziona che richiama un'altra funzione ad in tervalli

schedule ( myfunction (), secondi)

Grazie
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Ricavare data da file e arrotondarla

2009-10-14 Per discussione Valerio Pachera
Il 14 ottobre 2009 13.21, Andrea Gasparini ga...@yattaweb.it ha scritto:
 no, ti prego, perchè fare dei parsing strani se puoi convertirlo in float,
 o in int ??
 ( ti hanno gia' risposto come fare )

Ops, mi era sfuggito il tuo messaggio.
Siccome devo fare delle differenze tra date, ho pensato che il
timestamo fosse il formato più comodo da usare per fale scopo.
Il mio script semplicemente ogni volta che viene richiamato legge una
data salvata in un file in formato timestamp;
fa la differenza fra la data attuale ed il valore recuperato;
lo confronta con un valore da me scelto (es: 3giorni 3*24*3600).
La funzione float mi permette di evitare quel giro poco elegante - str
(time.time() ).rsplit(.)[0] - che poi devo riconvertire in int.


Ritornerò più avanti sui moduli specifici datetime.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Domande varie

2008-10-20 Per discussione Valerio Pachera
Ciao ragazzi, sto leggendo del codice di alcuni programmi e vi sono
delle cose che non mi sono chiare.

def __init__(self, **kw):
  super(Document, self).__init__(**kw)

Correggetemi se sbaglio:
Qua viene definito il costruttore che richiama il costruttore della
classe genitore per estenderlo.

Cosa sono gli asterischi
kv ha un significato particolare?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] aituo per programmino: creazione password ed md5sum

2008-09-19 Per discussione Valerio Pachera
Ciao a tutti, è un po' che non metto mano a python e sono comunque un novellino.
Ho una necessità pratica da usare come esercizio per imparare qualcosa
di più di python:

volgio fare un piccolo script per generare delle password ed il relativo md5.
Come input deve prendere i paramteri numero di password da creare,
il nome del file dove salvarle ed il separatore usato per separare
le password e l'md5 nel file che verrà scritto.

Ho creato lo script ma NON SO COME SCRIVERE SU UN FILE IL RISULTATO.
ecco lo script:

--
# coding=utf-8
import md5
import random

def genpasswd (lenght=8):
passwd=
for num in random.sample(range(0,10), lenght):
passwd += str(num)
return passwd

def genlist (records, separator):
c = 0
passwd = 
md5sum = 
record = []
passwd_list = []
while c  records:
new_passwd = genpasswd()
new_md5 = md5.new (new_passwd).hexdigest() + separator
new_passwd += separator
record = [new_passwd, new_md5]
passwd_list.append (record)
c += 1
return passwd_list

def genfile (filename, records=1, separator=';'):
passwd_list = genlist(records, separator)
print devo scrivere i seguenti record sul file , filename
for record in passwd_list:
#scrivi i record su un file di testo
print record


genfile (prova, 4)


Mi potete cortesemente aiutare a completare questo script?
Aggiungete naturalmente i vostri suggerimenti per migliorarlo.



Googlando ho trovato qualche spunto

def dsvgen(filename,separator=':'):
generates a list of values for each line in a dsv file

 for row in dsvgen('myfilename'): print row

print script executed
inpfile=open(filename)
for line in inpfile:
yield line.strip().split(separator)
inpfile.close()


Qua ho trovato dei metodi che hanno a che fare con la scrittura dei file
http://docs.python.it/html/lib/bltin-file-objects.html
ma non spiega quando usarli. Immagino ad esempio che vadano usato dopo
aver aperto il file come sopra...ma non l'ho ancora letto da nessuna
parte.

Questo è il modulo per il calcolo dell'md5sum usato nello script
http://www.python.org/doc/current/lib/module-md5.html
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python