Commit a5bef35d5d43cea0cac46683e257623f67e409da
Merge pull request #46 from Leits/openua
Add test for openUA tenders
Showing
4 changed files
with
285 additions
and
1 deletions
| @@ -77,6 +77,9 @@ Library openprocurement_client_helper.py | @@ -77,6 +77,9 @@ Library openprocurement_client_helper.py | ||
| 77 | [Arguments] ${username} ${tender_uid} ${fieldname} ${fieldvalue} | 77 | [Arguments] ${username} ${tender_uid} ${fieldname} ${fieldvalue} |
| 78 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uid} | 78 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uid} |
| 79 | Set_To_Object ${tender.data} ${fieldname} ${fieldvalue} | 79 | Set_To_Object ${tender.data} ${fieldname} ${fieldvalue} |
| 80 | + ${procurementMethodType}= Get From Object ${tender.data} procurementMethodType | ||
| 81 | + Run Keyword If '${procurementMethodType}' == 'aboveThresholdUA' | ||
| 82 | + ... Remove From Dictionary ${tender.data} enquiryPeriod | ||
| 80 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | 83 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
| 81 | ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | 84 | ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
| 82 | Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue} | 85 | Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue} |
| @@ -579,3 +579,16 @@ def test_lot_complaint_data(complaint, lot_id="3c8f387879de4c38957402dbdb8b31af" | @@ -579,3 +579,16 @@ def test_lot_complaint_data(complaint, lot_id="3c8f387879de4c38957402dbdb8b31af" | ||
| 579 | lot_complaint = {"complaintOf": "lot", "relatedItem": lot_id} | 579 | lot_complaint = {"complaintOf": "lot", "relatedItem": lot_id} |
| 580 | lot_complaint.update(complaint.data) | 580 | lot_complaint.update(complaint.data) |
| 581 | return munchify({"data": lot_complaint}) | 581 | return munchify({"data": lot_complaint}) |
| 582 | + | ||
| 583 | + | ||
| 584 | +def test_tender_data_openua(intervals, accelerator=0): | ||
| 585 | + t_data = test_tender_data(intervals) | ||
| 586 | + now = get_now() | ||
| 587 | + t_data['procurementMethodType'] = 'aboveThresholdUA' | ||
| 588 | + t_data['procurementMethodDetails'] = 'quick, accelerator={}'.format(accelerator) | ||
| 589 | + t_data["tenderPeriod"] = { | ||
| 590 | + "startDate": (now).isoformat(), | ||
| 591 | + "endDate": (now + timedelta(minutes=15)).isoformat() | ||
| 592 | + } | ||
| 593 | + del t_data["enquiryPeriod"] | ||
| 594 | + return t_data |
op_robot_tests/tests_files/openUA.robot
0 → 100644
| 1 | +*** Settings *** | ||
| 2 | +Resource keywords.robot | ||
| 3 | +Resource resource.robot | ||
| 4 | +Suite Setup TestSuiteSetup | ||
| 5 | +Suite Teardown Close all browsers | ||
| 6 | + | ||
| 7 | +*** Variables *** | ||
| 8 | +${mode} openua | ||
| 9 | + | ||
| 10 | +${role} viewer | ||
| 11 | +${broker} Quinta | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +*** Test Cases *** | ||
| 15 | +Можливість оголосити понадпороговий однопредметний тендер | ||
| 16 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
| 17 | + ... tender_owner | ||
| 18 | + ... ${USERS.users['${tender_owner}'].broker} | ||
| 19 | + ... minimal | ||
| 20 | + [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера) | ||
| 21 | + ${tender_data}= Підготовка початкових даних | ||
| 22 | + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} | ||
| 23 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | ||
| 24 | + Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} | ||
| 25 | + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} | ||
| 26 | + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} | ||
| 27 | + Log ${TENDER} | ||
| 28 | + | ||
| 29 | +Пошук позапорогового однопредметного тендера по ідентифікатору | ||
| 30 | + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | ||
| 31 | + ... viewer tender_owner provider provider1 | ||
| 32 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | ||
| 33 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | ||
| 34 | + ... minimal | ||
| 35 | + ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | ||
| 36 | + :FOR ${username} IN @{usernames} | ||
| 37 | + \ Дочекатись синхронізації з майданчиком ${username} | ||
| 38 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
| 39 | + | ||
| 40 | +Відображення типу закупівлі оголошеного тендер | ||
| 41 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | ||
| 42 | + ... viewer | ||
| 43 | + ... ${USERS.users['${viewer}'].broker} | ||
| 44 | + Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} procurementMethodType | ||
| 45 | + | ||
| 46 | +Відображення початку періоду прийому пропозицій оголошеного тендера | ||
| 47 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | ||
| 48 | + ... viewer | ||
| 49 | + ... ${USERS.users['${viewer}'].broker} | ||
| 50 | + ... minimal | ||
| 51 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | ||
| 52 | + :FOR ${username} IN @{usernames} | ||
| 53 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate | ||
| 54 | + | ||
| 55 | +Відображення закінчення періоду прийому пропозицій оголошеного тендера | ||
| 56 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | ||
| 57 | + ... viewer | ||
| 58 | + ... ${USERS.users['${viewer}'].broker} | ||
| 59 | + ... minimal | ||
| 60 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | ||
| 61 | + :FOR ${username} IN @{usernames} | ||
| 62 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.endDate | ||
| 63 | + | ||
| 64 | +Можливість подати вимогу на умови більше ніж за 10 днів до завершення періоду подання пропозицій | ||
| 65 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | ||
| 66 | + ... provider | ||
| 67 | + ... ${USERS.users['${provider}'].broker} | ||
| 68 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | ||
| 69 | + ${claim}= Get From List ${COMPLAINTS} 0 | ||
| 70 | + Set To Dictionary ${claim.data} status claim | ||
| 71 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${claim} | ||
| 72 | + ${complaints}= Create Dictionary | ||
| 73 | + Set To Dictionary ${complaints} claim0 ${claim} | ||
| 74 | + Set To Dictionary ${USERS.users['${provider}']} complaints ${complaints} | ||
| 75 | + | ||
| 76 | +Можливість скасувати вимогу на умови | ||
| 77 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | ||
| 78 | + ... provider | ||
| 79 | + ... ${USERS.users['${provider}'].broker} | ||
| 80 | + ${claim}= Get From Dictionary ${USERS.users['${provider}'].complaints} claim0 | ||
| 81 | + Set To Dictionary ${claim.data} status cancelled | ||
| 82 | + Set To Dictionary ${claim.data} cancellationReason test_draft_cancellation | ||
| 83 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 0 ${claim} | ||
| 84 | + | ||
| 85 | + | ||
| 86 | +Подати цінову пропозицію першим учасником після оголошення тендеру | ||
| 87 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | ||
| 88 | + ... provider | ||
| 89 | + ... ${USERS.users['${provider}'].broker} | ||
| 90 | + ${bid}= test bid data | ||
| 91 | + Log ${bid} | ||
| 92 | + ${bidresponses}= Create Dictionary | ||
| 93 | + Set To Dictionary ${bidresponses} bid ${bid} | ||
| 94 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | ||
| 95 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
| 96 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | ||
| 97 | + log ${resp} | ||
| 98 | + | ||
| 99 | +Подати цінову пропозицію другим учасником | ||
| 100 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | ||
| 101 | + ... provider1 | ||
| 102 | + ... ${USERS.users['${provider1}'].broker} | ||
| 103 | + ${bid}= test bid data | ||
| 104 | + Log ${bid} | ||
| 105 | + ${bidresponses}= Create Dictionary | ||
| 106 | + Set To Dictionary ${bidresponses} bid ${bid} | ||
| 107 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | ||
| 108 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
| 109 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | ||
| 110 | + log ${resp} | ||
| 111 | + | ||
| 112 | +Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій | ||
| 113 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
| 114 | + ... tender_owner | ||
| 115 | + ... ${USERS.users['${tender_owner}'].broker} | ||
| 116 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | ||
| 117 | + | ||
| 118 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю | ||
| 119 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
| 120 | + ... provider provider1 | ||
| 121 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | ||
| 122 | + ${usernames}= Create List ${provider} ${provider1} | ||
| 123 | + :FOR ${username} IN @{usernames} | ||
| 124 | + \ Дочекатись синхронізації з майданчиком ${username} | ||
| 125 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
| 126 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | ||
| 127 | + \ Should Be Equal ${bid.data.status} invalid | ||
| 128 | + \ Log ${bid} | ||
| 129 | + | ||
| 130 | + | ||
| 131 | +Оновити статус цінової пропозиції першого учасника | ||
| 132 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
| 133 | + ... provider | ||
| 134 | + ... ${USERS.users['${provider}'].broker} | ||
| 135 | + ${activestatusresp}= create_data_dict data.status active | ||
| 136 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${activestatusresp} | ||
| 137 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | ||
| 138 | + log ${activestatusresp} | ||
| 139 | + | ||
| 140 | +Cкасувати цінову пропозицію другого учасника | ||
| 141 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію | ||
| 142 | + ... provider1 | ||
| 143 | + ... ${USERS.users['${provider1}'].broker} | ||
| 144 | + ${bid}= Get Variable Value ${USERS.users['${provider1}'].bidresponses['resp']} | ||
| 145 | + ${bidresponses}= Викликати для учасника ${provider1} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
| 146 | + | ||
| 147 | +Повторно подати цінову пропозицію другим учасником після першої зміни | ||
| 148 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | ||
| 149 | + ... provider1 | ||
| 150 | + ... ${USERS.users['${provider1}'].broker} | ||
| 151 | + ${bid}= test bid data | ||
| 152 | + Log ${bid} | ||
| 153 | + ${bidresponses}= Create Dictionary | ||
| 154 | + Set To Dictionary ${bidresponses} bid ${bid} | ||
| 155 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | ||
| 156 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
| 157 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | ||
| 158 | + log ${resp} | ||
| 159 | + | ||
| 160 | +Неможливість редагувати однопредметний тендер менше ніж за 7 днів до завершення періоду подання пропозицій | ||
| 161 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
| 162 | + ... tender_owner | ||
| 163 | + ... ${USERS.users['${tender_owner}'].broker} | ||
| 164 | + ${no_edit_time}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} -6 | ||
| 165 | + Дочекатись дати ${no_edit_time} | ||
| 166 | + Викликати для учасника ${tender_owner} Внести зміни в тендер shouldfail ${TENDER['TENDER_UAID']} description description | ||
| 167 | + | ||
| 168 | +Неможливість подати вимогу на умови менше ніж за 10 днів до завершення періоду подання пропозицій | ||
| 169 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | ||
| 170 | + ... provider | ||
| 171 | + ... ${USERS.users['${provider}'].broker} | ||
| 172 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | ||
| 173 | + ${claim}= Get From List ${COMPLAINTS} 0 | ||
| 174 | + Set To Dictionary ${claim.data} status claim | ||
| 175 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${claim} | ||
| 176 | + | ||
| 177 | + | ||
| 178 | +Продовжити період редагування подання пропозиції на 7 днів | ||
| 179 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
| 180 | + ... tender_owner | ||
| 181 | + ... ${USERS.users['${tender_owner}'].broker} | ||
| 182 | + ${endDate}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} 7 | ||
| 183 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} tenderPeriod.endDate ${endDate} | ||
| 184 | + | ||
| 185 | + | ||
| 186 | +Можливість подати скаргу на умови більше ніж за 4 дні до завершення періоду подання пропозицій | ||
| 187 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | ||
| 188 | + ... provider | ||
| 189 | + ... ${USERS.users['${provider}'].broker} | ||
| 190 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | ||
| 191 | + Дочекатись синхронізації з майданчиком ${provider} | ||
| 192 | + ${complaint}= Get From List ${COMPLAINTS} 0 | ||
| 193 | + Set To Dictionary ${complaint.data} status pending | ||
| 194 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${complaint} | ||
| 195 | + Set To Dictionary ${USERS.users['${provider}'].complaints} complaint ${complaint} | ||
| 196 | + | ||
| 197 | + | ||
| 198 | +Можливість скасувати скаргу на умови | ||
| 199 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | ||
| 200 | + ... provider | ||
| 201 | + ... ${USERS.users['${provider}'].broker} | ||
| 202 | + ${complaint}= Get From Dictionary ${USERS.users['${provider}'].complaints} complaint | ||
| 203 | + Set To Dictionary ${complaint.data} status cancelled | ||
| 204 | + Set To Dictionary ${complaint.data} cancellationReason test_draft_cancellation | ||
| 205 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${complaint} | ||
| 206 | + | ||
| 207 | + | ||
| 208 | + | ||
| 209 | +Можливість редагувати однопредметний тендер після продовження періоду подання пропозицій | ||
| 210 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
| 211 | + ... tender_owner | ||
| 212 | + ... ${USERS.users['${tender_owner}'].broker} | ||
| 213 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | ||
| 214 | + | ||
| 215 | + | ||
| 216 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю після другої зміни | ||
| 217 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
| 218 | + ... provider provider1 | ||
| 219 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | ||
| 220 | + ${usernames}= Create List ${provider} ${provider1} | ||
| 221 | + :FOR ${username} IN @{usernames} | ||
| 222 | + \ Дочекатись синхронізації з майданчиком ${username} | ||
| 223 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
| 224 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | ||
| 225 | + \ Should Be Equal ${bid.data.status} invalid | ||
| 226 | + \ Log ${bid} | ||
| 227 | + | ||
| 228 | + | ||
| 229 | +Можливість оновити статус цінової пропозиції першого учасника після другої зміни | ||
| 230 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
| 231 | + ... provider | ||
| 232 | + ... ${USERS.users['${provider}'].broker} | ||
| 233 | + ${activestatusresp}= create_data_dict data.status active | ||
| 234 | + Log ${USERS.users['${provider}'].bidresponses['resp'].data.status} | ||
| 235 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${activestatusresp} | ||
| 236 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | ||
| 237 | + log ${activestatusresp} | ||
| 238 | + | ||
| 239 | + | ||
| 240 | +Повторно подати цінову пропозицію другим учасником після другої зміни | ||
| 241 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | ||
| 242 | + ... provider1 | ||
| 243 | + ... ${USERS.users['${provider1}'].broker} | ||
| 244 | + ${bid}= test bid data | ||
| 245 | + Log ${bid} | ||
| 246 | + ${bidresponses}= Create Dictionary | ||
| 247 | + Set To Dictionary ${bidresponses} bid ${bid} | ||
| 248 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | ||
| 249 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
| 250 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | ||
| 251 | + log ${resp} | ||
| 252 | + | ||
| 253 | + | ||
| 254 | +Неможливість подати скаргу на умови менше ніж за 4 дні до завершення періоду подання пропозицій | ||
| 255 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | ||
| 256 | + ... provider | ||
| 257 | + ... ${USERS.users['${provider}'].broker} | ||
| 258 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | ||
| 259 | + Log ${USERS.users['${provider}'].tender_data.data.complaintPeriod.endDate} | ||
| 260 | + Дочекатись Дати ${USERS.users['${provider}'].tender_data.data.complaintPeriod.endDate} | ||
| 261 | + Дочекатись синхронізації з майданчиком ${provider} | ||
| 262 | + ${complaint}= Get From List ${COMPLAINTS} 0 | ||
| 263 | + Set To Dictionary ${complaint.data} status pending | ||
| 264 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]} |
| @@ -21,7 +21,7 @@ from .initial_data import ( | @@ -21,7 +21,7 @@ from .initial_data import ( | ||
| 21 | test_lots_bid_data, test_meat_tender_data, test_question_answer_data, | 21 | test_lots_bid_data, test_meat_tender_data, test_question_answer_data, |
| 22 | test_question_data, test_supplier_data, test_tender_data, | 22 | test_question_data, test_supplier_data, test_tender_data, |
| 23 | test_tender_data_limited, test_tender_data_multiple_items, | 23 | test_tender_data_limited, test_tender_data_multiple_items, |
| 24 | - test_tender_data_multiple_lots | 24 | + test_tender_data_multiple_lots, test_tender_data_openua |
| 25 | ) | 25 | ) |
| 26 | from .local_time import get_now, TZ | 26 | from .local_time import get_now, TZ |
| 27 | import os | 27 | import os |
| @@ -33,6 +33,10 @@ def get_current_tzdate(): | @@ -33,6 +33,10 @@ def get_current_tzdate(): | ||
| 33 | return get_now().strftime('%Y-%m-%d %H:%M:%S.%f') | 33 | return get_now().strftime('%Y-%m-%d %H:%M:%S.%f') |
| 34 | 34 | ||
| 35 | 35 | ||
| 36 | +def add_minutes_to_date(date, minutes): | ||
| 37 | + return (parse_date(date) + timedelta(minutes=int(minutes))).isoformat() | ||
| 38 | + | ||
| 39 | + | ||
| 36 | def get_file_contents(path): | 40 | def get_file_contents(path): |
| 37 | with open(path, 'r') as f: | 41 | with open(path, 'r') as f: |
| 38 | return unicode(f.read()) or u'' | 42 | return unicode(f.read()) or u'' |
Please
register
or
login
to post a comment