~romaimperator/keryx/devel

« back to all changes in this revision

Viewing changes to keryx.py

  • Committer: Chris Oliver
  • Date: 2009-10-02 17:17:40 UTC
  • Revision ID: excid3@gmail.com-20091002171740-ig3e2m6zlfcogrye
Added initial interactive CLI prototype

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
__supports__  = '0'
8
8
__author__    = 'Buran Ayuthia'
9
9
 
 
10
 
10
11
import logging
11
12
import os
12
13
from sys import argv, exit
13
14
from optparse import OptionParser, OptionGroup
14
15
import libkeryx
15
16
 
 
17
 
16
18
"""
17
19
    * 1 apt-get commands     (For 1.0)
18
20
          o 1.1 keryx update
43
45
          o 2.13 keryx dotty
44
46
"""
45
47
 
 
48
 
46
49
FORMAT = '%(asctime)s %(levelname)-8s %(message)s'
47
50
DATE = '%a, %d %b %Y %H:%M:%S'
48
51
db_filename = os.path.join(os.path.dirname(__file__), 'keryx.db')
49
52
 
 
53
 
50
54
class Keryx:
51
55
    def __init__(self):
52
56
        self.command = ''
53
57
        self.project = ''
54
58
        self.wx_gui = False
55
59
 
 
60
 
56
61
    def __parse_command(self, command):
57
62
        pass
58
63
 
 
64
 
59
65
    def parse_options(self, args):
60
66
        command_list = ['create', 'update', 'download', 'remove', \
61
67
                        'clean', 'showpkg', 'dump', 'unmet', 'search', \
115
121
 
116
122
        if len(arguments) == 1:
117
123
            self.wx_gui = True
118
 
 
119
 
        if len(arguments) < 3:
120
 
            parser.error('Missing the project name or command')
121
 
 
122
 
        if argv[2] not in command_list:
123
 
            print('Unknown command \'%s\'' % args[2])
124
 
            # The following is used to remove the None at the end
125
 
            # of the parser.print_help data
126
 
            help_msg = str(parser.print_help())
127
 
            help_msg = help_msg.split('\n')
128
 
            for index in range(len(help_msg) - 2):
129
 
                print help_msg[index]
130
 
            exit(1)
131
 
 
132
 
        self.command = args[2]
 
124
            
 
125
        if len(arguments) < 2:
 
126
            parser.error('Missing the project name')
 
127
        
 
128
        if len(arguments) > 2:
 
129
            self.command = None
 
130
            if argv[2] not in command_list:
 
131
                print('Unknown command \'%s\'' % args[2])
 
132
                # The following is used to remove the None at the end
 
133
                # of the parser.print_help data
 
134
                help_msg = str(parser.print_help())
 
135
                help_msg = help_msg.split('\n')
 
136
                for index in range(len(help_msg) - 2):
 
137
                    print help_msg[index]
 
138
                exit(1)
 
139
            else:
 
140
                self.command = args[2]
 
141
        
133
142
        self.project = args[1]
134
143
 
 
144
 
135
145
    def execute(self):
136
146
        if self.wx_gui:
137
147
            print 'call GUI version'
 
148
            # If GUI fails, launch KeryxCLI
 
149
            cli = KeryxCLI(self.project)
 
150
            cli.main()
138
151
        else:
 
152
            if not self.command:
 
153
                cli = KeryxCLI(self.project)
 
154
                cli.main()
139
155
            if self.command == 'create':
140
156
                definition = libkeryx.get_definition(self.project, db_filename)
141
157
                definition.Create()
143
159
                definition = libkeryx.get_definition(self.project, db_filename)
144
160
                definition.UpdateInternet()
145
161
 
 
162
 
 
163
class KeryxCLI():
 
164
    """Keryx Interactive CLI"""
 
165
    
 
166
    
 
167
    def __init__(self, name):
 
168
        """Set project for CLI usage"""
 
169
        self.set_project(name)
 
170
        
 
171
        
 
172
    def set_project(self, name):
 
173
        """Sets project to name"""
 
174
        self.name = name
 
175
        self.project = libkeryx.get_definition(name, db_filename)
 
176
        # Check self.project.Verify() and notify user if project is not created
 
177
 
 
178
 
 
179
    def main(self):
 
180
        """Main loop for Keryx interactive CLI"""
 
181
        print "\nKeryx %s Interactive Command Line Interface\n" % __version__
 
182
        
 
183
        command = ""
 
184
        while command != "exit":
 
185
            command = raw_input("%s:%s>" % (__appname__, self.name))
 
186
            if command.startswith("open"):
 
187
                name = command.split("open")[1].strip()
 
188
                self.set_project(name)
 
189
            elif command == "create":
 
190
                self.project.Create()
 
191
            elif command == "update":
 
192
                self.project.UpdateInternet()
 
193
 
 
194
                        
 
195
 
146
196
# keryx <project-name> <command(s)> <option(s)>
147
197
if __name__ == '__main__':
148
198
    keryx = Keryx()