devtools/fill.py
changeset 10609 e2d8e81bfe68
parent 10589 7c23b7de2b8d
child 10688 fa29f3628a1b
equal deleted inserted replaced
10608:7fc548d9dd8e 10609:e2d8e81bfe68
    25 from random import randint, choice
    25 from random import randint, choice
    26 from copy import deepcopy
    26 from copy import deepcopy
    27 from datetime import datetime, date, time, timedelta
    27 from datetime import datetime, date, time, timedelta
    28 from decimal import Decimal
    28 from decimal import Decimal
    29 
    29 
       
    30 from six.moves import range
       
    31 
    30 from logilab.common import attrdict
    32 from logilab.common import attrdict
    31 from logilab.mtconverter import xml_escape
    33 from logilab.mtconverter import xml_escape
    32 from yams.constraints import (SizeConstraint, StaticVocabularyConstraint,
    34 from yams.constraints import (SizeConstraint, StaticVocabularyConstraint,
    33                               IntervalBoundConstraint, BoundaryConstraint,
    35                               IntervalBoundConstraint, BoundaryConstraint,
    34                               Attribute, actual_value)
    36                               Attribute, actual_value)
   285     :type choice_func: function
   287     :type choice_func: function
   286     :param choice_func: a function that takes an entity type, an attrname and
   288     :param choice_func: a function that takes an entity type, an attrname and
   287                         returns acceptable values for this attribute
   289                         returns acceptable values for this attribute
   288     """
   290     """
   289     queries = []
   291     queries = []
   290     for index in xrange(entity_num):
   292     for index in range(entity_num):
   291         restrictions = []
   293         restrictions = []
   292         args = {}
   294         args = {}
   293         for attrname, value in make_entity(etype, schema, vreg, index, choice_func).items():
   295         for attrname, value in make_entity(etype, schema, vreg, index, choice_func).items():
   294             restrictions.append('X %s %%(%s)s' % (attrname, attrname))
   296             restrictions.append('X %s %%(%s)s' % (attrname, attrname))
   295             args[attrname] = value
   297             args[attrname] = value
   507                 if not subjeids:
   509                 if not subjeids:
   508                     check_card_satisfied(objcard, objeids, subj, rschema, obj)
   510                     check_card_satisfied(objcard, objeids, subj, rschema, obj)
   509                     break
   511                     break
   510         else:
   512         else:
   511             # FIXME: 20 should be read from config
   513             # FIXME: 20 should be read from config
   512             subjeidsiter = [choice(tuple(subjeids)) for i in xrange(min(len(subjeids), 20))]
   514             subjeidsiter = [choice(tuple(subjeids)) for i in range(min(len(subjeids), 20))]
   513             objeidsiter = [choice(tuple(objeids)) for i in xrange(min(len(objeids), 20))]
   515             objeidsiter = [choice(tuple(objeids)) for i in range(min(len(objeids), 20))]
   514             for subjeid, objeid in zip(subjeidsiter, objeidsiter):
   516             for subjeid, objeid in zip(subjeidsiter, objeidsiter):
   515                 if subjeid != objeid and not (subjeid, objeid) in used:
   517                 if subjeid != objeid and not (subjeid, objeid) in used:
   516                     used.add( (subjeid, objeid) )
   518                     used.add( (subjeid, objeid) )
   517                     yield q, self.qargs(subjeids, objeids, subjcard, objcard,
   519                     yield q, self.qargs(subjeids, objeids, subjcard, objcard,
   518                                         subjeid, objeid)
   520                                         subjeid, objeid)