def post_packages_stop(release_id, package_id): """ Indicate that a package has finished deploying **Example curl**: .. sourcecode:: shell curl -H "Content-Type: application/json" \\ -X POST \\ http://127.0.0.1/releases/${RELEASE_ID}/packages/${PACKAGE_ID}/stop \\ -d '{"success": "true"}' :param string package_id: Package UUID :param string release_id: Release UUID """ validate_request_json(request) success = request.json.get('success') in [True, 'True', 'true', '1'] package = fetch_package(release_id, package_id) app.logger.info("Package stop, release {}, package {}, success {}".format( release_id, package_id, success)) package.stop(success=success) db.session.add(package) db.session.commit() return '', 204
def post_packages_stop(release_id, package_id): """ Indicate that a package has finished deploying **Example curl**: .. sourcecode:: shell curl -H "Content-Type: application/json" \\ -X POST http://127.0.0.1/releases/${RELEASE_ID}/packages/${PACKAGE_ID}/stop \\ -d '{"success": "true"}' :param string package_id: Package UUID :param string release_id: Release UUID """ validate_request_json(request) success = request.json.get('success') in [True, 'True', 'true', '1'] package = fetch_package(release_id, package_id) app.logger.info("Package stop, release {}, package {}, success {}".format( release_id, package_id, success)) package.stop(success=success) db.session.add(package) db.session.commit() return '', 204
def post_releases_notes(release_id): """ Add a note to a release :param string release_id: Release UUID :query string text: Text :return: """ validate_request_json(request) text = request.json.get('text') if not text: raise InvalidUsage("Must include text in posted document") note = ReleaseNote(release_id, text) app.logger.info("Adding note to release {}".format(release_id)) db.session.add(note) db.session.commit() return '', 204
def post_releases_metadata(release_id): """ Add metadata to a release :param string release_id: Release UUID :query string text: Text :return: """ validate_request_json(request) meta = request if not meta: raise InvalidUsage("Must include metadata in posted document: es {\"key\" : \"value\"}") for key, value in request.json.items(): app.logger.info("Adding Metadata to release {}".format(release_id)) metadata = ReleaseMetadata(release_id, key, value) db.session.add(metadata) db.session.commit() return '', 204
def post_releases_metadata(release_id): """ Add metadata to a release :param string release_id: Release UUID :query string text: Text :return: """ validate_request_json(request) meta = request if not meta: raise InvalidUsage( "Must include metadata in posted document: es {\"key\" : " "\"value\"}") for key, value in request.json.items(): app.logger.info("Adding Metadata to release {}".format(release_id)) metadata = ReleaseMetadata(release_id, key, value) db.session.add(metadata) db.session.commit() return '', 204
def post_import(): """ Import a release. This endpoint is designed to created releases in bulk. It bypasses the normal workflow, and may be an option for those who wish to "publish" a release after the fact rather than step through as it happens. The document must contain a list of full releases, in json format. Example: .. code-block:: python [ { "platforms": [ "GumtreeUK" ], "stime": "2015-12-17T17:02:04Z", "ftime": "2015-12-17T17:02:24Z", "team": "Gumtree UK Site Operations", "references": [ "TICKET-1" ], "notes": [ "Imported from other_system" ], "packages": [ { "name": "", "diff_url": null, "stime": "2015-12-17T17:02:22Z" "ftime": 1450371742, "rollback": false, "status": "SUCCESSFUL", "version": "1.0.1", } ], "user": "******" }, {...} ] Timestamps can be any format understood by Arrow (note mix of unix time and ISO timestamps above). Status must be one of the enums accepted by `orlo.orm.Package.status`, i.e.: NOT_STARTED, IN_PROGRESS, SUCCESSFUL, FAILED A json null value is acceptable for non-required fields, or it can be omitted entirely. See `orlo.orm.Release` and `orlo.orm.Package`. **Example curl**: .. sourcecode:: shell curl -v -X POST -d @releases.json 'http://127.0.0.1:5000/releases/import' -H \ "Content-Type: application/json" :status 200: The document was accepted """ validate_request_json(request) releases = [] for r in request.json: # Get the platform, create if it doesn't exist platforms = [] for p in r['platforms']: try: query = db.session.query(Platform).filter(Platform.name == p) platform = query.one() except exc.NoResultFound: app.logger.info("Creating platform {}".format(p)) platform = Platform(p) db.session.add(platform) platforms.append(platform) release = Release( platforms=platforms, user=r['user'], team=r.get('team'), references=json.dumps(r.get('references')), ) release.stime = arrow.get(r['stime']) if r.get('stime') else None release.ftime = arrow.get(r['ftime']) if r.get('ftime') else None if release.ftime and release.stime: release.duration = release.ftime - release.stime notes = r.get('notes') if notes: for n in notes: note = ReleaseNote(release.id, n) db.session.add(note) for p in r['packages']: package = Package( release_id=release.id, name=p['name'], version=p['version'], ) package.rollback = p.get('rollback') package.status = p.get('status') package.diff_url = p.get('diff_url') if p.get('stime'): package.stime = arrow.get(p['stime']) else: package.stime = arrow.get(r['stime']) package.ftime = arrow.get(p['ftime']) if p.get('ftime') else None if package.stime and package.ftime: package.duration = package.ftime - package.stime db.session.add(package) db.session.add(release) db.session.commit() releases.append(release.id) return jsonify({'releases': [str(x) for x in releases]}), 200