CGI FileBrowser (dynamische Download Seite)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab ein neues Projekt angelegt und es mal vollmundig "PyFileCenter" genannt ;)

Eigentlich ist aber nur der FileBrowser fertig :lol:

Der FileBrowser erzeugt per CGI eine Download-Seite. Ein Beispiel:
http://www.jensdiemer.de/Programmieren/

Als Gimmick wird für jede Datei Informationen mittels Linux file Befehl eingeblendet.
Damit man den FileBrowser an verschiedenen Stellen (also verschiedene Basis-Verzeichnisse) seiner Webseite benutzen kann, wird er über eine KonfigurationsDatei (index.py) aufgerufen.
Diese Datei speicher ich als index.py in dem Basisverzeichnis des FileBrowsers. In meinem Beispiel von oben also /Programmieren/index.py
Dabei sollte Apache's DirectoryIndex Directive so konfiguriert sein, das die index.py als Index des Verzeichnisses nimmt.


index.py

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-


print "Content-Type: text/html\n"
import cgitb; cgitb.enable()
import os, sys

sys.path.insert( 0, os.environ["DOCUMENT_ROOT"] + "cgi-bin/PyFileCenter/" )
import FileBrowser


filebrowser_cfg = {
    # Nur Endungen anzeigen, die in der Liste vorkommen
    "ext_whitelist":    (".7z",".zip",".py"),

    # Hauptverz.: Navigation nur innerhalb diese Verz. mit Unterverz. erlauben
    "base_path":        "Programmieren",

    # Verz. in der Liste auslassen:
    "dir_filter":       ( "OLD", ),

    # Dateien die nicht angezeigt werden sollen
    "file_filter":       ( "index.py", ),

    # =False -> Nur Dateien im aktuellen Verz. anzeigen
    "allow_subdirs":    True,
    #~ "allow_subdirs":    False,
}


FileBrowser.FileBrowser( filebrowser_cfg )

Der Sourcecode kann unter http://www.jensdiemer.de/?PyFileCenter eingesehen und runtergeladen werden...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sehr interessant, aber dann muss in jedem Ordner eine index.py sein (ggf. als Symlink), oder kann man das irgendwie in den Apachen einhacken, dass es auch nur mit einer Kopie geht?

Der Universal-MIME-Typ könnte application/octet-stream sein..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mime-type habe ich eingetragen - Danke... Wobei das leider bei *.py Dateien auch nicht hilft, da der Server diese so oder so als CGI Ausführen will... Das könnte man natürlich mit einem Options -CGIexe oder so ähnlich abstellen, ist aber irgendwie doof...

Die "index.py" Konfigurationsdatei stellt sowas ähnliches dar, wie Apache's .htaccess Datei... Die muß immer individuell "eingerichtet" werden...
Das ganze hat den Sinn, das man mehrere individuelle zu konfigurierende Download-Bereiche gleichzeitig betreiben kann.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Das ganze hat den Sinn, das man mehrere individuelle zu konfigurierende Download-Bereiche gleichzeitig betreiben kann.
Klar, aber wenn ich das Directory Listing mod_dir des Apachen generell ersetzen möchte ist das etwas unpraktisch ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das hatte ich eigentlich nicht vor ;) Soll ein einfaches CGI bleiben...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Nun gibt es einen neuen Konfigurationsparameter:

Code: Alles auswählen

    # =True -> User kann in ZIP Archiven reinsehen
    "allow_zipview"     : True
Kann man hier ansehen:
http://www.jensdiemer.de/Programmieren/?path=PyAdmin

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab die ganze Konfiguration geändert... Nun ist es die pseudo Klasse cfg...
Meine index.py sieht dann so aus:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-


print "Content-Type: text/html\n"
import cgitb; cgitb.enable()
import os, sys

# Verzeichnis in dem sich "FileBrowser.py" befindet in den Suchpfad aufnehmen
sys.path.insert( 0, os.environ["DOCUMENT_ROOT"] + "cgi-bin/PyFileCenter/" )

import FileBrowser



# Nur Endungen anzeigen, die in der Liste vorkommen
FileBrowser.cfg.ext_whitelist   = [ ".7z", ".zip", ".py" ]

# Hauptverz.: Navigation nur innerhalb diese Verz. mit Unterverz. erlauben
FileBrowser.cfg.base_path       = "Programmieren"

# Verz. in der Liste auslassen:
FileBrowser.cfg.dir_filter      = ["OLD"]

# Dateien die nicht angezeigt werden sollen
FileBrowser.cfg.file_filter     = ["index.py"]

# =False -> Nur Dateien im aktuellen Verz. anzeigen
FileBrowser.cfg.allow_subdirs   = True

# =True -> User kann in ZIP Archiven reinsehen
FileBrowser.cfg.allow_zipview   = True

# zurück-Link der auf jeder Seite eingeblendet werden soll
FileBrowser.cfg.backlink = {
        "txt"   : "< zurück zur Homepage",
        "url"   : "http://www.jensdiemer.de/"
    }

# Verzeichnis bezogene zurück-Links
FileBrowser.cfg.dir_backlinks = {
    "PyAdmin"       : ["< PyAdmin Projektseite",        "/?PyAdmin"],
    "PyDiskEraser"  : ["< PyDiskEraser Projektseite",   "/?PyDiskEraser"],
    "PyLucid"       : ["< PyLucid Projektseite",        "/?PyLucid"]
}

# Nur ein zurück einblenden
FileBrowser.cfg.only_one_backlink = True

# HTML-Head
FileBrowser.cfg.html_head["robots"] = "index,follow"



# Starten...
FileBrowser.FileBrowser()
Das ganze hat einen großen Vorteil bei der "Auswertung" der Konfiguration... Verher habe ich immer es mit z.B. if self.cfg.has_key("XY") and self.cfg["XY"] == False: arbeiten müßen... Nun sind alle "Parameter" vordefiniert, können also garnicht fehlen... Somit entfällt überall das .has_key()...

Aktuelle Source: http://www.jensdiemer.de/?PyFileCenter

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Mime-type habe ich eingetragen - Danke... Wobei das leider bei *.py Dateien auch nicht hilft, da der Server diese so oder so als CGI Ausführen will... Das könnte man natürlich mit einem Options -CGIexe oder so ähnlich abstellen, ist aber irgendwie doof...
Ich hab jetzt einen "Download Proxy" programmiert... Die Daten einer Skriptdatei wird dabei direkt gelesen und mit einem richtigen Header an den Browser geschickt...
Umständlich, aber so geht's...

Außerdem hab ich den Code etwas aufgeräumt...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab das ganze nochmals ausgebaut... Nun zeigt es auch Thumbnails an...

Wie sowas aussieht könnt ihr hier http://www.jensdiemer.de/_Bilder/_publi ... ere_Katzen nachsehen...

Es ist das selbe Skript, welches auch http://www.jensdiemer.de/_Downloads/Programmieren/ zur verfügung stellt ;)

Der Download der sourcen unter
http://www.jensdiemer.de/Programmieren/ ... FileCenter

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Johi
User
Beiträge: 22
Registriert: Sonntag 21. November 2004, 20:08

auch wenn das vielleicht nicht hier rein gehört: Can't use textile-Markup (maximum recursion limit exceeded)
auf http://www.jensdiemer.de/Programmieren/ ... FileCenter
:)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Danke für den Hinweis. Hab gleich mal ein Bug Request geschrieben: https://sourceforge.net/tracker/index.p ... tid=764837

EDIT: So, in der CVS Version ist es jetzt gefixed.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten