File: DataProvider.py

package info (click to toggle)
mobyle 1.5.5%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 8,288 kB
  • sloc: python: 22,709; makefile: 35; sh: 33; ansic: 10; xml: 6
file content (39 lines) | stat: -rw-r--r-- 1,650 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
########################################################################################
#                                                                                      #
#   Author: Herve Menager,                                                             #
#   Organization:'Biological Software and Databases' Group, Institut Pasteur, Paris.   #  
#   Distributed under GPLv2 Licence. Please refer to the COPYING.LIB document.         #
#                                                                                      #
########################################################################################
import urllib #@UnresolvedImport
from logging import getLogger #@UnresolvedImport
log = getLogger(__name__)

from Mobyle.MobyleError import MobyleError


class DataProvider(object):
    """DataProvider is an object that mimicks a session or a job from which a data consumer
    (e.g., another job) gets data files.
    """
    
    @classmethod
    def get(cls, o):
        if hasattr(o,"isLocal") and hasattr(o,"getDir"):
            return o
        elif isinstance(o,basestring):
            return DataProvider(o)
        else:
            raise MobyleError("please provide either a data provider object (Session or Job-like) or a url string")
    
    def __init__(self, url):
        self.url = url
        
    def isLocal(self):
        return not(self.url.startswith('http')) # false but...
    
    def getDir(self):
        return self.url
    
    def getOutputFile(self,fileName): # mimics job's getOutputFile (called by Core toFile() methods)
        return urllib.urlopen('%s/%s' % (self.url, fileName)).read()