Changeset 49
- Timestamp:
- 07/24/07 13:09:55 (1 year ago)
- Files:
-
- projects/AsynCluster (moved) (moved from projects/asyncluster)
- projects/Consolation (moved) (moved from projects/consolation)
- projects/sAsync (moved) (moved from projects/sasync)
- projects/Twisted-Goodies (moved) (moved from projects/twisted-goodies)
- projects/Twisted-Goodies/trunk (copied) (copied from projects/twisted-goodies/trunk)
- projects/Twisted-Goodies/trunk/misc/var_www_foss.tellectual.com_index.py (modified) (5 diffs)
- projects/WinDictator (moved) (moved from projects/windictator)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
projects/Twisted-Goodies/trunk/misc/var_www_foss.tellectual.com_index.py
r48 r49 74 74 75 75 76 def projectURL(projectName): 77 """ 78 """ 79 return "/trac/%s/wiki/Start_%s" % (projectName, projectName) 80 81 82 class API(object): 83 """ 84 """ 85 def __init__(self, vhostPath, projectName, request): 86 self.packageName = projectName.lower().replace("-", "_") 87 path = "/api/%s/%s.html" % (projectName, self.packageName) 88 newURL = (request.scheme, request.host, path, '', '', '') 89 filePath = ospath.join(vhostPath, newURL[2].lstrip("/")) 90 if ospath.exists(filePath): 91 d = defer.succeed(None) 92 else: 93 tmpDir = tempfile.mkdtemp() 94 d = self.svn(tmpDir, projectName) 95 d.addCallback( 96 lambda _: self.pydoctor(tmpDir, vhostPath, projectName)) 97 d.addCallback(lambda _: shutil.rmtree(tmpDir)) 98 d.addCallback(lambda _: (resource.RedirectResource(*newURL), ())) 99 self.d = d 100 101 def executable(self, name): 102 """ 103 """ 76 class APIDocResource(resource.Resource): 77 """ 78 """ 79 def __init__(self, vhostPath, projectURLProto, projectRepoProto): 80 self.vhostPath = vhostPath 81 for name in ('projectURLProto', 'projectRepoProto'): 82 string = locals()[name] 83 if "%s" not in string: 84 raise ValueError("Invalid string prototype '%s'" % string) 85 setattr(self, name, string) 86 87 def _executable(self, name): 104 88 result = procutils.which(name)[0] 105 89 if not result: 106 90 raise ImportError("Can't locate %s executable" % name) 107 91 108 def svn(self, tmpDir, vhostPath, projectName): 109 """ 110 TODO 111 """ 112 return defer.succeed(None) 92 def locateChild(self, request, segments): 93 """ 94 """ 95 def ready(null): 96 urlPath = "/api/%s/%s" % (projectName, apiFile) 97 newURL = (request.scheme, request.host, urlPath, '', '', '') 98 return resource.RedirectResource(*newURL), () 99 100 projectName = segments[0] 101 packageName = projectName.lower().replace("-", "_") 102 if len(segments) > 1: 103 apiFile = segments[1] 104 else: 105 apiFile = "%s.html" % packageName 106 d = defer.maybeDeferred( 107 self.ensureDocsPresent, projectName, packageName, apiFile) 108 d.addCallback(ready) 109 return d 110 111 def ensureDocsPresent(self, projectName, packageName, apiFile): 112 """ 113 """ 114 filePath = ospath.join(self.vhostPath, 'api', projectName, apiFile) 115 if False and not ospath.exists(filePath): 116 tmpDir = tempfile.mkdtemp() 117 d = self.svn(tmpDir, projectName) 118 d.addCallback(lambda _: self.pydoctor(tmpDir, projectName)) 119 d.addCallback(lambda _: shutil.rmtree(tmpDir)) 120 return d 121 122 def svn(self, tmpDir, projectName): 123 """ 124 """ 125 repo = self.projectRepoProto % projectName 126 args = [ 127 "export", "-q", "--force", 128 "%s/%s/trunk" % (repo, projectName)] 129 return util.getProcessValue( 130 self._executable('svn'), args=args, path=tmpDir) 113 131 114 132 def pydoctor(self, tmpDir, vhostPath, projectName): 115 133 """ 116 TODO 117 """ 118 return 119 # TODO: Nothing below does anything yet 134 """ 135 url = self.projectURLProto % projectName 120 136 args = [ 121 "--add-package=%s" % self.packageName,137 "--add-package=%s" % packageName, 122 138 "--project-name=%s" % projectName, 123 139 "--make-html", 124 "--html-output=%s/api/%s" % ( vhostPath, projectName),125 "--project-url=%s " % projectURL(projectName)]140 "--html-output=%s/api/%s" % (self.vhostPath, projectName), 141 "--project-url=%s%s" % (url, projectName)] 126 142 return util.getProcessValue( 127 self. executable('pydoctor'), args=args, path=tmpDir)128 143 self._executable('pydoctor'), args=args, path=tmpDir) 144 129 145 130 146 class Resource(StanResource): … … 135 151 addSlash = True 136 152 wrapper = TextWrapper(break_long_words=False) 153 projectURLProto = "/trac/%s/wiki" 154 projectRepoProto = "file:///var/svn/foss/projects/%s/trunk" 137 155 138 156 def __init__(self, vhostPath): 139 157 self.vhostPath = vhostPath 158 self.apiDocResource = APIDocResource( 159 vhostPath, self.projectURLProto, self.projectRepoProto) 140 160 self.title = "Ed Suominen's Free & Open Source Software Projects" 141 161 self.style = { … … 176 196 projectDescription = " ".join( 177 197 [x.strip() for x in doc.strip().split("\n")]) 178 href = projectURL(projectName)198 href = self.projectURLProto % projectName 179 199 projectDiv = [ 180 200 T.a(id="project_link", href=href)[projectName]] … … 233 253 request.uri = request.uri.rstrip("/") + addition 234 254 235 projectName, subSegments = segments[0], segments[1:]255 projectName, subSegments = segments[0], list(segments[1:]) 236 256 if not subSegments: 237 257 extendRequest('wiki') 238 258 root = subSegments[0] 259 if root == 'api': 260 return self.apiDocResource, [projectName] + subSegments[1:] 239 261 if len(subSegments) == 1: 240 262 if root == 'wiki': … … 242 264 elif root == 'browser': 243 265 extendRequest('projects', projectName.lower(), 'trunk') 244 elif root == 'api':245 return API(self.vhostPath, projectName, request).d246 266 possibleResult = self._possibleStatic('trac', *subSegments) 247 267 if possibleResult:
