def from0to1(registry): class Request(object): def __init__(self, registry): self.registry = registry len(registry.db.view("plans/all", limit=1)) results = registry.db.iterview("plans/all", 2**10, include_docs=True, stale="update_after") docs = [] request = Request(registry) root = Root(request) for i in results: doc = i.doc if not all([ i.get("url", "").startswith(registry.docservice_url) for i in doc.get("documents", []) ]): plan = Plan(doc) plan.__parent__ = root doc = plan.to_primitive() doc["dateModified"] = get_now().isoformat() docs.append(doc) if len(docs) >= 2**7: registry.db.update(docs) docs = [] if docs: registry.db.update(docs)
def test_migrate_from0to1(self): set_db_schema_version(self.db, 0) u = Plan(test_plan_data) u.planID = "UA-X" u.store(self.db) data = self.db.get(u.id) data["documents"] = [{ "id": "ebcb5dd7f7384b0fbfbed2dc4252fa6e", "title": "name.txt", "documentOf": "tender", "url": "/tenders/{}/documents/ebcb5dd7f7384b0fbfbed2dc4252fa6e?download=10367238a2964ee18513f209d9b6d1d3" .format(u.id), "datePublished": "2016-06-01T00:00:00+03:00", "dateModified": "2016-06-01T00:00:00+03:00", "format": "text/plain", }] _id, _rev = self.db.save(data) self.app.app.registry.docservice_url = 'http://localhost' migrate_data(self.app.app.registry, 1) migrated_item = self.db.get(u.id) self.assertIn('http://localhost/get/10367238a2964ee18513f209d9b6d1d3?', migrated_item['documents'][0]['url']) self.assertIn( 'Prefix={}%2Febcb5dd7f7384b0fbfbed2dc4252fa6e'.format(u.id), migrated_item['documents'][0]['url']) self.assertIn('KeyID=', migrated_item['documents'][0]['url']) self.assertIn('Signature=', migrated_item['documents'][0]['url'])
def test_simple_add_plan(self): u = Plan(test_plan_data) u.planID = "UA-P-X" assert u.id is None assert u.rev is None u.store(self.db) assert u.id is not None assert u.rev is not None fromdb = self.db.get(u.id) assert u.planID == fromdb['planID'] assert u.doc_type == "Plan" u.delete_instance(self.db)
def test_simple_add_plan(self): u = Plan(test_plan_data) u.planID = "UA-P-X" assert u.id is None assert u.rev is None u.store(self.db) assert u.id is not None assert u.rev is not None fromdb = self.db.get(u.id) assert u.planID == fromdb["planID"] assert u.doc_type == "Plan" u.delete_instance(self.db)
def planning_factory(request): request.validated['plan_src'] = {} root = PlanRoot(request) # query containt param plan_id (GET request) plan_id = request.matchdict.get('plan_id') if request.matchdict else None if plan_id: # fill id of Plan request.validated['plan_id'] = plan_id # find entry in planning database by ID plan = Plan.load(root.db_plan, plan_id) # plan not found if not plan: request.errors.add('url', 'plan_id', 'Not Found') request.errors.status = 404 raise error_handler(request.errors) plan.__parent__ = root request.validated['plan'] = plan if request.method != 'GET': request.validated['plan_src'] = plan.serialize('plain') request.validated['id'] = plan_id return plan return None
def collection_post(self): """This API request is targeted to creating new Plan by procuring organizations. Creating new Plan ------------------- Example request to create plan: .. sourcecode:: http POST /plans HTTP/1.1 Host: example.com Accept: application/json { "data": { "tender": { "procurementMethod": "допорогові закупівлі", "tenderPeriod": { "startDate": "2015-05-09T23:11:39.720908+03:00" } }, "items": [ { "deliveryDate": { "endDate": "2015-05-11T23:11:39.721063+03:00" }, "additionalClassifications": [ { "scheme": "ДКПП", "id": "28.29.39-10.00", "description": "Прилади контролювання маси та прилади контрольні автоматичні з максимальною масою зважування не більше ніж 5000 кг" } ], "unit": { "code": "KGM", "name": "кг" }, "classification": { "scheme": "CPV", "description": "Роботи з будування пневматичних будівель", "id": "45217000-1" }, "quantity": 760 } ], "procuringEntity": { "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Уравління Справами" }, "name": "ДУС" }, "budget": { "project": { "name": "proj_name", "id": "proj_id" }, "amount": 10000, "amountNet": 12222, "id": "budget_id", "description": "budget_description" } } } This is what one should expect in response: .. sourcecode:: http HTTP/1.1 201 Created Location: http://localhost/api/0.10/plans/84582807b5654bee9e216adb05e57d39 Content-Type: application/json { "access": { "token": "174fd98e4e7347eb863f125c9e561b27" }, "data": { "tender": { "procurementMethod": "допорогові закупівлі", "tenderPeriod": { "startDate": "2015-05-09T23:11:39.720908+03:00" } }, "items": [ { "classification": { "scheme": "CPV", "description": "Роботи з будування пневматичних будівель", "id": "45217000-1" }, "additionalClassifications": [ { "scheme": "ДКПП", "id": "28.29.39-10.00", "description": "Прилади контролювання маси та прилади контрольні автоматичні з максимальною масою зважування не більше ніж 5000 кг" } ], "deliveryDate": { "endDate": "2015-05-11T23:11:39.721063+03:00" }, "id": "84582807b5654bee9e216adb05e57d39", "unit": { "code": "KGM", "name": "кг" }, "quantity": 760 } ], "procuringEntity": { "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Уравління Справами" }, "name": "ДУС" }, "budget": { "project": { "id": "proj_id", "name": "proj_name" }, "amount": 10000, "amountNet": 12222, "id": "budget_id", "description": "budget_description" } } } """ plan_data = self.request.validated['data'] plan_id = generate_id() plan = Plan(plan_data) plan.__parent__ = self.request.context plan.id = plan_id plan.planID = generate_plan_id(get_now(), self.db_plan, self.server_id) set_ownership(plan, self.request) self.request.validated['plan'] = plan self.request.validated['plan_src'] = {} if save_plan(self.request): LOGGER.info('Created plan {} ({})'.format(plan_id, plan.planID), extra=context_unpack(self.request, {'MESSAGE_ID': 'plan_create'}, { 'plan_id': plan_id, 'planID': plan.planID })) self.request.response.status = 201 self.request.response.headers['Location'] = self.request.route_url( 'Plan', plan_id=plan_id) return { 'data': plan.serialize('create'), 'access': { 'token': plan.owner_token } }
def collection_post(self): """This API request is targeted to creating new Plan by procuring organizations. Creating new Plan ------------------- Example request to create plan: .. sourcecode:: http POST /plans HTTP/1.1 Host: example.com Accept: application/json { "data": { "tender": { "procurementMethod": "допорогові закупівлі", "tenderPeriod": { "startDate": "2015-05-09T23:11:39.720908+03:00" } }, "items": [ { "deliveryDate": { "endDate": "2015-05-11T23:11:39.721063+03:00" }, "additionalClassifications": [ { "scheme": "ДКПП", "id": "28.29.39-10.00", "description": "Прилади контролювання маси та прилади контрольні автоматичні з максимальною масою зважування не більше ніж 5000 кг" } ], "unit": { "code": "KGM", "name": "кг" }, "classification": { "scheme": "CPV", "description": "Роботи з будування пневматичних будівель", "id": "45217000-1" }, "quantity": 760 } ], "procuringEntity": { "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Уравління Справами" }, "name": "ДУС" }, "budget": { "project": { "name": "proj_name", "id": "proj_id" }, "amount": 10000, "amountNet": 12222, "id": "budget_id", "description": "budget_description" } } } This is what one should expect in response: .. sourcecode:: http HTTP/1.1 201 Created Location: http://localhost/api/0.10/plans/84582807b5654bee9e216adb05e57d39 Content-Type: application/json { "access": { "token": "174fd98e4e7347eb863f125c9e561b27" }, "data": { "tender": { "procurementMethod": "допорогові закупівлі", "tenderPeriod": { "startDate": "2015-05-09T23:11:39.720908+03:00" } }, "items": [ { "classification": { "scheme": "CPV", "description": "Роботи з будування пневматичних будівель", "id": "45217000-1" }, "additionalClassifications": [ { "scheme": "ДКПП", "id": "28.29.39-10.00", "description": "Прилади контролювання маси та прилади контрольні автоматичні з максимальною масою зважування не більше ніж 5000 кг" } ], "deliveryDate": { "endDate": "2015-05-11T23:11:39.721063+03:00" }, "id": "84582807b5654bee9e216adb05e57d39", "unit": { "code": "KGM", "name": "кг" }, "quantity": 760 } ], "procuringEntity": { "identifier": { "scheme": "UA-EDR", "id": "111983", "legalName": "ДП Державне Уравління Справами" }, "name": "ДУС" }, "budget": { "project": { "id": "proj_id", "name": "proj_name" }, "amount": 10000, "amountNet": 12222, "id": "budget_id", "description": "budget_description" } } } """ plan_data = self.request.validated['data'] plan_id = generate_id() plan = Plan(plan_data) plan.__parent__ = self.request.context plan.id = plan_id plan.planID = generate_plan_id(get_now(), self.db_plan, self.server_id) set_ownership(plan, self.request) self.request.validated['plan'] = plan self.request.validated['plan_src'] = {} if save_plan(self.request): LOGGER.info('Created plan {} ({})'.format(plan_id, plan.planID), extra=context_unpack(self.request, {'MESSAGE_ID': 'plan_create'}, {'plan_id': plan_id, 'planID': plan.planID})) self.request.response.status = 201 self.request.response.headers[ 'Location'] = self.request.route_url('Plan', plan_id=plan_id) return { 'data': plan.serialize('create'), 'access': { 'token': plan.owner_token } }
def plan_from_data(request, data, raise_error=True, create=True): if create: return Plan(data) return Plan
def plan_from_data(request, data, raise_error=True, create=True): from openprocurement.planning.api.models import Plan if create: return Plan(data) return Plan