10
votes

URL Builder pour Python

Je sais sur urllib et urlparse , mais je veux m'assurer que je ne réinventions pas la roue.

Mon problème est que je vais Recherchez un groupe d'URL du même domaine via la bibliothèque urllib . Je veux fondamentalement pouvoir générer des URL à utiliser (comme chaînes) avec différents chemins et paramètres de requête. J'espérais que quelque chose pourrait avoir une syntaxe comme: xxx

essentiellement, je veux pouvoir stocker des valeurs par défaut qui sont transmises à urlpars.urlunsplit à la place d'assombrir constamment le code en passant dans l'ensemble du tuple à chaque fois.

Quelque chose comme ça existe? Les gens sont-ils d'accord que cela vaut la peine de se jeter ensemble?


0 commentaires

4 Réponses :


4
votes

proposez-vous une extension à http://docs.python.org /Library/urlparse.html#urlparse.urlunparse qui se substituerait à la tuple 6-item?

Parlez-vous de quelque chose comme ça? P>

class URLBuilder( object ):
    def __init__( self, base ):
        self.parts = list( urlparse(base) )
    def __call__( self, scheme=None, netloc=None, path=None, etc. ):
        if scheme is not None: self.parts[0] = scheme
        if netloc is not None: self.parts[1]= netloc
        if path is not None: self.parts[2]= path
        etc.
        return urlunparse( self.parts )

bldr= URLBuilder( someURL )
print bldr( scheme="ftp" )


2 commentaires

mehhh ... peut-être. Mais je pensais à quelque chose de plus dans les lignes d'une classe qui stockait les valeurs par défaut. Je ne veux pas continuer à passer à "Semplot". Je veux juste passer des valeurs par défaut à une classe, puis réutilisez une instance pour générer toutes les URL différentes. Quelque chose de similaire au modèle de constructeur qui est omniprésent dans Java.


@Tom: Il ne semble pas assez complexe pour tordre la main. En effet, si vous mettez plus de plus de 25 lignes de code, vous avez probablement trop fait trop.



3
votes

Encore pas tout à fait sûr de ce que vous cherchez ... Mais je vais lui donner un coup. Si vous cherchez simplement à créer une classe qui conservera vos valeurs par défaut et que, il est suffisamment simple pour faire de votre propre classe et utiliser la magie Python comme str . Voici un exemple rayé (sous-optimal): xxx

Si vous cherchez plus de la motif de conception du constructeur, le L'article Wikipedia a un exemple de python raisonnable (ainsi que Java ).


4 commentaires

Je préfère utiliser quelque chose comme urlparse.urlunparse plutôt que ponctuation du code rigide.


Accepter cette réponse jolie tard ... En fin de compte, je n'avais vraiment pas besoin de quelque chose comme ça ... mais c'est ce que je cherchais. Il est évident qu'il n'y avait rien de construit à Python comme celui-ci, mais c'est tout ce que je me demandais. (Je savais que je pouvais facilement le coder moi-même). Mon seul commentaire est comme S.Lott ... J'aurais utilisé Urlparse dans la mise en œuvre de la classe ... merci ewall.


Afin d'éviter le codage rigide, l'URL s'échappant des paramètres, ce que je suis venu ici, vous pouvez utiliser urllib.urlencode , par exemple: params = urllib.urlencode ({' Utilisateur ': auto.request.user.pk,' jeton ': m.hexdigest ()})


Notez que l'exemple ci-dessus ne manipule pas le schéma (https / http), le #hash qui peut être à la fin et inclura une barre oblique de fin lorsqu'il n'y a pas de chemin et une fuite? quand il n'y a pas de paramètres. Il semble que Python aurait quelque chose à comporter de manière proprement sans que tout le monde écrit leur propre.



4
votes

Vous voudrez peut-être envisager de regarder Furl car cela pourrait être une réponse à vos besoins.


1 commentaires

La réponse originale était une question plus pour un commentaire qu'une réponse.



1
votes

Je pense que vous voulez http://pythonhosted.org/uritools/ .

Exemple de la DOCS: P>

new_parts = [part for part in parts]
new_parts[2] = "/some/other/path"
new_uri = uriunsplit(new_parts)


0 commentaires