Changeset 6989:5e3a3537a647 in orange


Ignore:
Timestamp:
09/27/10 13:45:04 (4 years ago)
Author:
markotoplak
Branch:
default
Convert:
c7a2aa8eaf3a9babf76166dfb9030de05f2de100
Message:

orngServerFiles: now it works with python 2.6.5 too. ready to be upgraded to poster 0.6.0 (as a replacement for urllib2_file). code cleanups.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngServerFiles.py

    r6538 r6989  
    4848socket.setdefaulttimeout(timeout) 
    4949 
    50 import urllib2_file 
    5150import urllib2 
     51import base64 
     52 
     53import urllib2_file #switch to poster in the future 
     54#import poster.streaminghttp as psh 
     55#import poster.encode 
    5256 
    5357import os 
     
    5761import tempfile 
    5862 
    59 #defserver = "localhost/" 
     63#defserver = "localhost:9999/" 
    6064defserver = "asterix.fri.uni-lj.si/orngServerFiles/" 
    6165 
     
    133137        self.searchinfo = None 
    134138 
    135     def installOpener(self): 
    136         #import time; t = time.time() 
    137         passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
    138         passman.add_password("orngFileServer", self.secureroot, str(self.username), str(self.password)) 
    139         authhandler = urllib2.HTTPBasicAuthHandler(passman) 
    140         opener = urllib2.build_opener(authhandler) 
    141         urllib2.install_opener(opener) 
    142         #print "TIME", time.time() - t 
     139    def getOpener(self): 
     140        #commented lines are for poster 0.6 
     141        #handlers = [psh.StreamingHTTPHandler, psh.StreamingHTTPRedirectHandler, psh.StreamingHTTPSHandler] 
     142        #opener = urllib2.build_opener(*handlers) 
     143        opener = urllib2.build_opener() 
     144        return opener 
    143145  
    144146    def upload(self, domain, filename, file, title="", tags=[]): 
     
    149151 
    150152        data = {'filename': filename, 'domain': domain, 'title':title, 'tags': ";".join(tags), 'data':  file} 
    151         return self._secopen('upload', data) 
     153        return self._open('upload', data) 
    152154 
    153155    def create_domain(self, domain): 
    154156        """Create the domain in the server repository.""" 
    155         return self._secopen('createdomain', { 'domain': domain }) 
     157        return self._open('createdomain', { 'domain': domain }) 
    156158 
    157159    def remove_domain(self, domain, force=False): 
     
    161163        if force: 
    162164            data['force'] = True 
    163         return self._secopen('removedomain', data) 
     165        return self._open('removedomain', data) 
    164166 
    165167    def remove(self, domain, filename): 
    166168        """Remove a file from the server repository.""" 
    167         return self._secopen('remove', { 'domain': domain, 'filename': filename }) 
     169        return self._open('remove', { 'domain': domain, 'filename': filename }) 
    168170 
    169171    def unprotect(self, domain, filename): 
    170172        """Unprotect a file in the server repository.""" 
    171         return self._secopen('protect', { 'domain': domain, 'filename': filename, 'access_code': '0' }) 
     173        return self._open('protect', { 'domain': domain, 'filename': filename, 'access_code': '0' }) 
    172174 
    173175    def protect(self, domain, filename, access_code="1"): 
    174176        """Protect a file in the server repository.""" 
    175         return self._secopen('protect', { 'domain': domain, 'filename': filename, 'access_code': access_code }) 
     177        return self._open('protect', { 'domain': domain, 'filename': filename, 'access_code': access_code }) 
    176178 
    177179    def protection(self, domain, filename): 
    178180        """Return 1 if the file in the server is protected, else return 0.""" 
    179         return self._secopen('protection', { 'domain': domain, 'filename': filename }) 
    180  
    181     def listfiles(self, *args, **kwargs): 
    182         """List all files from the server repositotory that reside in specific domain.""" 
    183         if self._authen(): return self.seclist(*args, **kwargs) 
    184         else: return self.publist(*args, **kwargs) 
    185  
    186     def listdomains(self, *args, **kwargs): 
    187         """List the domains from the server repository.""" 
    188         if self._authen(): return self.seclistdomains(*args, **kwargs) 
    189         else: return self.publistdomains(*args, **kwargs) 
     181        return self._open('protection', { 'domain': domain, 'filename': filename }) 
     182     
     183    def listfiles(self, domain): 
     184        return _parseList(self._open('list', { 'domain': domain })) 
     185 
     186    def listdomains(self): 
     187        return _parseList(self._open('listdomains', {})) 
    190188 
    191189    def downloadFH(self, *args, **kwargs): 
     
    243241        return _search(self.searchinfo, sstrings, **kwargs) 
    244242 
    245     def info(self, *args, **kwargs): 
    246         if self._authen(): return self.secinfo(*args, **kwargs) 
    247         else: return self.pubinfo(*args, **kwargs) 
    248  
    249     def pubinfo(self, domain, filename): 
    250         return _parseFileInfo(self._pubopen('info', { 'domain': domain, 'filename': filename })) 
    251  
    252     def pubdownloadFH(self, domain, filename): 
    253         return self._pubhandle('download', { 'domain': domain, 'filename': filename }) 
    254  
    255     def publist(self, domain): 
    256         return _parseList(self._pubopen('list', { 'domain': domain })) 
    257  
    258     def secinfo(self, domain, filename): 
    259         return _parseFileInfo(self._secopen('info', { 'domain': domain, 'filename': filename })) 
    260  
    261     def secdownloadFH(self, domain, filename): 
    262         return self._sechandle('download', { 'domain': domain, 'filename': filename }) 
    263  
    264     def seclist(self, domain): 
    265         return _parseList(self._secopen('list', { 'domain': domain })) 
    266  
    267     def seclistdomains(self): 
    268         return _parseList(self._secopen('listdomains', {})) 
    269  
    270     def publistdomains(self): 
    271         return _parseList(self._pubopen('listdomains', {})) 
    272  
    273     def allinfo(self, *args, **kwargs): 
    274         if self._authen(): return self.secallinfo(*args, **kwargs) 
    275         else: return self.puballinfo(*args, **kwargs) 
    276  
    277     def puballinfo(self, domain): 
    278         return _parseAllFileInfo(self._pubopen('allinfo', { 'domain': domain })) 
    279  
    280     def secallinfo(self, domain): 
    281         return _parseAllFileInfo(self._secopen('allinfo', { 'domain': domain })) 
     243    def info(self, domain, filename): 
     244        return _parseFileInfo(self._open('info', { 'domain': domain, 'filename': filename })) 
     245 
     246    def downloadFH(self, domain, filename): 
     247        return self._handle('download', { 'domain': domain, 'filename': filename }) 
     248 
     249    def list(self, domain): 
     250        return _parseList(self._open('list', { 'domain': domain })) 
     251 
     252    def listdomains(self): 
     253        return _parseList(self._open('listdomains', {})) 
     254 
     255    def allinfo(self, domain): 
     256        return _parseAllFileInfo(self._open('allinfo', { 'domain': domain })) 
     257 
     258    def index(self): 
     259        return self._open('index', {}) 
    282260 
    283261    def _authen(self): 
     
    290268            return False 
    291269 
    292  
    293270    def _server_request(self, root, command, data, repeat=2): 
    294271        def do(): 
    295             self.installOpener() 
     272            opener = self.getOpener() 
     273            #the next lines work for poster 0.6.0 
     274            #datagen, headers = poster.encode.multipart_encode(data) 
     275            #request = urllib2.Request(root+command, datagen, headers) 
     276 
    296277            if data: 
    297                 return urllib2.urlopen(root + command, data) 
     278                request = urllib2.Request(root+command, data) 
    298279            else: 
    299                 return urllib2.urlopen(root + command) 
    300  
     280                request = urllib2.Request(root+command) 
     281 
     282            #directy add authorization headers 
     283            if self._authen(): 
     284                auth = base64.encodestring('%s:%s' % (self.username, self.password))[:-1]  
     285                request.add_header('Authorization', 'Basic %s' % auth ) # Add Auth header to request 
     286             
     287            return opener.open(request) 
    301288        if repeat <= 0: 
    302             do() 
     289            return do() 
    303290        else: 
    304291            try: 
     
    306293            except: 
    307294                return self._server_request(root, command, data, repeat=repeat-1) 
    308  
    309     def _sechandle(self, command, data): 
    310         return self._server_request(self.secureroot, command, data) 
    311   
    312     def _pubhandle(self, command, data): 
     295     
     296    def _handle(self, command, data): 
    313297        data2 = self.addAccessCode(data) 
    314         return self._server_request(self.publicroot, command, data2) 
    315  
    316     def _secopen(self, command, data): 
    317         return self._sechandle(command, data).read() 
     298        addr = self.publicroot 
     299        if self._authen(): 
     300            addr = self.secureroot 
     301        return self._server_request(addr, command, data) 
     302 
     303    def _open(self, command, data): 
     304        return self._handle(command, data).read() 
    318305 
    319306    def addAccessCode(self, data): 
     
    322309            data["access_code"] = self.access_code 
    323310        return data 
    324  
    325     def _pubopen(self, command, data): 
    326         return self._pubhandle(command, data).read() 
    327  
    328311 
    329312def download(domain, filename, serverfiles=None, callback=None, extract=True, verbose=True): 
     
    666649        print info('test', l) 
    667650 
     651    s = ServerFiles() 
     652 
     653    print "testing connection - public" 
     654    print "AN", s.index() 
     655 
    668656    #login as an authenticated user 
    669657    s = ServerFiles(username=myusername, password=mypassword) 
    670658     
     659    """ 
    671660    print "Server search 1" 
    672661    import time 
     
    678667    print s.search(["human", "ke"]) 
    679668    print time.time() - t  
     669    """ 
     670 
     671    print "testing connection - private" 
     672    print "AN", s.index() 
    680673 
    681674    #create domain 
     
    686679        pass 
    687680 
     681    files = s.listfiles('test') 
     682    print "Files in test", files 
     683 
     684    print "uploading" 
     685 
    688686    #upload this file - save it by a different name 
    689687    s.upload('test', 'osf-test.py', 'orngServerFiles.py', title="NT", tags=["fkdl","fdl"]) 
    690688    #make it public 
    691  
    692689    s.unprotect('test', 'osf-test.py') 
    693690 
     
    705702        print s.downloadFH('test', f).read()[:100] #show first 100 characters 
    706703        print "--------------------------------------" 
    707         s.download('test', f, 'a.mkv') 
    708704 
    709705    #login as an authenticated user 
     
    715711 
    716712    s = ServerFiles() 
    717     print s.allinfo("demo2") 
    718713 
    719714    print s.listdomains() 
     715 
    720716 
    721717if __name__ == '__main__': 
Note: See TracChangeset for help on using the changeset viewer.