From 0952f84d6c61e2029b8d2563ec8710eef7862ab3 Mon Sep 17 00:00:00 2001 From: John Garland Date: Sun, 13 Sep 2009 13:51:00 +0000 Subject: [PATCH] Detect now handles creating a reader. Finished writing detect_format and hence auto_detect (could it really be?) is_valid() doesn't need to take in a filename (already has it). --- deluge/plugins/blocklist/blocklist/core.py | 20 ++----------- deluge/plugins/blocklist/blocklist/detect.py | 29 +++++++++++++++++-- deluge/plugins/blocklist/blocklist/readers.py | 2 +- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/deluge/plugins/blocklist/blocklist/core.py b/deluge/plugins/blocklist/blocklist/core.py index 322eabc41..49134eda1 100644 --- a/deluge/plugins/blocklist/blocklist/core.py +++ b/deluge/plugins/blocklist/blocklist/core.py @@ -48,9 +48,7 @@ import deluge.component as component import deluge.configmanager from deluge.core.rpcserver import export from deluge.httpdownloader import download_file -from decompressers import Zipped, GZipped, BZipped2 -from readers import EmuleReader, SafePeerReader, PeerGuardianReader -from detect import detect_compression, detect_format, UnknownFormatError +from detect import detect_compression, detect_format, create_reader, UnknownFormatError # TODO: check return values for deferred callbacks # TODO: review class attributes for redundancy @@ -67,18 +65,6 @@ DEFAULT_PREFS = { "try_times": 3, } -DECOMPRESSERS = { - "Zip" : Zipped, - "GZip" : GZipped, - "BZip2" : BZipped2 -} - -READERS = { - "Emule" : EmuleReader, - "SafePeer" : SafePeerReader, - "PeerGuardian" : PeerGuardianReader -} - # Constants BLOCK_RANGE = 1 @@ -96,9 +82,7 @@ class Core(CorePluginBase): self.core = component.get("Core") self.config = deluge.configmanager.ConfigManager("blocklist.conf", DEFAULT_PREFS) - self.reader = READERS.get(self.config["list_type"]) - if self.config["list_compression"]: - self.reader = DECOMPRESSERS.get(self.config["list_compression"])(self.reader) + self.reader = create_reader(self.config["list_type"], self.config["list_compression"]) update_now = False if self.config["load_on_start"]: diff --git a/deluge/plugins/blocklist/blocklist/detect.py b/deluge/plugins/blocklist/blocklist/detect.py index 67a8f9931..de759abc3 100644 --- a/deluge/plugins/blocklist/blocklist/detect.py +++ b/deluge/plugins/blocklist/blocklist/detect.py @@ -33,12 +33,27 @@ # # +from decompressers import Zipped, GZipped, BZipped2 +from readers import EmuleReader, SafePeerReader, PeerGuardianReader + COMPRESSION_TYPES = { "PK" : "zip", "\x1f\x8b" : "gzip", "BZ" : "bzip2" } +DECOMPRESSERS = { + "Zip" : Zipped, + "GZip" : GZipped, + "BZip2" : BZipped2 +} + +READERS = { + "Emule" : EmuleReader, + "SafePeer" : SafePeerReader, + "PeerGuardian" : PeerGuardianReader +} + class UnknownFormatError(Exception): pass @@ -49,5 +64,15 @@ def detect_compression(filename): return COMPRESSION_TYPES.get(magic_number, "") def detect_format(filename, compression=""): - # TODO: implement this function - return "" + format = "" + for reader in READERS: + if create_reader(reader, compression)(filename).is_valid(): + format = reader + break + return format + +def create_reader(format, compression=""): + reader = READERS.get(format) + if compression: + reader = DECOMPRESSERS.get(compression)(reader) + return reader diff --git a/deluge/plugins/blocklist/blocklist/readers.py b/deluge/plugins/blocklist/blocklist/readers.py index c8bf7aae2..25c6d1a83 100644 --- a/deluge/plugins/blocklist/blocklist/readers.py +++ b/deluge/plugins/blocklist/blocklist/readers.py @@ -60,7 +60,7 @@ class BaseReader(object): """Ignore commented lines and blank lines""" return line.startswith('#') or not line.strip() - def is_valid(self, file): + def is_valid(self): """Determines whether file is valid for this reader""" blocklist = self.open() valid = True