def add_buildout(self, data, host, checksum): packages = [] for package_info in data.packages: package = Package.get_by_nameversion(package_info['name'], package_info['version']) if not package: equation = package_info.get('equation', None) version = Version.get_by_version(package_info['version']) or\ Version.add(package_info['version'], equation) requirements = self.get_requirements( package_info['requirements'], data.versionmap) package = Package.add(package_info['name'], version, requirements) packages.append(package) buildout = Buildout(data.name, host, checksum, started=data.started, finished=data.finished, packages=packages, config=data.config) DBSession.add(buildout) self.remove_old_buildouts(data.name) return buildout
def create_test_buildout(self): from whiskers.models import Buildout, Host with transaction.manager: host = Host(u'localhost', '127.0.0.1') self.session.add(host) buildout = Buildout(name=u"Example", host=host, checksum=1) self.session.add(buildout)
def post(self): """Add a new buildout to database.""" try: data = self.request.json_body['data'] checksum = zlib.adler32(self.request.body) checksum_buildout = Buildout.get_by_checksum(checksum) if checksum_buildout: logging.info("Checksum matched") logging.info("Updating datetime..") checksum_buildout.datetime = datetime.now() DBSession.flush() raise Exception("No changes with existing data.") logging.info("New checksum") jsondata = JsonDataWrapper(data) except KeyError: return Response(u"No data. Nothing added.") except AttributeError as e: return Response(u"Not a valid request. Error was: {error}".format( error=str(e))) except Exception as e: return Response( u"Adding information failed. Error was: {error}".format( error=str(e))) host = Host.get_by_name(jsondata.hostname) if not host: host = Host.add(jsondata.hostname, jsondata.ipv4) self.add_buildout(jsondata, host, checksum) return Response(u'Added buildout information to Whiskers.')
def post(self): """Add a new buildout to database.""" try: data = self.request.params['data'] incoming = data.encode('utf-8') checksum = zlib.adler32(incoming) checksum_buildout = Buildout.get_by_checksum(checksum) if checksum_buildout: logging.info("Checksum matched") logging.info("Updating datetime..") checksum_buildout.datetime = datetime.now() DBSession.flush() raise Exception("No changes with existing data.") logging.info("New checksum") jsondata = JsonDataWrapper(data) except KeyError: return Response('No data. Nothing added.') except Exception as e: return Response(str(e)) host = Host.get_by_name(jsondata.hostname) if not host: host = Host.add(jsondata.hostname, jsondata.ipv4) self.add_buildout(jsondata, host, checksum) return Response('Added buildout information to Whiskers.')
def post(self): """Add a new buildout to database.""" try: data = self.request.json_body['data'] checksum = zlib.adler32(self.request.body) checksum_buildout = Buildout.get_by_checksum(checksum) if checksum_buildout: logging.info("Checksum matched") logging.info("Updating datetime..") checksum_buildout.datetime = datetime.now() DBSession.flush() raise Exception("No changes with existing data.") logging.info("New checksum") jsondata = JsonDataWrapper(data) except KeyError: return Response(u"No data. Nothing added.") except AttributeError as e: return Response(u"Not a valid request. Error was: {error}".format( error=str(e))) except Exception as e: return Response(u"Adding information failed. Error was: {error}". format(error=str(e))) host = Host.get_by_name(jsondata.hostname) if not host: host = Host.add(jsondata.hostname, jsondata.ipv4) self.add_buildout(jsondata, host, checksum) return Response(u'Added buildout information to Whiskers.')
def remove_old_buildouts(self, name): """Remove old buildouts.""" buildouts_to_keep = Settings.get_buildouts_to_keep() buildouts = Buildout.get_by_name(name) if buildouts.count() > buildouts_to_keep and buildouts_to_keep > 0: for buildout in buildouts[buildouts_to_keep:]: DBSession.delete(buildout)
def add_buildout_view(request): try: data = json.loads(request.params['data']) except KeyError: return Response('No data. Nothing added.') session = DBSession() buildoutname = data['buildoutname'] packages = data['packages'] prepared_packages = prepare_packages(session, packages) buildout = session.query(Buildout).filter_by(name=buildoutname) if not buildout.count(): buildout = Buildout(name=buildoutname, packages=prepared_packages) else: buildout = buildout[0] buildout.packages = prepared_packages session.merge(buildout) transaction.commit() return Response('OK')
def _createDummyContent(self, session): from whiskers.models import Buildout, Package, Version, Host host = Host('localhost', '127.0.0.1') version = Version('1.0') package = Package('req-package-1', version) packages = [Package('package1', version), Package('package2', Version('2.0'), requires=[package])] buildout = Buildout('buildout', host, 12345, packages=packages) session.add(buildout) session.flush() transaction.commit()
def create_buildout(self): from whiskers.models import ( Buildout, Host, Package, Version, ) host = Host(u'localhost', '127.0.0.1') self.session.add(host) version = Version('1.0') package = Package(u'example.package', version=version) buildout = Buildout(name=u"Example", host=host, checksum=1, packages=[package]) self.session.add(buildout)
def get(self): buildout_id = self.request.matchdict.get('buildout_id') buildout = Buildout.get_by_id(buildout_id) return buildout.get_as_dict()