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) |