source: soft/build_system/build_system/repsys/tags/V1_6_17_1/RepSys/cgi/soapserver.py @ 1

Last change on this file since 1 was 1, checked in by fasma, 12 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 2.5 KB
Line 
1#!/usr/bin/python
2from RepSys import Error, config
3from RepSys.rpmutil import get_srpm
4from RepSys.cgiutil import CgiError, get_targets
5import sys
6import os
7
8try:
9    import NINZ.dispatch
10except ImportError:
11    NINZ = None
12
13class SoapIface:
14    def author_email(self, author):
15        return config.get("users", author)
16
17    def submit_package(self, packageurl, packagerev, targetname):
18        username = os.environ.get("REMOTE_USER")
19        packager = config.get("users", username)
20        if not packager:
21            raise CgiError, "your email was not found"
22        elif not packagerev:
23            raise CgiError, "no revision provided"
24        elif not targetname:
25            raise CgiError, "no target provided"
26        else:
27            targetname = targetname.lower()
28            for target in get_targets():
29                if target.name.lower() == targetname:
30                    break
31            else:
32                raise CgiError, "target not found"
33            try:
34                tmp = int(packagerev)
35            except ValueError:
36                raise CgiError, "invalid revision provided"
37            for allowed in target.allowed:
38                if packageurl.startswith(allowed):
39                    break
40            else:
41                raise CgiError, "%s is not allowed for this target" \
42                                % packageurl
43            get_srpm(packageurl,
44                     revision=packagerev,
45                     targetdirs=target.target,
46                     packager=packager,
47                     revname=1,
48                     svnlog=1,
49                     scripts=target.scripts)
50        return 1
51
52    def submit_targets(self):
53        return [x.name for x in get_targets()]
54
55TEMPLATE = """\
56Content-type: text/html
57
58<html>
59<head>
60<title>Repository system SOAP server</title>
61</head>
62<body bgcolor="white">
63<br>
64<hr>
65<center>
66<b>%(message)s</b>
67</center>
68<hr>
69</body>
70</html>
71"""
72
73def show(msg="", error=0):
74    if error:
75        msg = '<font color="red">%s</font>' % msg
76    print TEMPLATE % {"message":msg}
77
78def main():
79    if not os.environ.has_key('REQUEST_METHOD'):
80        sys.stderr.write("error: this program is meant to be used as a cgi\n")
81        sys.exit(1)
82    if not NINZ:
83        show("NINZ is not properly installed in this system", error=1)
84        sys.exit(1)
85    username = os.environ.get("REMOTE_USER")
86    method = os.environ.get("REQUEST_METHOD")
87    if not username or method != "POST":
88        show("This is a SOAP interface!", error=1)
89        sys.exit(1)
90
91    NINZ.dispatch.AsCGI(modules=(SoapIface(),))
92
93# vim:et:ts=4:sw=4
Note: See TracBrowser for help on using the repository browser.