Esempio n. 1
0
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)
Esempio n. 2
0
 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 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
Esempio n. 7
0
    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
                }
            }
Esempio n. 9
0
def plan_from_data(request, data, raise_error=True, create=True):
    if create:
        return Plan(data)
    return Plan
Esempio n. 10
0
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