From 2a0d132f8ca5bd3fa23080bee296ab02d281eb43 Mon Sep 17 00:00:00 2001 From: "A. Murat Eren" Date: Thu, 9 Jun 2005 00:06:27 +0000 Subject: [PATCH] fetcher'in trivial hali.. yuksek lisans seylerim, yuksek lisans seylerim. --- src/fetcher.py | 72 ++++++++++++++++++++++++++++++++++++++++++++ src/tests/fetch_file | 20 ++++++++++++ 2 files changed, 92 insertions(+) create mode 100755 src/fetcher.py create mode 100755 src/tests/fetch_file diff --git a/src/fetcher.py b/src/fetcher.py new file mode 100755 index 00000000..9609924b --- /dev/null +++ b/src/fetcher.py @@ -0,0 +1,72 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import urlparse +import urllib +import os +from sys import argv +from sys import exit + +class FetchError (Exception): + pass + +class Fetcher: + """Yet another Pisi tool for fetching files from various sources..""" + def __init__(self, uri): + self.uri = uri + self.filedest = "/var/tmp/pisi/cache" + self.builddir = "/var/tmp/pisi/work" + self.scheme = "file" + self.netloc = "" + self.filepath = "" + self.filename = "" + + def fetch (self): + from string import split + u = urlparse.urlparse(self.uri) + self.scheme, self.netloc, self.filepath = u[0], u[1], u[2] + self.filename = split(self.filepath, "/")[-1:][0] + + if self.filename == "": + self.err("filename error") + + if os.access(self.filedest, os.W_OK) == False: + self.err("no perm to write destination") + + scheme_err = lambda: self.err("unexpected scheme (expecting file, http or ftp)") + + actions = { + 'file': self.fetchLocalFile, + 'http': self.fetchRemoteFile, + 'ftp' : self.fetchRemoteFile + }; actions.get(self.scheme, scheme_err)() + + def fetchLocalFile (self): + from shutil import copyfile + + if os.access(self.filepath, os.F_OK) == False: + self.err("no such file or no perm to read") + + copyfile(self.filepath, self.filedest + "/" + self.filename) + + def fetchRemoteFile (self): + file = urllib.urlopen(self.uri) + dest = open(self.filedest + "/" + self.filename , "w") + dest.write(file.read()) + + def err (self, error): + raise FetchError, error + +def usage(): + print "Usage: %s URI" % argv[0] + +def main(): + if len(argv) != 2: + usage() + exit(1) + + f = Fetcher(argv[1]) + f.fetch() + +if __name__ == "__main__": + main() diff --git a/src/tests/fetch_file b/src/tests/fetch_file new file mode 100755 index 00000000..3e6b4ee9 --- /dev/null +++ b/src/tests/fetch_file @@ -0,0 +1,20 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# mkdir /var/tmp/pisi/cache +# ./fetch_file file:///etc/passwd +# ./fetch http://www.uludag.org.tr/belgeler/gelistirici/gelistirici.pdf +# ./fetch_file ftp://ftp.uludag.org.tr/pub/md5summer.exe +# ls /var/tmp/pisi/cache + +import sys +sys.path.append("..") +import fetcher + + +if len(sys.argv) == 2: + obj = fetcher.Fetcher(sys.argv[1]) + obj.fetch() +else: + sys.exit(0) +