Re: [Python] Come estrapolare gli attributi da un file xml.

2015-01-26 Per discussione enrico franchi
2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de:


 La funzione è richiamata dal parser stesso e quindi non puoi utilizzare
 il valore returnato. Usare delle variabili globali non è vietato ma puoi
 utilizzare altre soluzioni, per esempio i metodi di una funzione.
 Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno
 stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero.



Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato delle
funzioni.
Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate
all'oggetto quando si potrebbe semplicemente
passare un oggetto vero e proprio con il suo stato e nessun obrobrio?

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


Re: [Python] Come estrapolare gli attributi da un file xml.

2015-01-26 Per discussione Marco Giusti
On Mon, Jan 26 2015, enrico franchi wrote:
 2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de:
 
 
  La funzione è richiamata dal parser stesso e quindi non puoi utilizzare
  il valore returnato. Usare delle variabili globali non è vietato ma puoi
  utilizzare altre soluzioni, per esempio i metodi di una funzione.
  Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno
  stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero.
 
 
 
 Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato delle
 funzioni.
 Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate
 all'oggetto quando si potrebbe semplicemente
 passare un oggetto vero e proprio con il suo stato e nessun obrobrio?

Non colgo il significato. Comunque l'esempio voleva solo imitare le api
di expat e fornirgli un'idea generale della soluzione, non mi sembra che
expat fornisca un modo alternativo per gestire gli eventi.

Certo si può rendere l'api di expat molto più elegante di quanto non lo
è ora, ma non conosco le esigenze di Gollum. Per esempio a me piace
molto la programmazione per interfacce ma mi sembra un po' esagerato
tutto questo per uno scriptino.

m.
from __future__ import print_function
import zope.interface
import xml.parsers.expat


class IHandler(zope.interface.Interface):

def XmlDeclHandler(version, encoding, standalone):
pass

def StartDoctypeDeclHandler(doctypeName, systemId, publicId,
has_internal_subset):
pass

# ...

def StartElementHandler(name, attributes):
pass

def EndElementHandler(name):
pass

def CharacterDataHandler(data):
pass


def parse(data, ihandler, isfinal=False):
parser = xml.parsers.expat.ParserCreate()
default = lambda *arguments: None
for name in IHandler:
setattr(parser, name, getattr(ihandler, name, default))
parser.Parse(data, isfinal)


class MyHandler:

def StartElementHandler(self, name, attrs):
print(Start element:, name, attrs)

def EndElementHandler(self, name):
print(End element:, name)

def CharacterDataHandler(self, data):
print(Character data:, repr(data))


data = ?xml version=1.0?
parent id=topchild1 name=paulText goes here/child1
child2 name=fredMore text/child2
/parent
parse(data, MyHandler())
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).

2015-01-26 Per discussione Alessandro

Il 01/25/2015 03:01 PM, Carlo Miron ha scritto:
 Con Gesù Cristo e gli evangelisti ha funzionato ma parliamo di un 
software


 di più di 2000 anni fa :D

vaporware, direi. non mi risulta sia mai stato rilasciato ;)



Stai guardando il branch sbagliato :-D

Alessandro

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


Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).

2015-01-26 Per discussione Giovanni Porcari

 Il giorno 26/gen/2015, alle ore 09:50, Alessandro dedalus2...@gmail.com ha 
 scritto:
 
 Il 01/25/2015 10:46 AM, Giovanni Porcari ha scritto:
 Inoltre alle persone che mi hanno contattato in privato, oltre a dare 
 consigli
 su installazione e modo di procedere, ho dato i nostri contatto skype e la 
 disponibilità
 a rispondere in immediato ai vari dubbi che potessero avere.
 ...
  io ne aiuto direttamente alcuni e poi loro potranno auspicabilmente
 scrivere quello che hanno capito e formare una documentazione cooperativa
 e aggiornata.
 
 Una volta che avrò imparato a utilizzare Genropy (*) mi porrò il problema di 
 come rendere il favore e pubblicare un po' di documentazione.
 E in quel momento avrò un altro problema: dove? Inoltre la mia conoscenza 
 sarà comunque parziale: potrò documentare meglio solo ciò che avrò usato.
 
 In pratica avrò due strade:
 - scrivere qualcosa sul mio blog, tipo Starting with Genropy in few steps  
 (già, ancora non ho un blog. Ma c'e' tempo..)
 - aggiungere un tassello ad una documentazione già esistente
 

Come ho già detto il problema della documentazione è il fatto che DEVE essere 
perfetta.
Una cattiva documentazione è come una segnaletica stradale sbagliata: ti 
segnala curva pericolosa
a destra è invece ti trovi un dosso con curva a gomito a sinistra.
Noi abbiamo avuto con noi (e regolarmente retribuito) una persona incaricata di 
scrivere
la documentazione (ovviamente tempestandoci di domande e lavorando gomito a 
gomito).
Purtroppo dopo circa 1 anno la persona in questione ha scoperto la sua vocazione
per l'insegnamento e ci ha abbandonato. C'era poi, come ho detto prima il 
nostro amico
Jeff Edwards che si occupava della documentazione e della traduzione  in inglese
ma dopo la sua scomparsa (che ci ha anche molto colpito e rattristato), non 
siamo riusciti
a trovare chi potesse raccogliere il lavoro.

Ovviamente chiunque desiderasse partecipare al progetto di genropy è 
graditissimo
e riceverebbe da noi tutto l'appoggio, l'aiuto e le spiegazioni necessarie
a minimizzare la sua fatica e ad avere i migliori risultati.


 Questa seconda strada ci aiuterebbe, e infatti vedo che hanno già consigliato 
 un servizio tipo https://readthedocs.org/; . Mai utilizzato, ma il concetto 
 che volevo esprimere è quello.
 
 Alessandro
 
 (*) E' da tempo che ho scaricato Genropy, ma l'unico file che ho letto in 
 questi anni -sigh!- era privo di docstring e commenti, e per questo al Pycon5 
 vi chiesi cortesemente di aggiungere un qualsiasi tipo di documentazione (eh, 
 vedo che è un argomento nuovo per voi). Mi sono successivamente reso conto di 
 aver letto l'unico file senza commenti.. chiedo venia :-)
 
 

Beh non avremo i migliori commenti del mondo ma un file senza commenti per 
fortuna
è abbastanza una rarità (oppure è autodocumentante)


Ciao 

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


Re: [Python] Come estrapolare gli attributi da un file xml.

2015-01-26 Per discussione Marco Giusti
On Mon, Jan 26 2015, Gollum1 wrote:
 Il 26 gennaio 2015 08:08, Gollum1 gollum1.smeag...@gmail.com ha scritto:
  Giorno Lista,
 
  oggi sono arrivato presto al lavoro, e visto che nessuno rompe, ho
  ripreso in mano il mio programmino fermo da parecchio...
 
  attraverso il modulo requests riesco ad ottenere una stringa
  contenente l'XML con tutti i parametri dell'utente loggato alla pagina
  chiamata da requests.
 
  sto usando xml.parsers.expat per analizzarla, e vorrei fare in modo
  che gli attributi che trovo per i vari tag xml vengano restituiti come
  dizionario {nome_tag: attributo_uri}
 
  ho usato questo codice di esempio:
  https://docs.python.org/3.4/library/pyexpat.html#example
 
  e fino a che nelle prove stampo i tag e gli attributi, tutto va bene,
  ma come faccio a fare il return di una voce di dizionario?
 
  pensavo di mettere:
 
  def start_element(name, attrs):
   if 'uri' in attrs.keys():
  return{name: attrs['uri']}
 
  ma chi è il chiamante effettivo, visto che in realtà è come se io
  avessi inettato la mia funzione all'interna della classe del parser?
 
  Byez
  --
  Gollum1 - http://www.gollumone.it
  Tesoro, dov'é il mio teoro...
 
 
 naturalmente se uso una variabile esternda al def, la cosa funziona,
 
 urls = dict()
 
 def start_element(name, attrs):
 if 'uri' in attrs.keys():
 urls[name] = attrs['uri']
 
 
 personalmente però ho sempre cercato di evitare di usare delle
 variabili globali all'interno di definizioni di funzioni...
 
 se lo faccio solitamente è perché sono comunque all'interno di una
 classe, ma in questo caso non ho necessità di refernziare una nuova
 classe solo per l'analisi di questo file xml, una volta ottenuto
 questi uri non me ne faccio più nulla.
 
 mi sto facendo troppe pippe per nulla?

La funzione è richiamata dal parser stesso e quindi non puoi utilizzare
il valore returnato. Usare delle variabili globali non è vietato ma puoi
utilizzare altre soluzioni, per esempio i metodi di una funzione.
Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno
stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero.

m.

from __future__ import print_function


class Parser(object):

def parse(self, obj):
if isinstance(obj, list):
self._parse_list(obj)
elif isinstance(obj, dict):
self._parse_dict(obj)
else:
self.parse_obj(obj)

def _parse_list(self, obj):
self.start_list()
for el in obj:
self.start_list_el()
self.parse(el)
self.end_list_el()
self.end_list()

def _parse_dict(self, obj):
self.start_dict()
for k, v in obj.iteritems():
self.start_dict_key()
self.parse(k)
self.end_dict_key()
self.start_dict_val()
self.parse(v)
self.end_dict_val()
self.end_dict()

parse_obj = lambda self, obj: None
start_dict_key = end_dict_key = start_list = end_list = \
start_list_el = end_list_el = start_dict_val = end_dict_val = \
lambda self: None


class Handler(object):

def __init__(self):
self._list_first = True
self._dict_first = True

def start_dict_val(self):
if self._dict_first:
self._dict_first = False
else:
print(, , end=)

def start_list_el(self):
if self._list_first:
self._list_first = False
else:
print(, , end=)

def end_dict_key(self):
print(: , end=)

def start_list(self):
print([, end=)

def end_list(self):
self._list_first = True
print(], end=)

def start_dict(self):
print({, end=)

def end_dict(self):
self._dict_first = True
print(}, end=)

def parse_obj(self, obj):
print(repr(obj), end=)


if __name__ == __main__:
parser = Parser()
handler = Handler()
parser.start_list = handler.start_list
parser.end_list = handler.end_list
parser.start_dict = handler.start_dict
parser.end_dict = handler.end_dict
parser.parse_obj = handler.parse_obj
parser.start_dict_val = handler.start_dict_val
parser.end_dict_key = handler.end_dict_key
parser.start_list_el = handler.start_list_el
parser.parse([{hello: world}])
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).

2015-01-26 Per discussione Walter Valenti


 
 Con Gesù Cristo e gli evangelisti ha funzionato ma parliamo di un software
 di più di 2000 anni fa :D
 
 

E' un falso storico, non vale come esempio.

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


Re: [Python] Come estrapolare gli attributi da un file xml.

2015-01-26 Per discussione Gollum1
Il 26 gennaio 2015 08:08, Gollum1 gollum1.smeag...@gmail.com ha scritto:
 Giorno Lista,

 oggi sono arrivato presto al lavoro, e visto che nessuno rompe, ho
 ripreso in mano il mio programmino fermo da parecchio...

 attraverso il modulo requests riesco ad ottenere una stringa
 contenente l'XML con tutti i parametri dell'utente loggato alla pagina
 chiamata da requests.

 sto usando xml.parsers.expat per analizzarla, e vorrei fare in modo
 che gli attributi che trovo per i vari tag xml vengano restituiti come
 dizionario {nome_tag: attributo_uri}

 ho usato questo codice di esempio:
 https://docs.python.org/3.4/library/pyexpat.html#example

 e fino a che nelle prove stampo i tag e gli attributi, tutto va bene,
 ma come faccio a fare il return di una voce di dizionario?

 pensavo di mettere:

 def start_element(name, attrs):
  if 'uri' in attrs.keys():
 return{name: attrs['uri']}

 ma chi è il chiamante effettivo, visto che in realtà è come se io
 avessi inettato la mia funzione all'interna della classe del parser?

 Byez
 --
 Gollum1 - http://www.gollumone.it
 Tesoro, dov'é il mio teoro...


naturalmente se uso una variabile esternda al def, la cosa funziona,

urls = dict()

def start_element(name, attrs):
if 'uri' in attrs.keys():
urls[name] = attrs['uri']


personalmente però ho sempre cercato di evitare di usare delle
variabili globali all'interno di definizioni di funzioni...

se lo faccio solitamente è perché sono comunque all'interno di una
classe, ma in questo caso non ho necessità di refernziare una nuova
classe solo per l'analisi di questo file xml, una volta ottenuto
questi uri non me ne faccio più nulla.

mi sto facendo troppe pippe per nulla?

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Come estrapolare gli attributi da un file xml.

2015-01-26 Per discussione enrico franchi
2015-01-26 19:06 GMT+00:00 Marco Giusti marco.giu...@posteo.de:

 On Mon, Jan 26 2015, enrico franchi wrote:
  2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de:
 
  
   La funzione è richiamata dal parser stesso e quindi non puoi utilizzare
   il valore returnato. Usare delle variabili globali non è vietato ma
 puoi
   utilizzare altre soluzioni, per esempio i metodi di una funzione.
   Infatti questi sono già legati all'oggetto stesso e quindi hanno già
 uno
   stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero.
  
  Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato
 delle
  funzioni.
  Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate
  all'oggetto quando si potrebbe semplicemente
  passare un oggetto vero e proprio con il suo stato e nessun obrobrio?

 Non colgo il significato. Comunque l'esempio voleva solo imitare le api
 di expat e fornirgli un'idea generale della soluzione, non mi sembra che
 expat fornisca un modo alternativo per gestire gli eventi.


Semplice, hai scritto una cosa nel messaggio e ne hai fatta un'altra
nell'esempio.

In particolare, l'esempio e' grosso modo come avrei affrontato questo
specifico problema, viceversa, nel messaggio suggerisci di usare *metodi di
una funzione*. Il che fa pensare a volere, appunto, appiccicare dei metodi
ad una funzione. Cosa che ovviamente in Python puoi fare, sebbene non sia
in generale una buona idea e non lo sia in questo specifico caso. Da cui il
mio messaggio.

Immagino con il senno di poi che tu intendessi invece di usare metodi di un
oggetto, come appunto hai fatto nell'esempio. Ma le due informazioni
contrastanti non erano facili per me da conciliare.




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