* src/plugins/TestcaseGenerator.py: More randomisation; new test options
* src/RelLib.py (Source.get_text_data_list): Add missing fields svn: r5335
This commit is contained in:
parent
cf616ebcfb
commit
8a52407a00
@ -1,3 +1,7 @@
|
||||
2005-10-19 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/plugins/TestcaseGenerator.py: More randomisation; new test options
|
||||
* src/RelLib.py (Source.get_text_data_list): Add missing fields
|
||||
|
||||
2005-10-18 Don Allingham <don@gramps-project.org>
|
||||
* src/Report.py: bumped the maximum generations to 999 from 31
|
||||
|
||||
|
@ -2770,7 +2770,9 @@ class Source(PrimaryObject,MediaBase,NoteBase):
|
||||
@return: Returns the list of all textual attributes of the object.
|
||||
@rtype: list
|
||||
"""
|
||||
return [self.title,self.author,self.pubinfo,self.abbrev,self.gramps_id]
|
||||
return [self.title,self.author,self.pubinfo,self.abbrev,self.gramps_id]\
|
||||
+ self.datamap.keys() + self.datamap.values()
|
||||
|
||||
|
||||
def get_text_data_child_list(self):
|
||||
"""
|
||||
|
@ -81,6 +81,9 @@ class TestcaseGenerator(Tool.Tool):
|
||||
self.parents_todo = []
|
||||
self.person_dates = {}
|
||||
self.generated_sources = []
|
||||
self.generated_media = []
|
||||
self.generated_places = []
|
||||
self.text_serial_number = 1
|
||||
|
||||
self.random_marrtype_list = (RelLib.Family.UNMARRIED, RelLib.Family.CIVIL_UNION,
|
||||
RelLib.Family.UNKNOWN, RelLib.Family.OTHER)
|
||||
@ -154,6 +157,14 @@ class TestcaseGenerator(Tool.Tool):
|
||||
self.check_longnames.set_active( self.options.handler.options_dict['long_names'])
|
||||
self.top.vbox.pack_start(self.check_longnames,0,0,5)
|
||||
|
||||
self.check_specialchars = gtk.CheckButton( _("Add special characters"))
|
||||
self.check_specialchars.set_active( self.options.handler.options_dict['specialchars'])
|
||||
self.top.vbox.pack_start(self.check_specialchars,0,0,5)
|
||||
|
||||
self.check_serial = gtk.CheckButton( _("Add serial number"))
|
||||
self.check_serial.set_active( self.options.handler.options_dict['add_serial'])
|
||||
self.top.vbox.pack_start(self.check_serial,0,0,5)
|
||||
|
||||
self.entry_count = gtk.Entry()
|
||||
self.entry_count.set_text( unicode( self.options.handler.options_dict['person_count']))
|
||||
self.top.vbox.pack_start(self.entry_count,0,0,5)
|
||||
@ -174,6 +185,10 @@ class TestcaseGenerator(Tool.Tool):
|
||||
self.check_trans.get_active())
|
||||
self.options.handler.options_dict['long_names'] = int(
|
||||
self.check_longnames.get_active())
|
||||
self.options.handler.options_dict['specialchars'] = int(
|
||||
self.check_specialchars.get_active())
|
||||
self.options.handler.options_dict['add_serial'] = int(
|
||||
self.check_serial.get_active())
|
||||
self.options.handler.options_dict['person_count'] = int(
|
||||
self.entry_count.get_text())
|
||||
self.top.destroy()
|
||||
@ -315,68 +330,10 @@ class TestcaseGenerator(Tool.Tool):
|
||||
if self.options.handler.options_dict['bugs']\
|
||||
or self.options.handler.options_dict['dates']\
|
||||
or self.options.handler.options_dict['persons']:
|
||||
# bootstrap random source and media
|
||||
self.rand_source()
|
||||
self.rand_media()
|
||||
|
||||
self.default_url = RelLib.Url()
|
||||
self.default_url.set_path("http://www.gramps-project.org/")
|
||||
self.default_url.set_description( self.rand_text(self.SHORT))
|
||||
self.default_source = RelLib.Source()
|
||||
self.default_source.set_title( self.rand_text(self.SHORT))
|
||||
self.default_source.set_author( self.rand_text(self.SHORT))
|
||||
self.default_source.set_publication_info( self.rand_text(self.LONG))
|
||||
self.default_source.set_abbreviation( self.rand_text(self.SHORT))
|
||||
self.default_source.set_note( self.rand_text(self.NOTE))
|
||||
self.default_source.set_data_item( self.rand_text(self.SHORT), self.rand_text(self.SHORT))
|
||||
self.db.add_source(self.default_source, self.trans)
|
||||
self.generated_sources.append( self.default_source.get_handle())
|
||||
self.default_attribute = RelLib.Attribute()
|
||||
self.default_attribute.set_type( self.rand_text(self.SHORT))
|
||||
self.default_attribute.set_value( self.rand_text(self.SHORT))
|
||||
self.default_attribute.set_note( self.rand_text(self.NOTE))
|
||||
self.default_attribute.add_source_reference( self.rand_sourceref())
|
||||
(y,d) = self.rand_date()
|
||||
self.default_media = RelLib.MediaObject()
|
||||
self.default_media.set_description( self.rand_text(self.SHORT))
|
||||
self.default_media.set_path("/tmp/TestcaseGenerator.png")
|
||||
self.default_media.set_mime_type("image/png")
|
||||
self.default_media.set_note( self.rand_text(self.NOTE))
|
||||
self.default_media.set_date_object(d)
|
||||
self.default_media.add_source_reference( self.rand_sourceref())
|
||||
self.default_media.add_attribute(self.default_attribute)
|
||||
self.db.add_object(self.default_media, self.trans)
|
||||
self.default_mediaref = RelLib.MediaRef()
|
||||
self.default_mediaref.set_reference_handle(self.default_media.get_handle())
|
||||
self.default_mediaref.set_note( self.rand_text(self.NOTE))
|
||||
self.default_mediaref.add_source_reference( self.rand_sourceref())
|
||||
self.default_mediaref.add_attribute(self.default_attribute)
|
||||
self.default_source.add_media_reference(self.default_mediaref)
|
||||
self.db.commit_source(self.default_source, self.trans)
|
||||
loc = RelLib.Location()
|
||||
loc.set_city( self.rand_text(self.SHORT))
|
||||
loc.set_postal_code( self.rand_text(self.SHORT))
|
||||
loc.set_phone( self.rand_text(self.SHORT))
|
||||
loc.set_parish( self.rand_text(self.SHORT))
|
||||
loc.set_county( self.rand_text(self.SHORT))
|
||||
loc.set_state( self.rand_text(self.SHORT))
|
||||
loc.set_country( self.rand_text(self.SHORT))
|
||||
self.default_place = RelLib.Place()
|
||||
self.default_place.set_main_location( loc)
|
||||
self.default_place.set_title( self.rand_text(self.SHORT))
|
||||
self.default_place.set_note( self.rand_text(self.NOTE))
|
||||
self.default_place.set_longitude( self.rand_text(self.SHORT))
|
||||
self.default_place.set_latitude( self.rand_text(self.SHORT))
|
||||
self.default_place.add_source_reference( self.rand_sourceref())
|
||||
self.default_place.add_media_reference(self.default_mediaref)
|
||||
self.default_place.add_url(self.default_url)
|
||||
self.db.add_place(self.default_place, self.trans)
|
||||
self.default_address = RelLib.Address()
|
||||
self.default_address.set_street( self.rand_text(self.SHORT))
|
||||
self.default_address.set_phone( self.rand_text(self.SHORT))
|
||||
self.default_address.set_city( self.rand_text(self.SHORT))
|
||||
self.default_address.set_state( self.rand_text(self.SHORT))
|
||||
self.default_address.set_country( self.rand_text(self.SHORT))
|
||||
self.default_address.set_postal_code( self.rand_text(self.SHORT))
|
||||
self.default_address.set_note( self.rand_text(self.NOTE))
|
||||
self.default_address.add_source_reference( self.rand_sourceref())
|
||||
|
||||
if self.options.handler.options_dict['bugs']:
|
||||
self.generate_broken_relations()
|
||||
@ -784,8 +741,6 @@ class TestcaseGenerator(Tool.Tool):
|
||||
name = RelLib.Name()
|
||||
name.set_privacy( randint(0,5) == 1)
|
||||
(firstname,lastname) = self.rand_name(lastname, gender)
|
||||
if alive_in_year:
|
||||
firstname = "%s (%d)" % (firstname, alive_in_year)
|
||||
name.set_first_name(firstname)
|
||||
name.set_surname(lastname)
|
||||
name.add_source_reference( self.rand_sourceref())
|
||||
@ -796,6 +751,16 @@ class TestcaseGenerator(Tool.Tool):
|
||||
alt_name = RelLib.Name(name)
|
||||
alt_name.set_privacy( randint(0,5) == 1)
|
||||
firstname2 = firstname.replace("m", "n").replace("l", "i").replace("b", "d")
|
||||
if firstname2 != firstname:
|
||||
alt_name.set_first_name( firstname2)
|
||||
alt_name.set_title( self.rand_text(self.SHORT))
|
||||
alt_name.set_patronymic( self.rand_text(self.FIRSTNAME_MALE))
|
||||
alt_name.set_surname_prefix( self.rand_text(self.SHORT))
|
||||
alt_name.set_suffix( self.rand_text(self.SHORT))
|
||||
alt_name.add_source_reference( self.rand_sourceref())
|
||||
alt_name.set_note( self.rand_text(self.NOTE))
|
||||
np.add_alternate_name( alt_name)
|
||||
firstname2 = firstname.replace("a", "e").replace("o", "u").replace("r", "p")
|
||||
if firstname2 != firstname:
|
||||
alt_name.set_first_name( firstname2)
|
||||
alt_name.set_title( self.rand_text(self.SHORT))
|
||||
@ -815,26 +780,22 @@ class TestcaseGenerator(Tool.Tool):
|
||||
# birth
|
||||
if randint(0,1) == 1:
|
||||
(birth_year, e) = self.rand_event( "Birth", by,by)
|
||||
self.db.add_event(e, self.trans)
|
||||
np.set_birth_handle(e.get_handle())
|
||||
|
||||
# baptism
|
||||
if randint(0,1) == 1:
|
||||
(bapt_year, e) = self.rand_event( choice( ("Baptism", "Christening")), by, by+2)
|
||||
self.db.add_event(e, self.trans)
|
||||
np.add_event_handle(e.get_handle())
|
||||
|
||||
# death
|
||||
death_year = None
|
||||
if randint(0,1) == 1:
|
||||
(death_year, e) = self.rand_event( "Death", dy,dy)
|
||||
self.db.add_event(e, self.trans)
|
||||
np.set_death_handle(e.get_handle())
|
||||
|
||||
# burial
|
||||
if randint(0,1) == 1:
|
||||
(bur_year, e) = self.rand_event( choice( ("Burial", "Cremation")), dy, dy+2)
|
||||
self.db.add_event(e, self.trans)
|
||||
np.add_event_handle(e.get_handle())
|
||||
|
||||
#LDS
|
||||
@ -974,35 +935,22 @@ class TestcaseGenerator(Tool.Tool):
|
||||
self.commit_transaction() # COMMIT TRANSACTION STEP
|
||||
|
||||
def add_defaults(self,object,ref_text = ""):
|
||||
object.add_source_reference( self.rand_sourceref())
|
||||
object.add_media_reference(self.default_mediaref)
|
||||
e = RelLib.Event()
|
||||
e.set_privacy( randint(0,5) == 1)
|
||||
e.set_name( self.rand_text(self.SHORT))
|
||||
e.set_note( self.rand_text(self.NOTE))
|
||||
e.set_cause( self.rand_text(self.SHORT))
|
||||
e.set_description( self.rand_text(self.SHORT))
|
||||
e.add_source_reference( self.rand_sourceref())
|
||||
mref = RelLib.MediaRef(self.default_mediaref)
|
||||
mref.set_privacy( randint(0,5) == 1)
|
||||
e.add_media_reference(mref)
|
||||
e.set_place_handle(self.default_place.get_handle())
|
||||
(year,d) = self.rand_date()
|
||||
e.set_date_object( d)
|
||||
self.db.add_event(e, self.trans)
|
||||
object.add_event_handle(e.get_handle())
|
||||
attr = RelLib.Attribute(self.default_attribute)
|
||||
attr.set_privacy( randint(0,5) == 1)
|
||||
object.add_attribute( attr)
|
||||
while randint(0,1) == 1:
|
||||
object.add_source_reference( self.rand_sourceref())
|
||||
while randint(0,1) == 1:
|
||||
object.add_media_reference( self.rand_mediaref())
|
||||
while randint(0,1) == 1:
|
||||
(year,e) = self.rand_event()
|
||||
object.add_event_handle( e.get_handle())
|
||||
while randint(0,1) == 1:
|
||||
object.add_attribute( self.rand_attribute())
|
||||
try:
|
||||
url = RelLib.Url(self.default_url)
|
||||
url.set_privacy( randint(0,5) == 1)
|
||||
object.add_url(url)
|
||||
addr = RelLib.Address(self.default_address)
|
||||
addr.set_privacy( randint(0,5) == 1)
|
||||
object.add_address(addr)
|
||||
while randint(0,1) == 1:
|
||||
object.add_url( self.rand_url())
|
||||
while randint(0,1) == 1:
|
||||
object.add_address( self.rand_address())
|
||||
except AttributeError:
|
||||
pass # family does not have an url
|
||||
pass # family does not have an url and address
|
||||
object.set_note( self.rand_text(self.NOTE))
|
||||
|
||||
def rand_name( self, lastname=None, gender=None):
|
||||
@ -1065,7 +1013,7 @@ class TestcaseGenerator(Tool.Tool):
|
||||
def rand_event( self, type=None, start=None, end=None):
|
||||
e = RelLib.Event()
|
||||
if not type:
|
||||
type = choice( ("Census", "Degree", "Emigration", "Immigration"))
|
||||
type = choice( (self.rand_text(self.SHORT), "Census", "Degree", "Emigration", "Immigration"))
|
||||
e.set_name( type)
|
||||
if randint(0,1) == 1:
|
||||
e.set_note( self.rand_text(self.NOTE))
|
||||
@ -1073,14 +1021,12 @@ class TestcaseGenerator(Tool.Tool):
|
||||
e.set_cause( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
e.set_description( self.rand_text(self.LONG))
|
||||
if randint(0,1) == 1:
|
||||
while randint(0,1) == 1:
|
||||
e.add_source_reference( self.rand_sourceref())
|
||||
while randint(0,1) == 1:
|
||||
e.add_media_reference( self.rand_mediaref())
|
||||
if randint(0,1) == 1:
|
||||
mref = self.default_mediaref
|
||||
mref.set_privacy( randint(0,5) == 1)
|
||||
e.add_media_reference( mref)
|
||||
if randint(0,1) == 1:
|
||||
e.set_place_handle(self.default_place.get_handle())
|
||||
e.set_place_handle( self.rand_place())
|
||||
(year, d) = self.rand_date( start, end)
|
||||
e.set_date_object( d)
|
||||
if randint(0,5) == 1:
|
||||
@ -1095,6 +1041,7 @@ class TestcaseGenerator(Tool.Tool):
|
||||
w.set_type( RelLib.Event.NAME)
|
||||
w.set_value( "%s %s" % self.rand_name())
|
||||
e.add_witness(w)
|
||||
self.db.add_event( e, self.trans)
|
||||
return (year, e)
|
||||
|
||||
def rand_ldsord( self, status_list):
|
||||
@ -1104,8 +1051,8 @@ class TestcaseGenerator(Tool.Tool):
|
||||
if randint(0,1) == 1:
|
||||
lds.set_temple( choice( const.lds_temple_to_abrev.keys()))
|
||||
if randint(0,1) == 1:
|
||||
lds.set_place_handle( self.default_place.get_handle())
|
||||
if randint(0,1) == 1:
|
||||
lds.set_place_handle( self.rand_place())
|
||||
while randint(0,1) == 1:
|
||||
lds.add_source_reference( self.rand_sourceref())
|
||||
if randint(0,1) == 1:
|
||||
lds.set_note( self.rand_text(self.NOTE))
|
||||
@ -1114,7 +1061,28 @@ class TestcaseGenerator(Tool.Tool):
|
||||
lds.set_date_object( d)
|
||||
return lds
|
||||
|
||||
def rand_source( self):
|
||||
source = RelLib.Source()
|
||||
source.set_title( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
source.set_author( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
source.set_publication_info( self.rand_text(self.LONG))
|
||||
if randint(0,1) == 1:
|
||||
source.set_abbreviation( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
source.set_note( self.rand_text(self.NOTE))
|
||||
while randint(0,1) == 1:
|
||||
source.set_data_item( self.rand_text(self.SHORT), self.rand_text(self.SHORT))
|
||||
while randint(0,1) == 1 and self.generated_media:
|
||||
source.add_media_reference( self.rand_mediaref())
|
||||
self.db.add_source( source, self.trans)
|
||||
self.generated_sources.append( source.get_handle())
|
||||
return source
|
||||
|
||||
def rand_sourceref( self):
|
||||
if not self.generated_sources or randint(0,10) == 1:
|
||||
self.rand_source()
|
||||
sref = RelLib.SourceRef()
|
||||
sref.set_base_handle( choice( self.generated_sources))
|
||||
if randint(0,1) == 1:
|
||||
@ -1130,6 +1098,117 @@ class TestcaseGenerator(Tool.Tool):
|
||||
sref.set_confidence_level( choice( self.random_confidence_list))
|
||||
return sref
|
||||
|
||||
def rand_media( self):
|
||||
media = RelLib.MediaObject()
|
||||
media.set_description( self.rand_text(self.SHORT))
|
||||
media.set_path("/tmp/TestcaseGenerator.png")
|
||||
media.set_mime_type("image/png")
|
||||
if randint(0,1) == 1:
|
||||
media.set_note( self.rand_text(self.NOTE))
|
||||
if randint(0,1) == 1:
|
||||
(year,d) = self.rand_date()
|
||||
media.set_date_object(d)
|
||||
while randint(0,1) == 1:
|
||||
media.add_source_reference( self.rand_sourceref())
|
||||
while randint(0,1) == 1:
|
||||
media.add_attribute( self.rand_attribute())
|
||||
self.db.add_object( media, self.trans)
|
||||
self.generated_media.append( media.get_handle())
|
||||
return media
|
||||
|
||||
def rand_mediaref( self):
|
||||
if not self.generated_media or randint(0,10) == 1:
|
||||
self.rand_media()
|
||||
mref = RelLib.MediaRef()
|
||||
mref.set_reference_handle( choice( self.generated_media))
|
||||
if randint(0,1) == 1:
|
||||
mref.set_note( self.rand_text(self.NOTE))
|
||||
while randint(0,1) == 1:
|
||||
mref.add_source_reference( self.rand_sourceref())
|
||||
while randint(0,1) == 1:
|
||||
mref.add_attribute( self.rand_attribute())
|
||||
mref.set_privacy( randint(0,5) == 1)
|
||||
return mref
|
||||
|
||||
def rand_address( self):
|
||||
addr = RelLib.Address()
|
||||
if randint(0,1) == 1:
|
||||
addr.set_street( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_phone( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_city( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_state( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_country( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_postal_code( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
addr.set_note( self.rand_text(self.NOTE))
|
||||
while randint(0,1) == 1:
|
||||
addr.add_source_reference( self.rand_sourceref())
|
||||
addr.set_privacy( randint(0,5) == 1)
|
||||
return addr
|
||||
|
||||
def rand_url( self):
|
||||
url = RelLib.Url()
|
||||
url.set_path("http://www.gramps-project.org/")
|
||||
url.set_description( self.rand_text(self.SHORT))
|
||||
url.set_privacy( randint(0,5) == 1)
|
||||
return url
|
||||
|
||||
def rand_attribute( self):
|
||||
attr = RelLib.Attribute()
|
||||
attr.set_type( self.rand_text(self.SHORT))
|
||||
attr.set_value( self.rand_text(self.SHORT))
|
||||
attr.set_note( self.rand_text(self.NOTE))
|
||||
while randint(0,1) == 1:
|
||||
attr.add_source_reference( self.rand_sourceref())
|
||||
attr.set_privacy( randint(0,5) == 1)
|
||||
return attr
|
||||
|
||||
def rand_location( self):
|
||||
loc = RelLib.Location()
|
||||
if randint(0,1) == 1:
|
||||
loc.set_city( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_postal_code( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_phone( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_parish( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_county( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_state( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
loc.set_country( self.rand_text(self.SHORT))
|
||||
return loc
|
||||
|
||||
def rand_place( self):
|
||||
if not self.generated_places or randint(0,10) == 1:
|
||||
place = RelLib.Place()
|
||||
place.set_main_location( self.rand_location())
|
||||
while randint(0,1) == 1:
|
||||
place.add_alternate_locations( self.rand_location())
|
||||
place.set_title( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
place.set_note( self.rand_text(self.NOTE))
|
||||
if randint(0,1) == 1:
|
||||
place.set_longitude( self.rand_text(self.SHORT))
|
||||
if randint(0,1) == 1:
|
||||
place.set_latitude( self.rand_text(self.SHORT))
|
||||
while randint(0,1) == 1:
|
||||
place.add_source_reference( self.rand_sourceref())
|
||||
while randint(0,1) == 1:
|
||||
place.add_media_reference( self.rand_mediaref())
|
||||
if randint(0,1) == 1:
|
||||
place.add_url( self.rand_url())
|
||||
self.db.add_place( place, self.trans)
|
||||
self.generated_places.append( place.get_handle())
|
||||
return choice( self.generated_places)
|
||||
|
||||
def rand_text(self, type=None):
|
||||
# for lastnamesnames
|
||||
syllables1 = ["sa","li","na","ma","no","re","mi","cha","ki","du","ba","ku","el"]
|
||||
@ -1144,7 +1223,12 @@ class TestcaseGenerator(Tool.Tool):
|
||||
minsyllables = 2
|
||||
maxsyllables = 5
|
||||
|
||||
result = u"ä<ö&ü%ß"
|
||||
result = ""
|
||||
if self.options.handler.options_dict['specialchars']:
|
||||
result = result + u"ä<ö&ü%ß'\""
|
||||
if self.options.handler.options_dict['add_serial']:
|
||||
result = result + "#+#%06d#-#" % self.text_serial_number
|
||||
self.text_serial_number = self.text_serial_number + 1
|
||||
|
||||
if not type:
|
||||
type = self.SHORT
|
||||
@ -1251,6 +1335,8 @@ class TestcaseGeneratorOptions(Tool.ToolOptions):
|
||||
'person_count' : 2000,
|
||||
'no_trans' : 0,
|
||||
'long_names' : 0,
|
||||
'specialchars' : 0,
|
||||
'add_serial' : 0,
|
||||
}
|
||||
self.options_help = {
|
||||
'bugs' : ("=0/1",
|
||||
@ -1276,6 +1362,14 @@ class TestcaseGeneratorOptions(Tool.ToolOptions):
|
||||
"Wheter to create short or long names",
|
||||
["Short names","Long names"],
|
||||
True),
|
||||
'specialchars' : ("=0/1",
|
||||
"Wheter to ass some special characters to every text field",
|
||||
["No special characters","Add special characters"],
|
||||
True),
|
||||
'add_serial' : ("=0/1",
|
||||
"Wheter to add a serial number to every text field",
|
||||
["No serial","Add serial number"],
|
||||
True),
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user