Commit c81d7647a8166e9ef7c30d26f144f3c81ea10423
Committed by
mykhaly
1 parent
34dd7c34
Optimization initial_data and upd belowThreshold mods
Showing
3 changed files
with
102 additions
and
159 deletions
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 | from datetime import timedelta |
| 3 | 3 | from faker import Factory |
| 4 | 4 | from munch import munchify |
| 5 | +from uuid import uuid4 | |
| 5 | 6 | from tempfile import NamedTemporaryFile |
| 6 | 7 | from .local_time import get_now |
| 7 | 8 | from op_faker import OP_Provider |
| ... | ... | @@ -46,7 +47,7 @@ def create_fake_doc(): |
| 46 | 47 | return tf.name |
| 47 | 48 | |
| 48 | 49 | |
| 49 | -def test_tender_data(intervals, periods=("enquiry", "tender")): | |
| 50 | +def test_tender_data(intervals, periods=("enquiry", "tender"), number_of_lots=0, meat=False): | |
| 50 | 51 | now = get_now() |
| 51 | 52 | value_amount = round(random.uniform(3000, 99999999999.99), 2) # max value equals to budget of Ukraine in hryvnias |
| 52 | 53 | data = { |
| ... | ... | @@ -71,8 +72,6 @@ def test_tender_data(intervals, periods=("enquiry", "tender")): |
| 71 | 72 | "items": [] |
| 72 | 73 | } |
| 73 | 74 | data["procuringEntity"]["kind"] = "other" |
| 74 | - new_item = test_item_data() | |
| 75 | - data["items"].append(new_item) | |
| 76 | 75 | if data.get("mode") == "test": |
| 77 | 76 | data["title"] = u"[ТЕСТУВАННЯ] {}".format(data["title"]) |
| 78 | 77 | data["title_en"] = u"[TESTING] {}".format(data["title_en"]) |
| ... | ... | @@ -85,6 +84,54 @@ def test_tender_data(intervals, periods=("enquiry", "tender")): |
| 85 | 84 | inc_dt += timedelta(minutes=intervals[period_name][i]) |
| 86 | 85 | period_dict[period_name + "Period"][j + "Date"] = inc_dt.isoformat() |
| 87 | 86 | data.update(period_dict) |
| 87 | + number_of_lots = int(number_of_lots) | |
| 88 | + cpv_group = fake.cpv()[:3] | |
| 89 | + if number_of_lots: | |
| 90 | + data['lots'] = [] | |
| 91 | + for lot_number in range(number_of_lots): | |
| 92 | + lot_id = uuid4().hex | |
| 93 | + new_lot = test_lot_data(data['value']['amount']) | |
| 94 | + data['lots'].append(new_lot) | |
| 95 | + data['lots'][lot_number]['id'] = lot_id | |
| 96 | + for i in range(fake.random_int(min=1, max=5)): | |
| 97 | + new_item = test_item_data(cpv_group) | |
| 98 | + data['items'].append(new_item) | |
| 99 | + data['items'][lot_number]['relatedLot'] = lot_id | |
| 100 | + value_amount = sum(lot['value']['amount'] for lot in data['lots']) | |
| 101 | + minimalStep = min(lot['minimalStep']['amount'] for lot in data['lots']) | |
| 102 | + data['value']['amount'] = value_amount | |
| 103 | + data['minimalStep']['amount'] = minimalStep | |
| 104 | + else: | |
| 105 | + for i in range(fake.random_int(min=1, max=5)): | |
| 106 | + new_item = test_item_data(cpv_group) | |
| 107 | + data['items'].append(new_item) | |
| 108 | + if meat: | |
| 109 | + data['features'] = [ | |
| 110 | + { | |
| 111 | + "code": uuid4().hex, | |
| 112 | + "featureOf": "tenderer", | |
| 113 | + "title": field_with_id("f", fake.title()), | |
| 114 | + "description": fake.description(), | |
| 115 | + "enum": [ | |
| 116 | + { | |
| 117 | + "value": 0.15, | |
| 118 | + "title": fake.word() | |
| 119 | + }, | |
| 120 | + { | |
| 121 | + "value": 0.10, | |
| 122 | + "title": fake.word() | |
| 123 | + }, | |
| 124 | + { | |
| 125 | + "value": 0.05, | |
| 126 | + "title": fake.word() | |
| 127 | + }, | |
| 128 | + { | |
| 129 | + "value": 0, | |
| 130 | + "title": fake.word() | |
| 131 | + } | |
| 132 | + ] | |
| 133 | + } | |
| 134 | + ] | |
| 88 | 135 | return munchify(data) |
| 89 | 136 | |
| 90 | 137 | |
| ... | ... | @@ -119,79 +166,6 @@ def test_tender_data_limited(intervals, procurement_method_type): |
| 119 | 166 | return munchify(data) |
| 120 | 167 | |
| 121 | 168 | |
| 122 | -def test_tender_data_multiple_items(intervals): | |
| 123 | - t_data = test_tender_data(intervals) | |
| 124 | - for _ in range(4): | |
| 125 | - new_item = test_item_data() | |
| 126 | - t_data['items'].append(new_item) | |
| 127 | - return munchify(t_data) | |
| 128 | - | |
| 129 | - | |
| 130 | -def test_tender_data_multiple_lots(intervals): | |
| 131 | - tender = test_tender_data(intervals) | |
| 132 | - first_lot_id = "3c8f387879de4c38957402dbdb8b31af" | |
| 133 | - tender['items'][0]['relatedLot'] = first_lot_id | |
| 134 | - tender['lots'] = [test_lot_data(tender['value']['amount'])] | |
| 135 | - tender['lots'][0]['id'] = first_lot_id | |
| 136 | - max_lot_value_amount = max([lot['value']['amount'] for lot in tender['lots']]) | |
| 137 | - tender['value']['amount'] = max_lot_value_amount | |
| 138 | - return munchify(tender) | |
| 139 | - | |
| 140 | - | |
| 141 | -def test_tender_data_meat(intervals): | |
| 142 | - tender = munchify(test_tender_data(intervals)) | |
| 143 | - item_id = "edd0032574bf4402877ad5f362df225a" | |
| 144 | - tender['items'][0].id = item_id | |
| 145 | - tender.features = [ | |
| 146 | - { | |
| 147 | - "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
| 148 | - "featureOf": "tenderer", | |
| 149 | - "title": field_with_id("f", fake.title()), | |
| 150 | - "description": fake.description(), | |
| 151 | - "enum": [ | |
| 152 | - { | |
| 153 | - "value": 0.15, | |
| 154 | - "title": fake.word() | |
| 155 | - }, | |
| 156 | - { | |
| 157 | - "value": 0.1, | |
| 158 | - "title": fake.word() | |
| 159 | - }, | |
| 160 | - { | |
| 161 | - "value": 0.05, | |
| 162 | - "title": fake.word() | |
| 163 | - }, | |
| 164 | - { | |
| 165 | - "value": 0, | |
| 166 | - "title": fake.word() | |
| 167 | - } | |
| 168 | - ] | |
| 169 | - }, | |
| 170 | - { | |
| 171 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
| 172 | - "featureOf": "item", | |
| 173 | - "relatedItem": item_id, | |
| 174 | - "title": field_with_id("f", fake.title()), | |
| 175 | - "description": fake.description(), | |
| 176 | - "enum": [ | |
| 177 | - { | |
| 178 | - "value": 0.05, | |
| 179 | - "title": fake.word() | |
| 180 | - }, | |
| 181 | - { | |
| 182 | - "value": 0.01, | |
| 183 | - "title": fake.word() | |
| 184 | - }, | |
| 185 | - { | |
| 186 | - "value": 0, | |
| 187 | - "title": fake.word() | |
| 188 | - } | |
| 189 | - ] | |
| 190 | - } | |
| 191 | - ] | |
| 192 | - return munchify(tender) | |
| 193 | - | |
| 194 | - | |
| 195 | 169 | def test_question_data(): |
| 196 | 170 | return munchify({ |
| 197 | 171 | "data": { |
| ... | ... | @@ -202,6 +176,11 @@ def test_question_data(): |
| 202 | 176 | }) |
| 203 | 177 | |
| 204 | 178 | |
| 179 | +def test_related_question(question, relation, obj_id): | |
| 180 | + question.data.update({"questionOf": relation, "relatedItem": obj_id}) | |
| 181 | + return munchify(question) | |
| 182 | + | |
| 183 | + | |
| 205 | 184 | def test_question_answer_data(): |
| 206 | 185 | return munchify({ |
| 207 | 186 | "data": { |
| ... | ... | @@ -263,7 +242,7 @@ def test_complaint_reply_data(): |
| 263 | 242 | }) |
| 264 | 243 | |
| 265 | 244 | |
| 266 | -def test_bid_data(mode, max_value_amount): | |
| 245 | +def test_bid_data(): | |
| 267 | 246 | bid = munchify({ |
| 268 | 247 | "data": { |
| 269 | 248 | "tenderers": [ |
| ... | ... | @@ -273,35 +252,9 @@ def test_bid_data(mode, max_value_amount): |
| 273 | 252 | }) |
| 274 | 253 | bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName) |
| 275 | 254 | bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName) |
| 276 | - if 'open' in mode: | |
| 277 | - bid.data['selfEligible'] = True | |
| 278 | - bid.data['selfQualified'] = True | |
| 279 | - if mode == 'multiLot': | |
| 280 | - bid.data.lotValues = list() | |
| 281 | - for _ in range(2): | |
| 282 | - bid.data.lotValues.append(test_bid_value(max_value_amount)) | |
| 283 | - else: | |
| 284 | - bid.data.update(test_bid_value(max_value_amount)) | |
| 285 | - if mode == 'meat': | |
| 286 | - bid.data.update(test_bid_params()) | |
| 287 | 255 | return bid |
| 288 | 256 | |
| 289 | 257 | |
| 290 | -def test_bid_params(): | |
| 291 | - return munchify({ | |
| 292 | - "parameters": [ | |
| 293 | - { | |
| 294 | - "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
| 295 | - "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)) | |
| 296 | - }, | |
| 297 | - { | |
| 298 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
| 299 | - "value": fake.random_element(elements=(0.05, 0.01, 0)) | |
| 300 | - } | |
| 301 | - ] | |
| 302 | - }) | |
| 303 | - | |
| 304 | - | |
| 305 | 258 | def test_bid_value(max_value_amount): |
| 306 | 259 | return munchify({ |
| 307 | 260 | "value": { |
| ... | ... | @@ -354,23 +307,6 @@ def test_invalid_features_data(): |
| 354 | 307 | "title": fake.word() |
| 355 | 308 | } |
| 356 | 309 | ] |
| 357 | - }, | |
| 358 | - { | |
| 359 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
| 360 | - "featureOf": "item", | |
| 361 | - "relatedItem": "edd0032574bf4402877ad5f362df225a", | |
| 362 | - "title": fake.title(), | |
| 363 | - "description": fake.description(), | |
| 364 | - "enum": [ | |
| 365 | - { | |
| 366 | - "value": 0.35, | |
| 367 | - "title": fake.word() | |
| 368 | - }, | |
| 369 | - { | |
| 370 | - "value": 0, | |
| 371 | - "title": fake.word() | |
| 372 | - } | |
| 373 | - ] | |
| 374 | 310 | } |
| 375 | 311 | ] |
| 376 | 312 | |
| ... | ... | @@ -400,11 +336,6 @@ def test_lot_document_data(document, lot_id): |
| 400 | 336 | return munchify(document) |
| 401 | 337 | |
| 402 | 338 | |
| 403 | -def test_lot_question_data(question, lot_id): | |
| 404 | - question.data.update({"questionOf": "lot", "relatedItem": lot_id}) | |
| 405 | - return munchify(question) | |
| 406 | - | |
| 407 | - | |
| 408 | 339 | def test_lot_complaint_data(complaint, lot_id): |
| 409 | 340 | complaint.data.update({"complaintOf": "lot", "relatedItem": lot_id}) |
| 410 | 341 | return munchify(complaint) |
| ... | ... | @@ -418,12 +349,12 @@ def test_tender_data_openua(intervals): |
| 418 | 349 | # We should not provide any values for `enquiryPeriod` when creating |
| 419 | 350 | # an openUA or openEU procedure. That field should not be present at all. |
| 420 | 351 | # Therefore, we pass a nondefault list of periods to `test_tender_data()`. |
| 421 | - t_data = test_tender_data(intervals, periods=('tender',)) | |
| 422 | - t_data['procurementMethodType'] = 'aboveThresholdUA' | |
| 423 | - t_data['procurementMethodDetails'] = 'quick, ' \ | |
| 352 | + data = test_tender_data(intervals, periods=('tender',)) | |
| 353 | + data['procurementMethodType'] = 'aboveThresholdUA' | |
| 354 | + data['procurementMethodDetails'] = 'quick, ' \ | |
| 424 | 355 | 'accelerator={}'.format(accelerator) |
| 425 | - t_data['procuringEntity']['kind'] = 'general' | |
| 426 | - return t_data | |
| 356 | + data['procuringEntity']['kind'] = 'general' | |
| 357 | + return data | |
| 427 | 358 | |
| 428 | 359 | |
| 429 | 360 | def test_tender_data_openeu(intervals): |
| ... | ... | @@ -434,15 +365,15 @@ def test_tender_data_openeu(intervals): |
| 434 | 365 | # We should not provide any values for `enquiryPeriod` when creating |
| 435 | 366 | # an openUA or openEU procedure. That field should not be present at all. |
| 436 | 367 | # Therefore, we pass a nondefault list of periods to `test_tender_data()`. |
| 437 | - t_data = test_tender_data(intervals, periods=('tender',)) | |
| 438 | - t_data['procurementMethodType'] = 'aboveThresholdEU' | |
| 439 | - t_data['procurementMethodDetails'] = 'quick, ' \ | |
| 368 | + data = test_tender_data(intervals, periods=('tender',)) | |
| 369 | + data['procurementMethodType'] = 'aboveThresholdEU' | |
| 370 | + data['procurementMethodDetails'] = 'quick, ' \ | |
| 440 | 371 | 'accelerator={}'.format(accelerator) |
| 441 | - t_data['title_en'] = "[TESTING]" | |
| 442 | - for item_number, item in enumerate(t_data['items']): | |
| 372 | + data['title_en'] = "[TESTING]" | |
| 373 | + for item_number, item in enumerate(data['items']): | |
| 443 | 374 | item['description_en'] = "Test item #{}".format(item_number) |
| 444 | - t_data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() | |
| 445 | - t_data['procuringEntity']['contactPoint']['availableLanguage'] = "en" | |
| 446 | - t_data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" | |
| 447 | - t_data['procuringEntity']['kind'] = 'general' | |
| 448 | - return t_data | |
| 375 | + data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() | |
| 376 | + data['procuringEntity']['contactPoint']['availableLanguage'] = "en" | |
| 377 | + data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" | |
| 378 | + data['procuringEntity']['kind'] = 'general' | |
| 379 | + return data | ... | ... |
| ... | ... | @@ -240,9 +240,9 @@ Get Broker Property By Username |
| 240 | 240 | |
| 241 | 241 | |
| 242 | 242 | Підготувати дані для подання пропозиції |
| 243 | - [Arguments] ${max_value_amount} | |
| 244 | - ${bid_data}= test_bid_data ${mode} ${max_value_amount} | |
| 245 | - [Return] ${bid_data} | |
| 243 | + [Arguments] ${username} | |
| 244 | + ${bid}= generate_test_bid_data ${USERS.users['${username}'].tender_data} | |
| 245 | + [Return] ${bid} | |
| 246 | 246 | |
| 247 | 247 | |
| 248 | 248 | Підготувати дані про постачальника | ... | ... |
| ... | ... | @@ -19,7 +19,9 @@ from robot.output.loggerhelper import Message |
| 19 | 19 | from .initial_data import ( |
| 20 | 20 | create_fake_doc, |
| 21 | 21 | create_fake_sentence, |
| 22 | + fake, | |
| 22 | 23 | test_bid_data, |
| 24 | + test_bid_value, | |
| 23 | 25 | test_claim_answer_data, |
| 24 | 26 | test_claim_data, |
| 25 | 27 | test_complaint_data, |
| ... | ... | @@ -30,17 +32,14 @@ from .initial_data import ( |
| 30 | 32 | test_lot_complaint_data, |
| 31 | 33 | test_lot_data, |
| 32 | 34 | test_lot_document_data, |
| 33 | - test_lot_question_data, | |
| 35 | + test_related_question, | |
| 34 | 36 | test_question_answer_data, |
| 35 | 37 | test_question_data, |
| 36 | 38 | test_supplier_data, |
| 37 | 39 | test_tender_data, |
| 38 | 40 | test_tender_data_limited, |
| 39 | - test_tender_data_meat, | |
| 40 | - test_tender_data_multiple_items, | |
| 41 | - test_tender_data_multiple_lots, | |
| 42 | 41 | test_tender_data_openeu, |
| 43 | - test_tender_data_openua | |
| 42 | + test_tender_data_openua, | |
| 44 | 43 | ) |
| 45 | 44 | from barbecue import chef |
| 46 | 45 | from restkit import request |
| ... | ... | @@ -263,7 +262,7 @@ def compute_intrs(brokers_data, used_brokers): |
| 263 | 262 | return result |
| 264 | 263 | |
| 265 | 264 | |
| 266 | -def prepare_test_tender_data(procedure_intervals, mode): | |
| 265 | +def prepare_test_tender_data(procedure_intervals, mode, number_of_lots=0, meat=False): | |
| 267 | 266 | # Get actual intervals by mode name |
| 268 | 267 | if mode in procedure_intervals: |
| 269 | 268 | intervals = procedure_intervals[mode] |
| ... | ... | @@ -281,14 +280,7 @@ def prepare_test_tender_data(procedure_intervals, mode): |
| 281 | 280 | else: |
| 282 | 281 | assert 'accelerator' not in intervals.keys(), \ |
| 283 | 282 | "Accelerator is not available for mode '{0}'".format(mode) |
| 284 | - | |
| 285 | - if mode == 'meat': | |
| 286 | - return munchify({'data': test_tender_data_meat(intervals)}) | |
| 287 | - elif mode == 'multiItem': | |
| 288 | - return munchify({'data': test_tender_data_multiple_items(intervals)}) | |
| 289 | - elif mode == 'multiLot': | |
| 290 | - return munchify({'data': test_tender_data_multiple_lots(intervals)}) | |
| 291 | - elif mode == 'negotiation': | |
| 283 | + if mode == 'negotiation': | |
| 292 | 284 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation')}) |
| 293 | 285 | elif mode == 'negotiation.quick': |
| 294 | 286 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation.quick')}) |
| ... | ... | @@ -298,8 +290,8 @@ def prepare_test_tender_data(procedure_intervals, mode): |
| 298 | 290 | return munchify({'data': test_tender_data_openua(intervals)}) |
| 299 | 291 | elif mode == 'reporting': |
| 300 | 292 | return munchify({'data': test_tender_data_limited(intervals, 'reporting')}) |
| 301 | - elif mode == 'single': | |
| 302 | - return munchify({'data': test_tender_data(intervals)}) | |
| 293 | + elif mode == 'belowThreshold': | |
| 294 | + return munchify({'data': test_tender_data(intervals, number_of_lots=number_of_lots, meat=meat)}) | |
| 303 | 295 | raise ValueError("Invalid mode for prepare_test_tender_data") |
| 304 | 296 | |
| 305 | 297 | |
| ... | ... | @@ -432,6 +424,26 @@ def get_document_index_by_id(data, document_id): |
| 432 | 424 | raise IndexError |
| 433 | 425 | |
| 434 | 426 | |
| 427 | +def generate_test_bid_data(tender_data): | |
| 428 | + bid = test_bid_data() | |
| 429 | + if 'open' in tender_data['data']['mode']: | |
| 430 | + bid.data.selfEligible = True | |
| 431 | + bid.data.selfQualified = True | |
| 432 | + if 'lots' in tender_data['data']: | |
| 433 | + bid.data.lotValues = [] | |
| 434 | + for lot in tender_data['data']['lots']: | |
| 435 | + value = test_bid_value(lot['value']['amount']) | |
| 436 | + value['relatedLot'] = lot['id'] | |
| 437 | + bid.data.lotValues.append(value) | |
| 438 | + else: | |
| 439 | + bid.data.update(test_bid_value(tender_data['data']['value']['amount'])) | |
| 440 | + if 'features' in tender_data['data']: | |
| 441 | + bid.data.parameters = [] | |
| 442 | + for feature in tender_data['data']['features']: | |
| 443 | + parameter = {"value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)), "code": feature['code']} | |
| 444 | + bid.data.parameters.append(parameter) | |
| 445 | + return bid | |
| 446 | + | |
| 435 | 447 | |
| 436 | 448 | # GUI Frontends common |
| 437 | 449 | def add_data_for_gui_frontends(tender_data): | ... | ... |
Please
register
or
login
to post a comment