# -*- coding: utf-8 -*- # Modul zur Erkennung des MIME-Types des Elements. import mimetypes, shutil, os.path class DateiSystemElement(object): """Die Klasse DateiSystemElement stellt die Basisklasse für Elemente im Dateisystem (z.B. Dateien und Verzeichnisse) dar. Anmerkungen: - Eigentlich sollte ein DateiSystemElement seinen eigenen Pfad nicht kennen. Auch das Umbenennen und weitere Verwaltungsfunktionen gehören eher zum übergeordneten Dateisystem. Aus praktikabilitätsgründen wurde allerdings diese Implementierung gewählt. - Für die Erkennung des MIME-Types wird derzeit lediglich die Erweiterung des Elements berücksichtigt. Attribute: name (Zeichenkette): Der Name des Elements im Dateisystem. pfad (Zeichenkette): Der Pfad des Elements im Dateisystem. typ (Zeichenkette): Gibt den MIME-Type des Elements an. verzeichnis (Zeichenkette): Der Pfad des übergeordneten Verzeichnisses der Datei. """ def __init__(self, pPfad): """Konstruktor. Initialisiert das DateiSystemElement. Parameter: pPfad (Zeichenkette): Der Pfad des DateiSystemElements. """ # Slash am Ende entfernen if pPfad.endswith('/'): pPfad = pPfad[:-1] self._pfad = pPfad self._erkenneTyp() def _erkenneTyp(self): """Hilfsmethode. Erkennt den Typ des DateiSystemElements und speichert. diesen im Attribut 'typ'. """ if os.path.isfile(self._pfad): # Erkennung des MIME-Types. Es wird lediglich die Erweiterung # der Datei geprüft. self.typ = mimetypes.guess_type(self._pfad, False) elif os.path.isdir(self._pfad): self.typ = "inode/directory" elif os.path.islink(self._pfad): self.typ = "inode/symlink" elif os.path.ismount(self._pfad): self.typ = "inode/mount-point" else: self.typ = "application/octet-stream" def istVorhanden(self): """Anfrage. Prüft, ob das Element im Dateisystem bereits existiert. Parameter: --- keine --- Rückgabe (Wahrheitswert): True falls das Element im Dateisystem bereits existiert, sonst False. """ return os.path.exists(self._pfad) def nennePfad(self): """Anfrage. Gibt den Pfad des Elements im Dateisystem zurück.""" return self._pfad def nenneVerzeichnis(self): """Anfrage. Gibt das übergeordnete Verzeichnis des Elements zurück.""" return os.path.dirname(self._pfad) def nenneName(self): """Anfrage. Gibt den Namen des Elements im Dateisystem zurück.""" return os.path.basename(self._pfad) def nenneTyp(self): """Anfrage. Gibt den Typ des Elements zurück (als MIME-Type).""" return self.typ def verschieben(pPfad): """Auftrag. Hängt das Element im Dateisystem um. Parameter: pPfad (Zeichenkette): Gibt den neuen Pfad im Dateisystem an. """ # Verschieben, falls Element bereits existiert. if os.path.exists(pPfad): try: shutil.move(self._pfad, pPfad) self._pfad = pPfad except: print("Fehler. Verschieben von '%s' nicht möglich." % self._pfad) # Attribute (verdeckte Getter und Setter) pfad = property(nennePfad, verschieben, doc="Der Pfad des " \ "DateiSystemElements im Dateisystem.") name = property(nenneName, doc="Der Name des DateiSystemElements im" \ "Dateisystem.") verzeichnis = property(nenneVerzeichnis, doc="Der Pfad des übergeordneten" \ " Verzeichnisses des DateiSystemElements im Dateisystem.")