Come combinare twill e pitone in un unico codice che potrebbe essere eseguito su “Google App Engine”?

StackOverflow https://stackoverflow.com/questions/2717325

Domanda

Ho installato twill sul mio computer (dopo aver precedentemente installato Python 2.5) e sono state usando recente.

Python è installato sul disco C sul mio computer: C: \ Python25

E la cartella saia ( “Saia-0,9”) si trova qui: E: \ tmp \ twill-0.9

Ecco un codice che ho usato in twill:

go “some website’s sign-in page URL”
formvalue 2 userid “my login”
formvalue 2 pass “my password”
submit
go “URL of some other page from that website”
save_html result.txt

Questo codice mi aiuta per accedere a un sito web, in cui ho un conto, registrare il codice HTML di qualche altra pagina di questo sito web (che posso accedere solo dopo il login), e conservarla in un file chiamato “result.txt” (ovviamente, prima di utilizzare questo codice in primo luogo devo sostituire “il mio login” con il mio vero login, “la mia password” con la mia password reale, “di accesso di qualche sito web URL della pagina” e “URL di alcuni altra pagina da quel sito”con gli URL reali di quel sito, e il numero 2, con il numero del modulo su quel sito che viene utilizzato come un segno-in modulo di log-in pagina del sito web)

Questo mi negozio di codice in “test.twill” file che si trova nella mia cartella “Saia-0.9”: E: \ tmp \ Saia-0.9 \ test.twill Corro questo file dal mio prompt dei comandi: python twill-sh test.twill

Ora, ho anche installato “Google App Engine SDK” da “Google App Engine” e sono state anche usarlo per un po '.

Per esempio, sono stato utilizzando questo codice:

import hashlib
m = hashlib.md5()
m.update("Nobody inspects")
m.update(" the spammish repetition ")
print m.hexdigest()

Questo codice mi aiuta a trasformare la frase “Nessuno ispeziona la ripetizione spammish” in MD5.

Ora, come posso mettere questi due pezzi di codice in un unico script python che avrei potuto girare su “Google App Engine”?

esempio di Let, voglio il mio codice per accedere a un sito web da “Google App Engine”, passare a un'altra pagina su quel sito, registrare il codice HTML (che è quello che il mio codice twill fa) e di trasformare il codice HTML in il suo MD5 (questo è quello che il mio secondo codice fa). Così, come posso combinare questi due codici in un unico codice Python?

Credo, dovrebbe essere fatto in qualche modo importando twill, ma come si può fare? Può un codice Python - quello che viene gestito da “Google App Engine” - Import twill da qualche parte su internet? O, forse, twill è già installato sul “Google App Engine”?


Aggiornamento 1:

(questo aggiornamento è la mia risposta alla risposta di Wooble)

Ecco l'elenco di tutte le cartelle (nella mia cartella “Saia-0.9”) che contengono i file __init__.py. (Alcune cartelle su questa lista si trovano all'interno di altre cartelle, che sono anche menzionati in questo elenco):

E: \ twill-0.9 \ accumulo \ lib \ twill \ estensioni \ match_parse

E: \ twill-0.9 \ accumulo \ lib \ twill \ estensioni

E: \ twill-0.9 \ accumulo \ lib \ twill \ other_packages \ _mechanize_dist

E: \ twill-0.9 \ accumulo \ lib \ twill \ other_packages

E: \ twill-0.9 \ accumulo \ lib \ twill

E: \ Saia-0.9 \ twill \ estensioni \ match_parse

E: \ Saia-0.9 \ twill \ estensioni

E: \ Saia-0.9 \ twill \ other_packages \ _mechanize_dist

E: \ Saia-0.9 \ twill \ other_packages

E: \ Saia-0.9 \ twill

È stato utile?

Soluzione

Per utilizzare librerie di terze parti in progetti App Engine, è sufficiente includere con l'applicazione quando si distribuisce. Copiare la cartella saia (quella che contiene __init__.py) nella cartella dell'applicazione e distribuirlo.

Guardando il progetto Google Code twill, sembra che twill comprende le sue dipendenze (pyparsing, Mechanize, etc.) nel pacchetto, in modo da non essere necessario includere qualsiasi altra cosa.

Altri suggerimenti

qui è un esempio di utilizzo di twill di eseguire una ricerca su Google, se questo aiuta. Essa mostra utilizzando twill e BeautifulSoup insieme a pagine web di parsing:

>>> import twill.commands
>>> import BeautifulSoup
>>> 
>>> class browser:
...    def __init__(self, url="http://www.google.com",log = None):
...       self.a=twill.commands
...       self.a.config("readonly_controls_writeable", 1)
...       self.b = self.a.get_browser()
...       self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
...       self.log = log
...       self.b.clear_cookies()
...       self.url=url
...    def googleQuery(self, query="python code"):
...       self.b.go(self.url)
...       #self.b.showforms()
...       f = self.b.get_form("f")
...       #print "form is %s" % f
...       f["q"] = query
...       self.b.clicked(f, "btnG")
...       self.b.submit()
...       pageContent = self.b.get_html()
...       soup=BeautifulSoup.BeautifulSoup(pageContent)
...       ths = soup.findAll(attrs={"class" : "l"})
...       for a in ths:
...          print a
... 
>>> t=browser()
>>> t.googleQuery("twill queries")
==> at http://www.google.ie/
Note: submit is using submit button: name="btnG", value="Google Search"

<a href="http://pyparsing.wikispaces.com/WhosUsingPyparsing" class="l" onmousedown="return clk(this.href,'','','res','1','','0CBMQFjAA')">pyparsing - WhosUsingPyparsing</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00048.html" class="l" onmousedown="return clk(this.href,'','','res','2','','0CBcQFjAB')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00050.html" class="l" onmousedown="return clk(this.href,'','','res','3','','0CBkQFjAC')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.genealogytoday.com/surname/finder.mv?Surname=Twill" class="l" onmousedown="return clk(this.href,'','','res','4','','0CB4QFjAD')"><em>Twill</em> Genealogy and Family Tree Resources - Surname Finder</a>
<a href="http://a706cheap-apparel.hobby-site.com/ladies-cotton-faded-twill-le-chameau-breeks-42" class="l" onmousedown="return clk(this.href,'','','res','5','','0CCEQFjAE')">Ladies Cotton Faded <em>Twill</em> Le Chameau Breeks 42</a>
<a href="http://twill.idyll.org/examples.html" class="l" onmousedown="return clk(this.href,'','','res','6','','0CCMQFjAF')"><em>twill</em> Examples</a>
<a href="http://panjiva.com/Sri-Lankan-Manufacturers-Of/twill+capri" class="l" onmousedown="return clk(this.href,'','','res','7','','0CCcQFjAG')">Sri-Lankan <em>Twill</em> Capri Manufacturers | Sri-Lankan Suppliers of <b>...</b></a>
<a href="http://c586cheap-apparel.dyndns.ws/twill-beige-blazer" class="l" onmousedown="return clk(this.href,'','','res','8','','0CCoQFjAH')"><em>Twill</em> beige blazer</a>
<a href="http://stackoverflow.com/questions/2267537/how-do-you-use-relative-paths-for-twill-tests" class="l" onmousedown="return clk(this.href,'','','res','9','','0CCwQFjAI')">How do you use Relative Paths for <em>Twill</em> tests? - Stack Overflow</a>
<a href="http://mytextilenotes.blogspot.com/2010/01/introduction-to-twill-weave.html" class="l" onmousedown="return clk(this.href,'','','res','10','','0CC8QFjAJ')">My Textile Notes: Introduction to <em>Twill</em> Weave</a>
>>>  

Non ho idea di che cosa twill fa (beh, Googled), ma AppEngine offerte funzione fetch() che può essere utilizzato per recuperare le pagine web. Supporta anche il metodo POST per esempio per gli accessi.

(dubito twill di opere in AppEngine, perché AppEngine ha limitato librerie Python disponibili per motivi di sicurezza. Solo una supposizione, però.)

Credo che siete alla ricerca di un modo per importare il modulo twill in App-Engine. Dovrete capire uno in cui i file twill pitone sono o come ottenere un pacchetto sorgente di loro per confezionare con il vostro sito web, ma sembra che l'importazione di moduli 3rd party può essere fatto con alcune eccezioni, vedi sotto.

zipimport seguendo le indicazioni dal sito di Google qui e qui .

dalla pagina libreria di terze parti di Google:

  

App Engine utilizza una versione personalizzata della funzione zipimport invece che l'implementazione standard. Funziona in genere il solito modo: aggiungere l'archivio Zip a sys.path, quindi importare come al solito. Con queste eccezioni:   zipimport può solo moduli di importazione memorizzati nell'archivio come file di origine .py. Può moduli non di importazione memorizzati come .pyc o .pyo file.   zipimport è implementato in puro Python, e non fa uso di codice nativo per la decompressione (codice C).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top