comparison roundup/admin.py @ 1905:dc43e339e607

Centralised conversion of user-input data to hyperdb values (bug [SF#802405], bug [SF#817217], rfe [SF#816994])
author Richard Jones <richard@users.sourceforge.net>
date Tue, 11 Nov 2003 00:35:14 +0000
parents d2ad3309c415
children d157b9b56ebf
comparison
equal deleted inserted replaced
1904:9445caec3ff5 1905:dc43e339e607
14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
15 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" 15 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, 16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
18 # 18 #
19 # $Id: admin.py,v 1.59 2003-10-24 19:48:05 jlgijsbers Exp $ 19 # $Id: admin.py,v 1.60 2003-11-11 00:35:13 richard Exp $
20 20
21 '''Administration commands for maintaining Roundup trackers. 21 '''Administration commands for maintaining Roundup trackers.
22 ''' 22 '''
23 23
24 import sys, os, getpass, getopt, re, UserDict, shutil, rfc822 24 import sys, os, getpass, getopt, re, UserDict, shutil, rfc822
567 for classname, itemid in designators: 567 for classname, itemid in designators:
568 cl = self.get_class(classname) 568 cl = self.get_class(classname)
569 569
570 properties = cl.getprops() 570 properties = cl.getprops()
571 for key, value in props.items(): 571 for key, value in props.items():
572 proptype = properties[key] 572 try:
573 if isinstance(proptype, hyperdb.Multilink): 573 props[key] = hyperdb.rawToHyperdb(self.db, cl, itemid,
574 if value is None: 574 key, value)
575 props[key] = [] 575 except hyperdb.HyperdbValueError, message:
576 else: 576 raise UsageError, message
577 props[key] = value.split(',')
578 elif value is None:
579 continue
580 elif isinstance(proptype, hyperdb.String):
581 continue
582 elif isinstance(proptype, hyperdb.Password):
583 m = pwre.match(value)
584 if m:
585 # password is being given to us encrypted
586 p = password.Password()
587 p.scheme = m.group(1)
588 p.password = m.group(2)
589 props[key] = p
590 else:
591 props[key] = password.Password(value)
592 elif isinstance(proptype, hyperdb.Date):
593 try:
594 props[key] = date.Date(value)
595 except ValueError, message:
596 raise UsageError, '"%s": %s'%(value, message)
597 elif isinstance(proptype, hyperdb.Interval):
598 try:
599 props[key] = date.Interval(value)
600 except ValueError, message:
601 raise UsageError, '"%s": %s'%(value, message)
602 elif isinstance(proptype, hyperdb.Link):
603 props[key] = value
604 elif isinstance(proptype, hyperdb.Boolean):
605 props[key] = value.lower() in ('yes', 'true', 'on', '1')
606 elif isinstance(proptype, hyperdb.Number):
607 props[key] = float(value)
608 577
609 # try the set 578 # try the set
610 try: 579 try:
611 apply(cl.set, (itemid, ), props) 580 apply(cl.set, (itemid, ), props)
612 except (TypeError, IndexError, ValueError), message: 581 except (TypeError, IndexError, ValueError), message:
775 else: 744 else:
776 props = self.props_from_args(args[1:]) 745 props = self.props_from_args(args[1:])
777 746
778 # convert types 747 # convert types
779 for propname, value in props.items(): 748 for propname, value in props.items():
780 # get the property 749 try:
781 try: 750 props[key] = hyperdb.rawToHyperdb(self.db, cl, None,
782 proptype = properties[propname] 751 propname, value)
783 except KeyError: 752 except hyperdb.HyperdbValueError, message:
784 raise UsageError, _('%(classname)s has no property ' 753 raise UsageError, message
785 '"%(propname)s"')%locals()
786
787 if isinstance(proptype, hyperdb.Date):
788 try:
789 props[propname] = date.Date(value)
790 except ValueError, message:
791 raise UsageError, _('"%(value)s": %(message)s')%locals()
792 elif isinstance(proptype, hyperdb.Interval):
793 try:
794 props[propname] = date.Interval(value)
795 except ValueError, message:
796 raise UsageError, _('"%(value)s": %(message)s')%locals()
797 elif isinstance(proptype, hyperdb.Password):
798 m = pwre.match(value)
799 if m:
800 # password is being given to us encrypted
801 p = password.Password()
802 p.scheme = m.group(1)
803 p.password = m.group(2)
804 props[propname] = p
805 else:
806 props[propname] = password.Password(value)
807 elif isinstance(proptype, hyperdb.Multilink):
808 props[propname] = value.split(',')
809 elif isinstance(proptype, hyperdb.Boolean):
810 props[propname] = value.lower() in ('yes', 'true', 'on', '1')
811 elif isinstance(proptype, hyperdb.Number):
812 props[propname] = float(value)
813 754
814 # check for the key property 755 # check for the key property
815 propname = cl.getkey() 756 propname = cl.getkey()
816 if propname and not props.has_key(propname): 757 if propname and not props.has_key(propname):
817 raise UsageError, _('you must provide the "%(propname)s" ' 758 raise UsageError, _('you must provide the "%(propname)s" '

Roundup Issue Tracker: http://roundup-tracker.org/