17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Programmation</strong> orientée objet<br />

CHAPITRE 14<br />

Cet exemple pousse la logique jusqu’au bout puisque les importations sont aussi<br />

locales à l’opération : tout est masqué.<br />

Proxy<br />

Le DP Proxy permet de représenter et de contrôler tous les accès à un objet par le<br />

biais d’un deuxième objet. On compte plusieurs types de proxy, dont :<br />

Le Virtual Proxy, qui ne permet de gérer l’instanciation de l’objet sous-jacent que<br />

lorsqu’on y accède réellement.<br />

Le Remote Proxy, qui permet l’accès à un objet distant. Ce proxy publie les méthodes<br />

de l’objet mais ajoute le protocole réseau pour échanger avec l’objet distant.<br />

Construits comme les Adapters, les Proxies n’ont pas à proprement parler de modèle<br />

générique : chaque implémentation dépend du contexte.<br />

Dans l’exemple ci-dessous, le Virtual Proxy mis en œuvre permet de manipuler des<br />

fichiers vidéos de grande taille sans avoir à les ouvrir : seules les métadonnées sont<br />

chargées et permettent l’utilisation du fichier. On n’accède aux données qu’en cas de<br />

nécessité (méthode donnees()).<br />

Virtual Proxy<br />

for line in fichier:<br />

calculateur.update(line)<br />

empreinte = calculateur.hexdigest()<br />

# création et ajout du fichier md5<br />

nom_empreinte = os.tmpname()<br />

with open(nom_empreinte, 'w') as fichier:<br />

fichier_empreinte.write(empreinte)<br />

archive.add(nom_empreinte, '%s.md5' % nom)<br />

archive.close()<br />

if __name__ == '__main__':<br />

archiveur = Archiveur()<br />

archiveur.archive_fichier('memento.py')<br />

import os<br />

import stat<br />

class VideoFile(object):<br />

def __init__(self, nom):<br />

self.nom = nom<br />

self.stats = os.stat(nom)<br />

521

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!