Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Marco De Paoli
Il giorno 08 novembre 2013 20:08, Valerio Maggio
ha scritto:

>
> On 08 Nov 2013, at 19:39, Manlio Perillo  wrote:
>
> > Ecco una possibile reimplementazione in Python:
> > http://pastebin.com/Nan5a1xG
> >
>

però!

Notevole!  Grazie mille per averla condiviso. :-)
> Molto istruttiva!
>

+1

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Valerio Maggio 

>
> Mi pare di capire che questa soluzione, oltre ad emulare il modello di
> esecuzione di JUnit 4.x per i metodi @before/@after, la migliora
> aggiungendo un (semplice) criterio (i.e., LIFO) per l'esecuzione dei
> diversi metodi.
> Al contrario di quanto fatto da JUnit, in cui l'ordine di esecuzione dei
> metodi di una (super)classe lungo la gerarchia con una stessa annotazione è
> casuale (?!) e dipendente dalla singola esecuzione.
>
>
In realta' essere indipendenti dall'ordine di esecuzione dei diversi metodi
di setup (o di test) e' una cosa positiva, non negativa, ma sono sicuro che
molti dissentono su questo aspetto. :)

Ciao,
Giuliano



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Manlio Perillo 

> On 08/11/2013 17:00, Piergiuliano Bossi wrote:
>
>> 2013/11/8 Manlio Perillo > >
>>
>>
>>
>>
>> Allora no, che io sappia nose ed PyUnit non si comportano come le
>> nuove versioni di JUnit.
>>
>>
>> Capito.
>>
>> Puoi postare un esempio di come si fa in JUnit?
>>
>>
>> Ecco qua.
>>
>>  SuperTest.java 
>>
>
> Ecco una possibile reimplementazione in Python:
> http://pastebin.com/Nan5a1xG
>
>
> Non garantisco nulla su quel codice, però...
> Ho almeno cercato di implementarlo nel modo più semplice possibile.


Grazie mille, me lo studio e poi rispondo.

Ciao,
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Manlio Perillo

On 08/11/2013 20:08, Valerio Maggio wrote:


On 08 Nov 2013, at 19:39, Manlio Perillo  wrote:


Ecco una possibile reimplementazione in Python:
http://pastebin.com/Nan5a1xG



Notevole!  Grazie mille per averla condiviso. :-)


Prego.


Molto istruttiva!



Non ne sono sicuro :)


Mi pare di capire che questa soluzione,


> [...]

Non ne ho idea, perchè non conosco JUnit.

Ho implementato il codice seguendo l'esempio dell'OP.
Tra l'altro non sono sicuro l'ordine sia corretto per i metodi After, 
dato che non erano presenti nell'esempio.



Ciao  Manlio

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Valerio Maggio

On 08 Nov 2013, at 19:39, Manlio Perillo  wrote:

> Ecco una possibile reimplementazione in Python:
> http://pastebin.com/Nan5a1xG
> 

Notevole!  Grazie mille per averla condiviso. :-)
Molto istruttiva!

Mi pare di capire che questa soluzione, oltre ad emulare il modello di 
esecuzione di JUnit 4.x per i metodi @before/@after, la migliora aggiungendo un 
(semplice) criterio (i.e., LIFO) per l'esecuzione dei diversi metodi.
Al contrario di quanto fatto da JUnit, in cui l'ordine di esecuzione dei metodi 
di una (super)classe lungo la gerarchia con una stessa annotazione è casuale 
(?!) e dipendente dalla singola esecuzione.


--
valerio


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Manlio Perillo

On 08/11/2013 17:00, Piergiuliano Bossi wrote:

2013/11/8 Manlio Perillo mailto:manlio.peri...@gmail.com>>



Allora no, che io sappia nose ed PyUnit non si comportano come le
nuove versioni di JUnit.


Capito.

Puoi postare un esempio di come si fa in JUnit?


Ecco qua.

 SuperTest.java 


Ecco una possibile reimplementazione in Python:
http://pastebin.com/Nan5a1xG


Non garantisco nulla su quel codice, però...
Ho almeno cercato di implementarlo nel modo più semplice possibile.

> [...]


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Simone Federici 

> Wot?!?
>>
>
> non ho capito cosa intendi?
>

L'idea che un metodo di setup basti e avanzi e' quantomeno discutibile.
Quando ti trovi ad organizzare parecchie migliaia di tests ti assicuro che
puo' essere molto utile. Pero' stiamo andando OT, per cui mi fermo e mi
astengo dal commentare sullo specifico di JUnit (che suppongo non interessi
nulla ai presenti al di la' dalla mia spiegazione del comportamento che
vado cercando).


> No, sto migrando da unittest a nose.
>>
>
> a ecco
> quindi non ti basterebe un semplice metodo "adapter" ossia scrivere nella
> superclasse il metodo "setup" di "nose" e chiamare quello che usavi prima
> (di unittest)?
>

Se ho capito bene no, perche' il team vuole setup quelli di nose e non
lasciare setUp nelle classi convertite (superclassi incluse).


> Non e' che in XP sei hai un buon framework (eg: JUnit) ti sconsigliano di
>> usarlo, neh?!? :)
>>
>
> no ma di integrare e aggiungere non smettono di consigliartelo :-D
>

Ah certo.

Ciao,
Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione enrico franchi
2013/11/8 Simone Federici 

>
> https://gist.github.com/rik0/7367887
>
>
> Stupenda!
>

TY.


> Non la utilizzerei mai :-)
>

Nemmeno io. E' come pulirsi il culo con l'object model di Python… ;)


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici
>
> Wot?!?
>

non ho capito cosa intendi?


>  mmm, vuoi uniformare 2 test suite tra nose e unittest, non sarà meglio
>> crearne 2 separate?
>>
>
> No, sto migrando da unittest a nose.
>

a ecco
quindi non ti basterebe un semplice metodo "adapter" ossia scrivere nella
superclasse il metodo "setup" di "nose" e chiamare quello che usavi prima
(di unittest)?

Non e' che in XP sei hai un buon framework (eg: JUnit) ti sconsigliano di
> usarlo, neh?!? :)
>

no ma di integrare e aggiungere non smettono di consigliartelo :-D


> Ci sono mille motivi, ma quello principale e' avere le cose giuste al
> posto giusto ed evitare di ripetersi. Dal mio punto di vista dover
> richiamare setup della superclasse perche' lo posso chiamare in un modo
> solo e' una ripetizione (quantomeno venendo da JUnit, dove quel problema e'
> stato risolto con la versione 4 suppergiu' 6 anni fa, se non ricordo male).
>

io junit lo conosco bene e odio i metodi doppi, odio l'ordine mai azzeccato
di una esecuzione, che dipende pure dalla jvm e dal sistema operativo,
insomma una mess.
Tra parentesi (è meglio testng su java).

Veramente l'uso multiplo di un setup e di un tear down senza ordine
dovremmo tutti considerarlo un antipattern. (anche in java in una suite mai
usarne 2 diventi matto)

Che poi l'uso del decoratore (ops annotation..) su java faccia si che puoi
scegliere il nome del metodo setup() setuppaLaMaiClasse,
faipartirePincopallo() etc... sarò carino ma utilità meno che zero. Anzi
viola il buon principio default over configuration.

La vera svolta di Junit4 non c'è stata, non ha aggiunto veramente niente a
junit3, solo una nuova sintassi incompatibile con la precedente.

insomma non me ne volere, m scrivo in java tutto il giorno, test a manetta
e non faccio altro che uniformare codice che va da tutte le parti e di
certo @Before su junit non aiuta

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


Re: [Python] Comunque

2013-11-08 Per discussione Carlos Catucci
2013/11/8 Marco Beri 

> Cara Lista,
> grazie di esistere :-)
>

+2


-- 
"Somos los que amasan, sin embargo no tenemos pan,
somos los que cavan el carbón, sin embargo tenemos frío
somos los que no tienen nada, y estamos viniendo a tomar el mundo."
Tassos Livaditis (Poeta greco, 1922, 1988)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Manlio Perillo 

>
>
> Allora no, che io sappia nose ed PyUnit non si comportano come le nuove
> versioni di JUnit.
>
>
Capito.


> Puoi postare un esempio di come si fa in JUnit?
>

Ecco qua.

 SuperTest.java 
import org.junit.Before;
import org.junit.Test;

public abstract class SuperTest {
   @Before public void init() throws Exception {
  System.out.println("I'm a Super init");
   }
   @Before public void anotherInit() throws Exception {
  System.out.println("I'm another Super init");
   }

   @Test public void just_a_test() throws Exception {
  System.out.println("Just a test in the superclass");
   }
   @Test public void yet_another_test() throws Exception {
  System.out.println("Yet another test in the superclass");
   }
}



 Subest.java 
import org.junit.Before;
import org.junit.Test;

public class SubTest extends SuperTest {
   @Before public void subInit() throws Exception {
  System.out.println("I'm a Sub init");
   }
   @Before public void anotherSubInit() throws Exception {
  System.out.println("I'm another Sub init");
   }

   @Test public void more_testing() throws Exception {
  System.out.println("more testing in the subclass");
   }
   @Test public void little_more_testing() throws Exception {
  System.out.println("little more testing in the subclass");
   }
}



 stdout dell'esecuzione 
I'm another Super init
I'm a Super init
I'm another Sub init
I'm a Sub init
more testing in the subclass
I'm another Super init
I'm a Super init
I'm another Sub init
I'm a Sub init
little more testing in the subclass
I'm another Super init
I'm a Super init
I'm another Sub init
I'm a Sub init
Just a test in the superclass
I'm another Super init
I'm a Super init
I'm another Sub init
I'm a Sub init
Yet another test in the superclass


Notare che:

   - Non sei costretto ad avere una superclasse astratta, e' solo comune
   fare cosi' (non mi dilungo a spiegare perche', non sarebbe OT)
   - L'ordine di esecuzione dei @Before di una classe e' indeterminato, ma
   l'ordine tra classi e' determinato
   - Le teardown si comportano alla stessa maniera al contrario (cioe'
   prima le sottoclassi e poi le superclassi, l'annotazione per loro e'
   ovviamente @After)


Ciao
Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Nicola Larosa 

> Piergiuliano Bossi wrote:
> > conosco unittest e nose, che mi sembra sia ancora basato su unittest,
> > se ce ne sono altri più interessanti sarei curioso di saperne di più
>
> pytest è interessante. Non so se ha supporto a ciò che chiedi, qui non lo
> vedo: '
>
>
Guardero', grazie.


> Anche per me, anche per i test esplicito è meglio che implicito, e piatto
> è meglio che annidato, quindi gerarchie poco profonde, chiamate a manella
> e andare.
>

Capito.

Ciao,
Giuliano



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Simone Federici 

> Si', quindi la mia domanda e': nose prevede queste cose o no? Qualcuno di
>> voi si e' mai posto il problema? (mi sembra di no)
>
>
> il problema qui ce lo siamo posto, ma un metodo di setup basta e avanza.
>

Wot?!?


> mmm, vuoi uniformare 2 test suite tra nose e unittest, non sarà meglio
> crearne 2 separate?
>

No, sto migrando da unittest a nose.


> Regola XP: creati da solo i tuoi framework.
>
>
Non e' che in XP sei hai un buon framework (eg: JUnit) ti sconsigliano di
usarlo, neh?!? :)


> i miei test sono pieni di decoratori, che monkeypatchano/mockano le
> connessioni a sistemi terzi per far girare gli unit test. E poi rimettono
> tutto in ordine.
>

Capito.


> ma non è meglio che ogni metodo sia completo dalla a alla z? perche
> delegare roba al setup del modulo?
>

Ci sono mille motivi, ma quello principale e' avere le cose giuste al posto
giusto ed evitare di ripetersi. Dal mio punto di vista dover richiamare
setup della superclasse perche' lo posso chiamare in un modo solo e' una
ripetizione (quantomeno venendo da JUnit, dove quel problema e' stato
risolto con la versione 4 suppergiu' 6 anni fa, se non ricordo male).

Ciao,
Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Nicola Larosa
Piergiuliano Bossi wrote:
> conosco unittest e nose, che mi sembra sia ancora basato su unittest,
> se ce ne sono altri più interessanti sarei curioso di saperne di più

pytest è interessante. Non so se ha supporto a ciò che chiedi, qui non lo
vedo: '

Anche per me, anche per i test esplicito è meglio che implicito, e piatto
è meglio che annidato, quindi gerarchie poco profonde, chiamate a manella
e andare.

-- 
Nicola Larosa - http://www.tekNico.net/

The average cremation of a body with [dental mercury] amalgam emits
as much mercury as is contained in 156 compact fluorescent lamps.
 - http://en.wikipedia.org/wiki/Dental_amalgam_controversy#Cremation
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Manlio Perillo

On 08/11/2013 15:48, Piergiuliano Bossi wrote:

2013/11/8 Manlio Perillo mailto:manlio.peri...@gmail.com>>

On 08/11/2013 04:12, Piergiuliano Bossi wrote:

Mi sembra di capire che in Python sia con unittest che con nose
non ci
sia un modo builtin per far si' che, in una gerarchia di test,
la setup
della superclasse venga invocata automaticamente eseguendo un
test della
sottoclasse.


Se ci fosse un linguaggio che implementa il paradigma ad oggetti che
si comporta in questo modo, sarebbe sicuramente una strana eccezione.


No, non e' quello che sto chiedendo, vedi i miei altri messaggi.



Ok.

Allora no, che io sappia nose ed PyUnit non si comportano come le nuove 
versioni di JUnit.


Puoi postare un esempio di come si fa in JUnit?

> [...]


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Daniele Varrazzo 

> On 2013-11-08 03:12, Piergiuliano Bossi wrote:
>
>> Mi sembra di capire che in Python sia con unittest che con nose non ci sia
>> un modo builtin per far si' che, in una gerarchia di test, la setup della
>> superclasse venga invocata automaticamente eseguendo un test della
>> sottoclasse. Quello che vedo e' che di solito il primo step della setup
>> della sottoclasse e' invocare la setup della superclasse (yak!).
>>
>> Prima domanda: confermate?
>>
>
> Se non ti torna questo non hai capito come funziona l'ereditarietà in
> Python.


Eddai... :)


> Cioè non ti va di fare?
>

Esatto.


>
>
> class BaseTestCase(unittest.TestCase):
> def setUp(self):
> ...
>
> class SubTestCase(BaseTestCase):
> def setUp(self):
> super(SubTestCase, self).setUp()
> ...
>
> boh, se non ti va bene questo non so che linguaggio stai usando.


Vedi i miei altri messaggi: torna adesso? Il punto non e' tanto il
linguaggio, bensi' il supporto che il runner fornisce.

Ciao,
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Pietro Battiston
Il giorno ven, 08/11/2013 alle 13.13 +, Daniele Varrazzo ha scritto:
> On 2013-11-08 12:43, Pietro Battiston wrote:
> 
> > Giusto per curiosità, questo fatto che il parsing degli argomenti di
> > default non avvenga a runtime lo definireste un inconveniente tecnico
> > con cui si può sopravvivere tranquillamente (fare altrimenti
> > richiederebbe, in parole povere, uno scope in più?) o una feature?
> 
> È una feature utile in diversi casi. Simula le variabili statiche del c 
> per esempio: spesso uso un parametro "nascosto" come cache privata.
> 
>  def calcolone(_result=[]):
>  if _result:
>  return _result[0]
>  _result.append()
>  return _result[0]
> 

Uh. Privata davvero! Ma è questo il motivo per cui lo fai (invece che
dichiarare _result come attributo della classe)?! O anche qui (come dici
sotto) c'è un discorso di efficienza?


> o per avere variabili locali:
> 
>  def lookup(arg, _dict={'a': 1, 'b': 2, ...}):
>  return _dict[arg]
> 
>  def parse(str, _rex=re.compile('some regexp'))
>  return _rex.match(str)
> 
> Preferisco le variabili locali perchè 1. sono private e 2. sono più 
> efficienti delle globali.
> 
> Un caso di uso più articolato riguarda le chiusure lessicali e torna 
> comodo quando si usa Python in maniera funzionale. L'ho descritta qui 
> qualche anno fa: 
>  
> (vedi la risposta più upvotata).

Chiaro... grazie!

Pietro

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici
>
> Si', quindi la mia domanda e': nose prevede queste cose o no? Qualcuno di
> voi si e' mai posto il problema? (mi sembra di no)


il problema qui ce lo siamo posto, ma un metodo di setup basta e avanza.
mmm, vuoi uniformare 2 test suite tra nose e unittest, non sarà meglio
crearne 2 separate?

Quello che vorrei, al contrario, e' avere un metodo pippo_setup, decorato
> con vattelapesca in modo che automaticamente nose me lo esegua prima di
> ogni test.


Regola XP: creati da solo i tuoi framework.

i miei test sono pieni di decoratori, che monkeypatchano/mockano le
connessioni a sistemi terzi per far girare gli unit test. E poi rimettono
tutto in ordine.

ma non è meglio che ogni metodo sia completo dalla a alla z? perche
delegare roba al setup del modulo?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
>
>
> https://gist.github.com/rik0/7367887
>
>
Caruccio, incredibilmente malvagio, ma caruccio. In realta' queste cose le
dovrebbe fare il runner (eg: di nose) seguendo un qualche criterio (eg:
tramite decoratori).

Ciao,
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Marco Beri 

> Ti fa schifo così?
>
class Father(object):
> def setUp(self):
> print "Padre"
> self.childrenSetUp()
>
> class Children(Father):
> def childrenSetUp(self):
> print "Figlio"
>
> x = Children()
> x.setUp()
>
>
Abbastanza. :)
Ti do un 7+ per l'impegno pero'. :D

>

> Altrimenti puoi giocare con le metaclassi, ma per questo ti risponderà
> qualcuno più bravo di me :-)
>
>
Mi interessa.

Ciao,
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
Ok, direi che mi sono espresso male e che ho dato adito a parecchi
fraintendimenti. Colpa mia. Per cui mi top-quoto per il sollazzo dei
presenti.
Vediamo se riesco a correggere il tiro globalmente, prima di rispondere a
ogni messaggio:

   - Il contesto e' solo ed esclusivamente unit testing (o meglio i
   framework di python per lo unit testing => conosco unittest e nose, che mi
   sembra sia ancora basato su unittest, se ce ne sono altri piu' interessanti
   sarei curioso di saperne di piu')
   - Quando parlo di setup non intendo un metodo che si chiama
   letteralmente "setup" ma una setup in pratica => so che in unittest si puo'
   chiamare solo setUp, mentre nose accetta sia setUp che setup (altro?)
   - Non sto in nessun modo cercando di implementare un template method
   - Non sono impazzito (non ancora quantomeno) => so che se fai l'override
   di un metodo l'unico modo per invocare lo stesso metodo nella superclasse
   e' fare una chiamata esplicita verso super
   - Quello che vorrei capire e' se in unittest o nose sia possibile
   ottenere cio' che in JUnit si fa con le annotazioni => posso definire 27
   diversi metodi di setup, annotati con @Before, distribuiti lungo la
   gerarchia di test, e il runner da bravo ragazzo me li eseguira' tutti
   seguendo una certa logica senza che io debba esplicitamente richiamarne uno
   dall'altro
   - Notare che JUnit 3.8 era come unittest/nose, mentre con l'introduzione
   delle annotazioni in JUnit 4 la faccenda e' cambiata
   - Intuitivamente penso di poter ottenere lo stesso risultato con dei
   decoratori, ma non mi sembra che nose supporti questo modello (e tantomeno
   unittest), ma magari mi sbaglio e mi e' sfuggito qualcosa


Altre risposte in canna...

Grazie e ciao
Giuliano


2013/11/7 Piergiuliano Bossi 

> Mi sembra di capire che in Python sia con unittest che con nose non ci sia
> un modo builtin per far si' che, in una gerarchia di test, la setup della
> superclasse venga invocata automaticamente eseguendo un test della
> sottoclasse. Quello che vedo e' che di solito il primo step della setup
> della sottoclasse e' invocare la setup della superclasse (yak!).
>
> Prima domanda: confermate?
> Seconda domanda: vi rassegnate o c'e' qualche escamotage?
>
> Ciao,
> Giuliano
>
> --
> Piergiuliano Bossi
> Blog: http://thinkingbox.wordpress.com/
> Twitter: http://twitter.com/thinkingbox (English)
> Twitter: http://twitter.com/scatolapensante (Italiano)
> Google+: https://plus.google.com/u/0/108187981162465525118
>



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Comunque

2013-11-08 Per discussione Simone Federici
2013/11/8 Marco Beri 

> grazie di esistere :-)


qui a Roma verrebbe veloce veloce: ma che hai trombato stamattina?
che ha esattamente 2 sensi.

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


Re: [Python] Comunque

2013-11-08 Per discussione Marco De Paoli
Il giorno 08 novembre 2013 16:05, Marco Beri  ha
scritto:

> Cara Lista,
> grazie di esistere :-)
>

+1 :-)

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


[Python] Comunque

2013-11-08 Per discussione Marco Beri
Cara Lista,
grazie di esistere :-)

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Manlio Perillo 

> On 08/11/2013 04:12, Piergiuliano Bossi wrote:
>
>> Mi sembra di capire che in Python sia con unittest che con nose non ci
>> sia un modo builtin per far si' che, in una gerarchia di test, la setup
>> della superclasse venga invocata automaticamente eseguendo un test della
>> sottoclasse.
>>
>
> Se ci fosse un linguaggio che implementa il paradigma ad oggetti che si
> comporta in questo modo, sarebbe sicuramente una strana eccezione.
>

No, non e' quello che sto chiedendo, vedi i miei altri messaggi.

Ciao,
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Simone Federici 
>
> qualche implementazione fornite dai google friends:
>
> http://snipperize.todayclose.com/snippet/py/Decorator-for-calling-the-super-method-automagically.--24988/
> http://anybox.fr/blog/calling-super-from-a-method-decorator
>
>
Il mio contesto e' piu' ristretto: solo esecuzione di unittest, ma l'idea
c'e'. In realta' vorrei decorare il papa', piu' che il figlio, ma non si
puo' avere tutto... e a dire il vero mi basterebbe decorare allo stesso
modo tutte le setup di tutte le classi nella gerarchia e sapere che il
runner fara' il suo lavoro docilmente.

Comunque grazie.

Ciao,
Giuliano



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Valerio Maggio 

>
> In ogni caso, per dovere di cronaca, aggiungerei che nose, rispetto a
> unittest, è più flessibile sulla faccenda setup: decoratore with_setup o
> tutti i metodi che rispettano il naming patter setup_
> (https://nose.readthedocs.org/en/latest/writing_tests.html#test-classes)
>

Pero' se uso @with_setup e' una gran rottura di palle, perche' devo
esplicitamente decorare ogni test o mi sono perso qualcosa? Quello che
vorrei, al contrario, e' avere un metodo pippo_setup, decorato con
vattelapesca in modo che automaticamente nose me lo esegua prima di ogni
test.

Ciao,
Giuliano



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Simone Federici 

> > Seconda domanda: vi rassegnate o c'e' qualche escamotage?
>
> Nulla ti vieta di scrivere un @decorator per setup che invochi lui il
> super per te
>

Si', quindi la mia domanda e': nose prevede queste cose o no? Qualcuno di
voi si e' mai posto il problema? (mi sembra di no)

Ciao,
Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Valerio Maggio 

>
> A me, sinceramente, un pochino si :D
> Scherzi a parte, credo che in questo caso imho hai "spostato" il problema,
> "specializzando" il setUp della superclasse.
>

Condivido.


> Invece, se non ho capito male, Piergiuliano chiedeva se ci fosse qualche
> altro escamotage per invocare il setUp di una superclasse (Father) durante
> l'esecuzione del test della classe Child.
>

Piu' o meno: aggiungi che il test della classe figlio ha bisogno sia del
setup di papi che del suo setup.


>
> La mia domanda è: durante l'esecuzione del test o durante l'esecuzione del
> setUp della classe Child?
>

"Durante" e' un'espressione pericolosa. In JUnit ad esempio le setup degli
antenati vengono eseguite prima delle setup dei figli, partendo
dall'antenato piu' lontano e scendendo in cascata fino al figlio. Non che
io stia dicendo che e' una buona idea avere gerarchie di test con molti
livelli, neh...


>
> Nel primo caso, se la classe Child non ridefinisce un setUp, naturalmente,
> viene invocato quella della classe Father.
>

Certo.


> Se, invece, lo ridefinisce, non mi vengono in mente soluzioni *senza*
> l'invocazione esplicita di super(Child, self).setUp().
>

Capito.


> Btw, non la vedo una grande limitazione.
>

No, non e' una grande limitazione, fa solo un po' schifo. :)
Ad esempio, se stai convertendo una gerarchia di test da unittest a nose e
vuoi unifromare la convenzione a "setup" anziche' "setUp" devi ricordarti
di cambiare tutte le chiamate nei figli.


> Mmm imho no… nel senso che con la metaclasse agisci a livello di classe e
> non di istanza e il setUp deve essere invocato per *ogni* test dell'istanza
> correntemente in esecuzione.
> Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito
> questo è quello che mi viene in mente.
>
>

Capito, grazie.

Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Piergiuliano Bossi
2013/11/8 Simone Federici 

> > Quello che vedo e' che di solito il primo step della setup della
> sottoclasse e' invocare la setup della superclasse (yak!).
>
> Non ho capito dove è il problema. Se non scrivi la setup della sottoclasse
> che succede?
>

Il punto e' che hai bisogno di entrambe le setup, sia quella della
superclasse che quella della sottoclasse.

Ciao,
Giuliano

-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Daniele Varrazzo

On 2013-11-08 13:13, Daniele Varrazzo wrote:

Oops, mi sono editato via un pezzo, che rende una frase priva di senso:


o per avere variabili locali _inizializzate solo una volta_:

def lookup(arg, _dict={'a': 1, 'b': 2, ...}):


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


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Daniele Varrazzo

On 2013-11-08 12:43, Pietro Battiston wrote:


Giusto per curiosità, questo fatto che il parsing degli argomenti di
default non avvenga a runtime lo definireste un inconveniente tecnico
con cui si può sopravvivere tranquillamente (fare altrimenti
richiederebbe, in parole povere, uno scope in più?) o una feature?


È una feature utile in diversi casi. Simula le variabili statiche del c 
per esempio: spesso uso un parametro "nascosto" come cache privata.


def calcolone(_result=[]):
if _result:
return _result[0]
_result.append()
return _result[0]

o per avere variabili locali:

def lookup(arg, _dict={'a': 1, 'b': 2, ...}):
return _dict[arg]

def parse(str, _rex=re.compile('some regexp'))
return _rex.match(str)

Preferisco le variabili locali perchè 1. sono private e 2. sono più 
efficienti delle globali.


Un caso di uso più articolato riguarda le chiusure lessicali e torna 
comodo quando si usa Python in maniera funzionale. L'ho descritta qui 
qualche anno fa: 
 
(vedi la risposta più upvotata).


-- Daniele

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


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Pietro Battiston
Il giorno ven, 08/11/2013 alle 13.43 +0100, Pietro Battiston ha scritto:
> Il giorno ven, 08/11/2013 alle 11.47 +, Daniele Varrazzo ha scritto:
> > On 2013-11-08 11:41, Pietro Battiston wrote:
> > > Salve a tutti,
> > >
> > > ho scritto un generatore con poche righe di codice. Credo che il
> > > contenuto sia inessenziale per la mia domanda, comunque lo trovate in
> > > coda a questa email.
> > 
> > Non credo lo sia:
> > 
> >  In [1]: def ciao(list=[]):
> > ...: return list
> > ...:
> > 
> >  In [2]: l = ciao()
> > 
> >  In [3]: l.append('wtf')
> > 
> >  In [4]: print ciao()
> > 
> > 
> > secondo te cosa stampa il punto 4?
> 
> 
> N... confesso che questa non me l'aspettavo. Chiaro, non fa una
> grinza. Ma non me l'aspettavo.
> 
> Ovviamente ora capisco che i due modi di chiamare il mio generatore non
> erano in realtà uguali, perché una chiamava un ".next()" in più.
> 
> Giusto per curiosità, questo fatto che il parsing degli argomenti di
> default non avvenga a runtime lo definireste un inconveniente tecnico
> con cui si può sopravvivere tranquillamente (fare altrimenti
> richiederebbe, in parole povere, uno scope in più?) o una feature?
> 

N.B: mi sono poi reso conto che il mio problema non è tanto il parsing
degli argomenti di default ma un molto più stupido

gr = dict(links)

che copia dict ma _non_, ovviamente, le liste che contiene.

Però mi la curiosità...

Pietro

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


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Pietro Battiston
Il giorno ven, 08/11/2013 alle 11.47 +, Daniele Varrazzo ha scritto:
> On 2013-11-08 11:41, Pietro Battiston wrote:
> > Salve a tutti,
> >
> > ho scritto un generatore con poche righe di codice. Credo che il
> > contenuto sia inessenziale per la mia domanda, comunque lo trovate in
> > coda a questa email.
> 
> Non credo lo sia:
> 
>  In [1]: def ciao(list=[]):
> ...: return list
> ...:
> 
>  In [2]: l = ciao()
> 
>  In [3]: l.append('wtf')
> 
>  In [4]: print ciao()
> 
> 
> secondo te cosa stampa il punto 4?


N... confesso che questa non me l'aspettavo. Chiaro, non fa una
grinza. Ma non me l'aspettavo.

Ovviamente ora capisco che i due modi di chiamare il mio generatore non
erano in realtà uguali, perché una chiamava un ".next()" in più.

Giusto per curiosità, questo fatto che il parsing degli argomenti di
default non avvenga a runtime lo definireste un inconveniente tecnico
con cui si può sopravvivere tranquillamente (fare altrimenti
richiederebbe, in parole povere, uno scope in più?) o una feature?

Grazie mille!

Pietro

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


Re: [Python] Un generatore che non capisco

2013-11-08 Per discussione Daniele Varrazzo

On 2013-11-08 11:41, Pietro Battiston wrote:

Salve a tutti,

ho scritto un generatore con poche righe di codice. Credo che il
contenuto sia inessenziale per la mia domanda, comunque lo trovate in
coda a questa email.


Non credo lo sia:

In [1]: def ciao(list=[]):
   ...: return list
   ...:

In [2]: l = ciao()

In [3]: l.append('wtf')

In [4]: print ciao()


secondo te cosa stampa il punto 4?

-- Daniele

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Manlio Perillo

On 08/11/2013 04:12, Piergiuliano Bossi wrote:

Mi sembra di capire che in Python sia con unittest che con nose non ci
sia un modo builtin per far si' che, in una gerarchia di test, la setup
della superclasse venga invocata automaticamente eseguendo un test della
sottoclasse.


Se ci fosse un linguaggio che implementa il paradigma ad oggetti che si 
comporta in questo modo, sarebbe sicuramente una strana eccezione.




Ciao  Manlio

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


[Python] Un generatore che non capisco

2013-11-08 Per discussione Pietro Battiston
Salve a tutti,

ho scritto un generatore con poche righe di codice. Credo che il
contenuto sia inessenziale per la mia domanda, comunque lo trovate in
coda a questa email. Il punto è il seguente:

In [2]: g = enum_balanced(2)

In [3]: list(g)
Out[3]: [{0: [1], 1: []}, {0: [1], 1: []}]

Ora, questo risultato non era quello che mi aspettavo. Armato di
pazienza, mi sono messo a fare un po' di debugging, e...

In [4]: g = enum_balanced(2)

In [5]: list(g.next() for i in range(2))
Out[5]: [{0: [1], 1: [0]}, {0: [1], 1: [0]}]

... mi trovo completamente spiazzato.

C'è ovviamente qualcosa di basilare che mi sfugge riguardi agli
iterables e/o dict, dato che io mi aspetterei che i due comandi sopra
restituissero lo stesso output _qualsiasi cosa_ ci sia scritta nel corpo
g (purché "yieldi" due volte, ovviamente, e non sfrutti variabili
globali...)

Grazie mille di qualsiasi dritta
(N.B: anche eventuali consigli su come migliorare l'algoritmo in sé -
che sostanzialmente genera tutti le sequenze di N numeri
- che finiscono con il numero iniziale
- che non ripetono mai una sottosequenza di lunghezza 2
- e che, possibilmente, non siano isomorfe tra di loro,
... saranno benvenutissimi)


grazie,

Pietro


def enum_balanced(N, prefix=[], links=None):
"""
Restituisci tutti i network balanced di N nodi.
"""

if not links:
links = {i : [] for i in range(N)}

tutti = set(range(N))

# Idea base: c'è un mapping biunivoco tra i balanced strongly
connected e i
# cicli in una cricca che non ripassano mai dallo stesso link.

# Per evitare (parte dei) grafi isomorfi, si può assumere che fino a
che si
# chiude il primo ciclo, i nodi vengono visitati in ordine...
if not prefix:
prefix = [0]
for i in range(1,N):
prefix.append(1)
links[i-1].append(i)
gen = enum_balanced(N, prefix, links)
while True:
try:
n = gen.next()
yield n
except StopIteration:
break

if prefix[-1] == 0 and set(prefix) == tutti:
gr = dict(links)
yield gr

for i in range(N):
# ... ma forse questa altra assunzione non si può fare!
(verificare)
if i != prefix[-1] and (not links[prefix[-1]] or i >
max(links[prefix[-1]])):
links[prefix[-1]].append(i)
gen = enum_balanced(N, prefix+[i], links)
while True:
try:
n = gen.next()
yield n
except StopIteration:
break
links[prefix[-1]].remove(i)

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Daniele Varrazzo

On 2013-11-08 03:12, Piergiuliano Bossi wrote:
Mi sembra di capire che in Python sia con unittest che con nose non 
ci sia
un modo builtin per far si' che, in una gerarchia di test, la setup 
della

superclasse venga invocata automaticamente eseguendo un test della
sottoclasse. Quello che vedo e' che di solito il primo step della 
setup

della sottoclasse e' invocare la setup della superclasse (yak!).

Prima domanda: confermate?


Se non ti torna questo non hai capito come funziona l'ereditarietà in 
Python.



Seconda domanda: vi rassegnate o c'e' qualche escamotage?


Cioè non ti va di fare?

class BaseTestCase(unittest.TestCase):
def setUp(self):
...

class SubTestCase(BaseTestCase):
def setUp(self):
super(SubTestCase, self).setUp()
...

boh, se non ti va bene questo non so che linguaggio stai usando.

-- Daniele

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Valerio Maggio

On 08 Nov 2013, at 10:43, Simone Federici  wrote:

> Beh, se ci pensi, in una qualche maniera ha definito proprio il decoratore 
> che suggerivi (vedi wraps… :-)
> Super cool.. :-)
> 
> Giuro che so leggere :-D
> 

Ma certo..voleva solo essere un ulteriore appunto, nulla di più :-)

> Però lo fa su tutti i metodi, anzi su tutti i callable quindi compresi gli 
> attributi = Class giusto per fare un esempio.

Si, è chiaro… ma infatti dipende dal caso d'uso specifico.. se il comportamento 
di invocazione della superclasse deve essere *sempre* effettuato per ogni 
metodo ridefinito, così fai molto prima e bene.
Altrimenti, vai di decoratore… in questo caso, forse, sarebbero soluzioni 
equivalenti.

> 
> Inoltre invoca il super prima, ma se lo volessimo invocare dopo o peggio in 
> mezzo?

Si, vero.. il comportamento di invocazione del super è unico e univoco per 
tutti i callable.. se volessi avere ordini di invocazione differenti, nel tuo 
caso la definizione di un nuovo decoratore vince in flessibilità
e semplicità di implementazione.

> insomma fa qualcosa per me in modo odisamente trasparente, le metaclassi sono 
> fantastiche, mi piace tanto a livello didattico ma non lo utilizzerei mai :-D

Sul livello didattico, non sono d'accordo. Meta-class programming è un 
paradigma a se.. ci sono tonnellate di letteratura a riguardo.
> 
> @callsuper lo preferisco :-)

Beh, alla fine credo che lo spirito della risposta di Enrico sia stato più che 
altro quello di "smentire" la mia iniziale osservazione (btw, sono contento che 
l'abbia fatto!) che 
le meta-classi non sarebbero state di aiuto, al contrario di quanto subodorato 
da Marco sin dall'inizio.

Nessuno però ha mai parlato di quale sia la soluzione migliore (in generale o 
nel caso specifico).
Probabilmente, dipende anche da fattori di "gusti personali"..

> qualche implementazione fornite dai google friends:
> http://snipperize.todayclose.com/snippet/py/Decorator-for-calling-the-super-method-automagically.--24988/
> http://anybox.fr/blog/calling-super-from-a-method-decorator

Davvero molto interessanti! Grazie per lo share !-)

--
valerio


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici
>
> Beh, se ci pensi, in una qualche maniera ha definito proprio il decoratore
> che suggerivi (vedi wraps… :-)
> Super cool.. :-)
>

Giuro che so leggere :-D

Però lo fa su tutti i metodi, anzi su tutti i callable quindi compresi gli
attributi = Class giusto per fare un esempio.

Inoltre invoca il super prima, ma se lo volessimo invocare dopo o peggio in
mezzo?
insomma fa qualcosa per me in modo odisamente trasparente, le metaclassi
sono fantastiche, mi piace tanto a livello didattico ma non lo utilizzerei
mai :-D

@callsuper lo preferisco :-)


qualche implementazione fornite dai google friends:
http://snipperize.todayclose.com/snippet/py/Decorator-for-calling-the-super-method-automagically.--24988/
http://anybox.fr/blog/calling-super-from-a-method-decorator
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Marco Beri
2013/11/8 enrico franchi 

> https://gist.github.com/rik0/7367887
>

Ecco, appunto, mi autocito:

"Altrimenti puoi giocare con le metaclassi, ma per questo ti risponderà
qualcuno più bravo di me :-) "

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Valerio Maggio

On 08 Nov 2013, at 09:50, Simone Federici  wrote:

> 
>> https://gist.github.com/rik0/7367887 
> 
> Stupenda!

Si, concordo !-)

> Non la utilizzerei mai :-)

Beh, se ci pensi, in una qualche maniera ha definito proprio il decoratore che 
suggerivi (vedi wraps… :-)
Super cool.. :-)

--
valerio


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Valerio Maggio

On 08 Nov 2013, at 09:43, enrico franchi  wrote:

> 
> 
> 
> 2013/11/8 Valerio Maggio 
> 
> On 08 Nov 2013, at 07:52, Marco Beri  wrote:
> 
>> 2013/11/8 Piergiuliano Bossi 
>> Mi sembra di capire che in Python sia con unittest che con nose non ci sia 
>> un modo builtin per far si' che, in una gerarchia di test, la setup della 
>> superclasse venga invocata automaticamente eseguendo un test della 
>> sottoclasse. Quello che vedo e' che di solito il primo step della setup 
>> della sottoclasse e' invocare la setup della superclasse (yak!).
>> 
>> Prima domanda: confermate?
>> 
>> Sì, questo è il comportamento standard di Python.
>>  
>> Seconda domanda: vi rassegnate o c'e' qualche escamotage?
>> 
>> Ti fa schifo così?
>> 
>> class Father(object):
>> def setUp(self):
>> print "Padre"
>> self.childrenSetUp()
>> 
>> class Children(Father):
>> def childrenSetUp(self):
>> print "Figlio"
>> 
>> x = Children()
>> x.setUp()
> 
> A me, sinceramente, un pochino si :D
> Scherzi a parte, credo che in questo caso imho hai "spostato" il problema, 
> "specializzando" il setUp della superclasse.
> 
> 
> Beh, e' un classico template method pattern… 

Si, vero!
Non so per quale motivo ero convinto che fosse un "template method" al 
contrario (in termini di ruoli).. ma in verità mi sbagliavo!
È un template a tutti gli effetti.
Probabilmente sono stato fuorviato dal fatto che pensavo più al setUp del test 
che al problema in generale…una cosa del tipo

class Father(unit test.TestCase):
def setUp(self):
self.pre_setup()
# father_setup_code
self.post_setup()

def pre_test(self):
pass # non ho messo raise NotImplementedError per renderlo più 
flessibile per le sottoclassi
   
def post_test(self):
pass

potrebbe andare in generale :-)
In ogni caso, per dovere di cronaca, aggiungerei che nose, rispetto a unittest, 
è più flessibile sulla faccenda setup: decoratore with_setup o tutti i metodi 
che rispettano il naming patter setup_
(https://nose.readthedocs.org/en/latest/writing_tests.html#test-classes)
  

>  
> Mmm imho no… nel senso che con la metaclasse agisci a livello di classe e non 
> di istanza e il setUp deve essere invocato per *ogni* test dell'istanza 
> correntemente in esecuzione.
> Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito questo è 
> quello che mi viene in mente.
> 
> https://gist.github.com/rik0/7367887 
> 

Stupendo!! :-)
--
valerio


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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici

> https://gist.github.com/rik0/7367887 

Stupenda!
Non la utilizzerei mai :-)___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici
> Seconda domanda: vi rassegnate o c'e' qualche escamotage?

Nulla ti vieta di scrivere un @decorator per setup che invochi lui il super per 
te
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione enrico franchi
2013/11/8 Valerio Maggio 

>
> On 08 Nov 2013, at 07:52, Marco Beri  wrote:
>
> 2013/11/8 Piergiuliano Bossi 
>
>> Mi sembra di capire che in Python sia con unittest che con nose non ci
>> sia un modo builtin per far si' che, in una gerarchia di test, la setup
>> della superclasse venga invocata automaticamente eseguendo un test della
>> sottoclasse. Quello che vedo e' che di solito il primo step della setup
>> della sottoclasse e' invocare la setup della superclasse (yak!).
>>
>> Prima domanda: confermate?
>>
>
> Sì, questo è il comportamento standard di Python.
>
>
>> Seconda domanda: vi rassegnate o c'e' qualche escamotage?
>>
>
> Ti fa schifo così?
>
> class Father(object):
> def setUp(self):
> print "Padre"
> self.childrenSetUp()
>
> class Children(Father):
> def childrenSetUp(self):
> print "Figlio"
>
> x = Children()
> x.setUp()
>
>
> A me, sinceramente, un pochino si :D
> Scherzi a parte, credo che in questo caso imho hai "spostato" il problema,
> "specializzando" il setUp della superclasse.
>
>
Beh, e' un classico template method pattern...





> Mmm imho no… nel senso che con la metaclasse agisci a livello di classe e
> non di istanza e il setUp deve essere invocato per *ogni* test dell'istanza
> correntemente in esecuzione.
> Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito
> questo è quello che mi viene in mente.
>
>
https://gist.github.com/rik0/7367887

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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Valerio Maggio

On 08 Nov 2013, at 09:05, Simone Federici  wrote:

> 
>> il problema è parlare di introduzione delle Interfacce perché "i clienti lo 
>> richiedono"…
> 
> Per carità le interfacce giá ci sono in python. almeno se non intendiamo per 
> interfacce la sola parola chiave "interface"…

Certo, LOL… 
Sto sempre ripensando a quel Keynote (con le slides modificate on-the-fly e 
conseguente panico della regia per la disconnessione forzata del video), e al 
successivo Q&A con l'intervento di Alex (Martelli) sulla faccenda 
"interface"... :D

(Scusate l'OT)

--
valerio





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


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Marco Beri
2013/11/8 Simone Federici 

>
> > On 08/nov/2013, at 08:50, Marco Beri  wrote:
> > Credo che lui abbia un comportamento base di tutti i setUp delle
> sottoclassi che vuole mettere nella classe padre, quindi, in alcuni o tutti
> i casi, vuole fare qualcosa di particolare nelle classi figlie.
>
> Vabbè ma ditelo che siete gemelli, gli leggi nel pensiero?
>

Aspetta! Magari non ho capito una mazza :-)


> Explicit is better than implicit.
> Se ridefinisci il setup devi per forza richiamare il super. Ed è giusto
> che sia così altrimenti pensala al contrario, come portentous impedire
> l'invocazione del super se fosse automatica?
>

Hai ragione.

Anche questa volta mi sono lasciato prendere dalla fregola di provare a
risolvere il problema senza salire di un livello sopra :-)

Ciao.
Marco.


-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici
> Le ABC in Python ci sono…

:-)

> il problema è parlare di introduzione delle Interfacce perché "i clienti lo 
> richiedono"…

Per carità le interfacce giá ci sono in python. almeno se non intendiamo per 
interfacce la sola parola chiave "interface"...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare super.setup automaticamente

2013-11-08 Per discussione Simone Federici


> On 08/nov/2013, at 08:50, Marco Beri  wrote:
> 
> Credo che lui abbia un comportamento base di tutti i setUp delle sottoclassi 
> che vuole mettere nella classe padre, quindi, in alcuni o tutti i casi, vuole 
> fare qualcosa di particolare nelle classi figlie.

Vabbè ma ditelo che siete gemelli, gli leggi nel pensiero?

Explicit is better than implicit.
Se ridefinisci il setup devi per forza richiamare il super. Ed è giusto che sia 
così altrimenti pensala al contrario, come portentous impedire l'invocazione 
del super se fosse automatica?

Cmq il DP suggerito da te è la solution del problema che hai capito tu

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