annotate restService/redirector.py @ 40:671dd1e4bd09 default tip

minor bug
author dwinter
date Wed, 05 Mar 2014 10:20:54 +0100
parents 1eb5e3f6444b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
1 '''
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
2 redirects depending on a configuration file an index.meta purl to an viewer
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
3 Created on 01.11.2012
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
4
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
5 @author: dwinter
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
6 '''
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
7
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
8 import web
9
5f5447b3a082 repackaging
dwinter
parents: 5
diff changeset
9 import managePurls.manageIndexMetaPURLs as manageIndexMetaPURLs
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
10 import logging
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
11 import urllib
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
12 import urllib2
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
13
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
14 class redirector:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
15
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
16 viewers={} # hash mit allen viewer name --> urls
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
17 purlHandler=None
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
18 def __init__(self):
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
19 #read config file for the viewers
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
20 confFile= file("/usr/local/metadataServices/purlService/restService/viewer.config")
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
21 #confFile= file("/Users/dwinter/Documents/Projekte/MetaDataManagement/purlService/restService/viewer.config")
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
22 self.purlHandler = manageIndexMetaPURLs.IndexMetaPURLManager()
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
23
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
24 for line in confFile.readlines():
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
25 splitted=line.split(",")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
26
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
27 list=[]
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
28 if splitted[1]=="":
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
29 list.append(None) # index.meta werden von dieser einstellung nicht interpretiert
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
30 else:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
31 list.append(splitted[1])
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
32
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
33 if len(splitted)>1: # url fur image viewer
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
34 if splitted[2]=="":
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
35 list.append(None) # index.meta werden von dieser einstellung nicht interpretiert
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
36 else:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
37 list.append(splitted[2])
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
38 else:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
39 list.append(None) # null wenn keiner konfiguriert wird. TODO: handle this
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
40
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
41
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
42 self.viewers[splitted[0]]=list
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
43
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
44 def GET(self,path):
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
45
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
46
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
47 params = web.input()
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
48
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
49 for key in params.keys():
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
50 if key=="query" and params[key]=="()": #leere frage wegwerfen
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
51 del params[key]
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
52
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
53
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
54
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
55
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
56 splitted=path.split("/")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
57 if len(splitted)!=2: #pfrad sollte zwei anteile habe "flavour/purl"
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
58 raise web.notfound("not found")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
59
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
60 purl = splitted[1]
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
61 flavour = splitted[0]
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
62
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
63 if flavour not in self.viewers.keys():
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
64 raise web.notfound("no viewer for %s"%flavour)
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
65
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
66 formats = self.viewers[flavour]
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
67
12
0287aed01f2b config and minor bugs
dwinter
parents: 11
diff changeset
68 viewerWithIndexMetaFormatString = formats[0].rstrip().lstrip().replace("\n",'')
0287aed01f2b config and minor bugs
dwinter
parents: 11
diff changeset
69 viewerWithImagePathFormatString = formats[1].lstrip().lstrip().replace("\n",'')
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
70
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
71
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
72 # checke ob es einen Image path gibt
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
73 path,validity = self.purlHandler.getImagePathValidity(purl)
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
74 if path is not None and path!="":
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
75 return self.handlePath(path,validity,viewerWithImagePathFormatString,params)
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
76
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
77
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
78 path,validity = self.purlHandler.getPathValidity(purl)
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
79
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
80 if path is not None and path !="":
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
81 return self.handlePath(path,validity,viewerWithIndexMetaFormatString,params)
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
82
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
83
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
84
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
85 #handle path
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
86 def handlePath(self,path,validity,viewerFormatString,params):
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
87
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
88 if viewerFormatString is None or viewerFormatString=="":
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
89 raise web.internalerror("no viewer configure for indexMeta for this flavour")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
90
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
91 if path is None:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
92 raise web.notfound("Cannnot find a URL to this path")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
93
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
94 if validity is manageIndexMetaPURLs.PERM_NON_VALID:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
95 raise web.notfound("PURL NON VALID ANYMORE!")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
96
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
97 if validity is manageIndexMetaPURLs.TEMP_NON_VALID:
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
98 return web.notfound("PURL currently not VALID try later!")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
99
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
100
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
101
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
102
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
103 if len(params.keys())>0:
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
104 ret=[key+"="+params[key] for key in params.keys()]
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
105 viewerUrl = viewerFormatString%path+'&'+u'&'.join(ret)
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
106
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
107
15
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
108 else:
5bab6e95980e parameters added
dwinter
parents: 14
diff changeset
109 viewerUrl = viewerFormatString%path
18
1eb5e3f6444b encoding problems with the redirector solved
dwinter
parents: 15
diff changeset
110
3
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
111 raise web.redirect(viewerUrl,"302 found")
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
112
caeede0c9464 update and redirector
dwinter
parents:
diff changeset
113 if __name__ == '__main__':
11
fad73212354b wsgi addedx
dwinter
parents: 9
diff changeset
114 pass