def create_release(self, normal, successful, user='******', team='test_team', platform='test_platform'): release = Release( platforms=append_or_create_platforms([platform]), user=user, team=team, # references=list_to_string(['test_reference']) ) release.stime = self.time_cursor db.session.add(release) for package in self.package_list: package = Package( release_id=release.id, name=package, version='0.0.0' ) # which take 10 mins each... package.stime = self.time_cursor package.ftime = self.time_cursor = self.time_cursor + timedelta(minutes=10) if normal: package.rollback = False else: package.rollback = True if successful: package.status = 'SUCCESSFUL' else: package.status = 'FAILED' db.session.add(package) release.ftime = self.time_cursor release.duration = release.ftime - release.stime self.releases += 1
def create_release(request): """ Create a Release object from a request """ references = request.json.get('references', []) if references and type(references) is list: references = list_to_string(references) # If given a single string, make it a list request_platforms = request.json.get('platforms') if request_platforms and type(request_platforms) is not list: request_platforms = [request_platforms] # Get the platforms platforms = append_or_create_platforms(request_platforms) release = Release( # Required attributes platforms=platforms, user=request.json['user'], # Not required team=request.json.get('team'), references=references, ) return release
def _create_release(cls, user='******', team='test team', platforms=None, references=None, success=True): """ Create a release using internal methods :param user: :param team: :param platforms: :param references: :return: """ if not platforms: platforms = ['test_platform'] if type(platforms) is not list: raise AssertionError("Platforms parameter must be list") if not references: references = ['TestTicket-123'] db_platforms = append_or_create_platforms(platforms) r = Release( platforms=db_platforms, user=user, references=references, team=team, ) db.session.add(r) db.session.commit() return r.id
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