diff --git a/bin/gva b/bin/gva new file mode 100755 index 0000000..b80a95f --- /dev/null +++ b/bin/gva @@ -0,0 +1,50 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +# +# Copyright (C) 2007 by Jan Dittberner. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. +# +# Version: $Id$ + +import gnuviechadmin.cli.client +import gnuviechadmin.cli.sysuser +import sys + +def usage(): + print """%s [commandargs] + +where command is one of + + client - for creating clients + sysuser - for creating system users +""" % sys.argv[0] + +def main(): + if (sys.argv.__len__() < 2): + usage() + sys.exit() + command = sys.argv[1] + commargs = sys.argv[2:] + if command == "client": + gnuviechadmin.cli.client.ClientCli(commargs) + elif command == "sysuser": + gnuviechadmin.cli.sysuser.SysuserCli(commargs) + else: + usage() + +if __name__ == '__main__': + main() diff --git a/gnuviechadmin/cli/CliCommand.py b/gnuviechadmin/cli/CliCommand.py new file mode 100644 index 0000000..c2f994e --- /dev/null +++ b/gnuviechadmin/cli/CliCommand.py @@ -0,0 +1,81 @@ +# -*- coding: UTF-8 -*- +# +# Copyright (C) 2007 by Jan Dittberner. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. +# +# Version: $Id$ + +import getopt, sys + +class CliCommand: + """Base class for command line interface.""" + def usage(self): + """This method should print usage information for the command.""" + raise NotImplementedError + + def shortopts(self): + """This method should return an option string for the short + options for getopt.gnu_getopt(...).""" + raise NotImplementedError + + def longopts(self): + """This method should return a list of long options for + getopt.gnu_getopt(...).""" + raise NotImplementedError + + def handleoption(self, option, argument): + """This method should handle each option known to the command.""" + raise NotImplementedError + + def execute(self): + """This method is called when the command is executed.""" + raise NotImplementedError + + def checkrequired(self): + """This methode is called after handling command line options + and should check whether all required values were set.""" + raise NotImplementedError + + def __parseopts(self, args): + """This method parses the options given on the command line.""" + longopts = ["help", "verbose"] + longopts.extend(self.longopts()) + try: + opts, args = getopt.gnu_getopt( + args, + "hv" + self.shortopts(), + longopts) + except getopt.GetoptError: + self.usage() + sys.exit(2) + self.verbose = False + for o, a in opts: + if o in ("-v", "--verbose"): + self.verbose = True + if o in ("-h", "--help"): + self.usage() + sys.exit() + self.handleoption(o, a) + + def __init__(self, args): + """This initializes the command with the given command line + arguments and executes it.""" + self.__parseopts(args) + if (self.checkrequired()): + self.execute() + else: + self.usage() diff --git a/gnuviechadmin/cli/__init__.py b/gnuviechadmin/cli/__init__.py new file mode 100644 index 0000000..1fa6c57 --- /dev/null +++ b/gnuviechadmin/cli/__init__.py @@ -0,0 +1,27 @@ +# -*- coding: UTF-8 -*- +# +# Copyright (C) 2007 by Jan Dittberner. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. +# +# Version: $Id$ + +"""This is the gnuviechadmin.cli package. + +This package provides modules for the command line interface of the +gnuviechadmin server administration suite.""" + +__all__ = ["client", "sysuser"] diff --git a/gnuviechadmin/cli/client.py b/gnuviechadmin/cli/client.py new file mode 100644 index 0000000..646bd68 --- /dev/null +++ b/gnuviechadmin/cli/client.py @@ -0,0 +1,110 @@ +# -*- coding: UTF-8 -*- +# +# Copyright (C) 2007 by Jan Dittberner. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. +# +# Version: $Id$ + +import CliCommand, sys +from gnuviechadmin import client + +class ClientCli(CliCommand.CliCommand): + """Command line interface command for client creation.""" + def shortopts(self): + return "f:l:a:z:c:e:p:o:t:m:x:" + + def longopts(self): + return ["firstname=", "lastname=", "address=", "zip=", + "city=", "email=", "phone=", "address2=", "organisation=", + "country=", "title=", "mobile=", "fax="] + + def usage(self): + print """Usage: %s client [-h|--help] [-v|--verbose] + [-t |--title=<title>] + -f <firstname>|--firstname=<firstname> -l <lastname>|--lastname=<lastname> + -a <address1>|--address=<address1> [--address2=<address2>] + -z <zip>|--zip=<zip> -c <city>|--city=<city> [--country=<isocode>] + [-o <organisation>|--organisation=<organisation>] + -e <email>|--email=<email> -p <phone>|--phone=<phone> + [-m <mobile>|--mobile=<mobile>] [-x <fax>|--fax=<fax>] + +General options: + -h, --help show this usage message and exit + -v, --verbose verbose operation + +Mandatory client data options: + -f, --firstname firstname + -l, --lastname lastname + -a, --address street address + -z, --zip zip or postal code + -c, --city city or location + -e, --email contact email address + -p, --phone telephone number + +Optional client data options: + --address2 optional second line of the street address + -o, --organisation option organisation + --country country (defaults to de) + -t, --title optional title + -m, --mobile optional mobile number + -x, --fax optional fax number +""" % sys.argv[0] + + def handleoption(self, o, a): + if o in ("-f", "--firstname"): + self.data["firstname"] = a + elif o in ("-l", "--lastname"): + self.data["lastname"] = a + elif o in ("-a", "--address"): + self.data["address1"] = a + elif o in ("-z", "--zip"): + self.data["zip"] = a + elif o in ("-c", "--city"): + self.data["city"] = a + elif o == "--country": + self.data["country"] = a + elif o in ("-t", "--title"): + self.data["title"] = a + elif o in ("-m", "--mobile"): + self.data["mobile"] = a + elif o in ("-e", "--email"): + self.data["email"] = a + elif o in ("-o", "--organisation"): + self.data["organisation"] = a + elif o in ("-x", "--fax"): + self.data["fax"] = a + elif o in ("-p", "--phone"): + self.data["phone"] = a + + def checkrequired(self): + required = ['firstname', 'lastname', 'address1', 'zip', 'city', + 'phone', 'email'] + if self.verbose: + print self.data + for req in required: + if not req in self.data: + return False + return True + + def execute(self): + myclient = client.create(**self.data) + if self.verbose: + print myclient + + def __init__(self, argv): + self.data = {} + CliCommand.CliCommand.__init__(self, argv) diff --git a/gnuviechadmin/cli/sysuser.py b/gnuviechadmin/cli/sysuser.py new file mode 100644 index 0000000..2ae2839 --- /dev/null +++ b/gnuviechadmin/cli/sysuser.py @@ -0,0 +1 @@ +pass diff --git a/gnuviechadmin/client.py b/gnuviechadmin/client.py index 561e628..3cf1852 100644 --- a/gnuviechadmin/client.py +++ b/gnuviechadmin/client.py @@ -49,28 +49,6 @@ class Client(object): if missingfields: raise MissingFieldsError(missingfields) - # def __repr__(self): - # return """Client (Id %(clientid)d): - # Name: %(title)s %(firstname)s %(lastname)s - # Address: %(address1)s - # %(address2)s - # %(zip)s %(city)s (%(country)s) - # Phone: %(phone)s - # Mobile: %(mobile)s - # Fax: %(fax)s - # Email: %(email)s""" % ({'clientid' : self.clientid, - # 'title' : self.title, - # 'firstname' : self.firstname, - # 'lastname' : self.lastname, - # 'address1' : self.address1, - # 'address2' : self.address2, - # 'zip' : self.zip, - # 'city' : self.city, - # 'country' : self.country, - # 'phone' : self.phone, - # 'mobile' : self.mobile, - # 'fax' : self.fax, - # 'email' : self.email}) def __repr__(self): return "%(clientid)d,%(firstname)s,%(lastname)s,%(email)s" % ( {'clientid' : self.clientid, 'firstname' : self.firstname, diff --git a/gnuviechadmin/tables.py b/gnuviechadmin/tables.py index f973f48..f254a7d 100644 --- a/gnuviechadmin/tables.py +++ b/gnuviechadmin/tables.py @@ -20,17 +20,11 @@ # Version: $Id$ from sqlalchemy import * -from pkg_resources import Requirement, resource_filename import ConfigParser, os config = ConfigParser.ConfigParser() -config.readfp( - open(resource_filename(Requirement.parse('gnuviechadmin'), - 'gnuviechadmin/defaults.cfg'))) -config.read([ - resource_filename(Requirement.parse('gnuviechadmin'), - 'gnuviechadmin/gva.cfg'), - os.path.expanduser('~/.gva.cfg')]) +config.readfp(open('gnuviechadmin/defaults.cfg')) +config.read(['gnuviechadmin/gva.cfg', os.path.expanduser('~/.gva.cfg')]) meta = BoundMetaData(config.get('database', 'uri')) client_table = Table( @@ -64,4 +58,3 @@ sysuser_table = Table( Column('lastchange', DateTime, default=func.now()) ) sysuser_table.create(checkfirst=True) -