Hello community, here is the log from the commit of package python-halite for openSUSE:Factory checked in at 2013-11-07 09:54:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-halite (Old) and /work/SRC/openSUSE:Factory/.python-halite.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-halite" Changes: -------- --- /work/SRC/openSUSE:Factory/python-halite/python-halite.changes 2013-10-17 17:45:42.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-halite.new/python-halite.changes 2013-11-07 09:54:15.000000000 +0100 @@ -1,0 +2,8 @@ +Mon Nov 4 21:36:04 UTC 2013 - abo...@gmail.com + +- Updated to halite 0.1.04 +- Removed unnecesary functions and variables +- New feature: Command form now has search docs feature, where it displays + the Salt docs associated with a search string + +------------------------------------------------------------------- Old: ---- halite-0.1.02.tar.gz New: ---- halite-0.1.04.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-halite.spec ++++++ --- /var/tmp/diff_new_pack.WMDMvS/_old 2013-11-07 09:54:16.000000000 +0100 +++ /var/tmp/diff_new_pack.WMDMvS/_new 2013-11-07 09:54:16.000000000 +0100 @@ -16,7 +16,7 @@ # Name: python-halite -Version: 0.1.02 +Version: 0.1.04 Release: 1%{?dist} License: MIT Summary: Halite the salt Web UI ++++++ halite-0.1.02.tar.gz -> halite-0.1.04.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/PKG-INFO new/halite-0.1.04/PKG-INFO --- old/halite-0.1.02/PKG-INFO 2013-10-14 23:24:34.000000000 +0200 +++ new/halite-0.1.04/PKG-INFO 2013-11-01 19:58:04.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: halite -Version: 0.1.02 +Version: 0.1.04 Summary: SaltStack Web UI Home-page: https://github.com/saltstack/halite Author: SaltStack Inc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/README.rst new/halite-0.1.04/README.rst --- old/halite-0.1.02/README.rst 2013-09-24 21:50:32.000000000 +0200 +++ new/halite-0.1.04/README.rst 2013-10-31 17:25:11.000000000 +0100 @@ -298,7 +298,8 @@ If you have problems look for "Halite:" in the saltstack master log output. -2) Customized Deployment +Customized Deployment +==== The Halite github repository provides a skeleton framework for building your own custom deployment. One can run the default bottle.py framwork form the command line thusly @@ -392,11 +393,34 @@ A multithreaded or asynchronous one will be needed if more than one browser is tested at once. +Make sure that the end to end test is setup to login to Halite + +.. code-block:: bash + $ vim halite/test/mock/loginConf.coffee + +In that file change the following + +.. code-block:: javascript + + loginInfo = + username: 'your_halite_username' + password: 'your_halite_password' + +Now you can run the tests using the following commands + .. code-block:: bash $ cd halite $ karma start karma_e2e.conf.js -.. ............................................................................ +You might have to build the distribution (for development) + +.. code-block:: bash + + $ cd halite + $ ./prep_dist.py + + +.. ............................................................................ .. _`halite`: https://github.com/saltstack/halite diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/appConfigSrvc.js new/halite-0.1.04/halite/app/appConfigSrvc.js --- old/halite-0.1.02/halite/app/appConfigSrvc.js 2013-10-14 23:20:53.000000000 +0200 +++ new/halite-0.1.04/halite/app/appConfigSrvc.js 2013-11-01 19:56:39.000000000 +0100 @@ -4,8 +4,8 @@ configuration = { baseUrl: "", - date: "20130709", - version: "0.0.1", + date: "2013-11-01", + version: "0.1.04", views: { home: { label: "home", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/main.css new/halite-0.1.04/halite/app/main.css --- old/halite-0.1.02/halite/app/main.css 2013-09-25 23:22:29.000000000 +0200 +++ new/halite-0.1.04/halite/app/main.css 2013-10-31 17:25:11.000000000 +0100 @@ -1,3 +1,7 @@ +/* make sure search docs form group is displayed correctly */ +div#table-display { + display: inline-table; +} /* fix up display to not use table*/ .input-group.input-group-fix { display: inline-block; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/navbar.html new/halite-0.1.04/halite/app/navbar.html --- old/halite-0.1.02/halite/app/navbar.html 2013-09-24 21:21:48.000000000 +0200 +++ new/halite-0.1.04/halite/app/navbar.html 2013-10-31 17:25:11.000000000 +0100 @@ -24,7 +24,7 @@ <div class="form-group"> <input class="span2" type="text" placeholder="Username" ng-model="login.username" name="username" required> <input class="span2" type="password" placeholder="Password" ng-model="login.password" name="password" required> - <button type="submit" class="btn btn-default btn-sm" ng-click="loginUser()" ng-disabled="loginForm.$invalid">Login</button> + <button type="submit" class="btn btn-default btn-sm" id="login-button" ng-click="loginUser()" ng-disabled="loginForm.$invalid">Login</button> </div> </form> <form class="navbar-form pull-right" name="logoutForm" ng-cloak ng-show="!!loggedIn"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/util/appUtilSrvc.js new/halite-0.1.04/halite/app/util/appUtilSrvc.js --- old/halite-0.1.02/halite/app/util/appUtilSrvc.js 2013-10-14 23:20:53.000000000 +0200 +++ new/halite-0.1.04/halite/app/util/appUtilSrvc.js 2013-11-01 19:56:39.000000000 +0100 @@ -7,7 +7,7 @@ (function() { - var Bosser, Commander, Item, Itemizer, Jobber, Minioner, Orderer, Pagerage, Resulter, Runner, Wheeler, appUtilSrvc, _ref, _ref1, + var Bosser, Commander, Item, Itemizer, Jobber, Minioner, Pagerage, Resulter, Runner, Wheeler, appUtilSrvc, _ref, _ref1, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -707,266 +707,4 @@ appUtilSrvc.value("Pagerage", Pagerage); - /* - Orderer class used to provide ordered data object with keyed lookup - Entries can be accessed by key but the order of entry or sort is preserved. - - Orderer instances can by used with Angular 1.15+ ng-repeat track by - functions to guarantee display order when iterating over object properties - such as - <div ng-repeat="key in orderer.keys " - ng-model="orderer.data[key]"> - - or if values are objects - - <div ng-repeat="value in orderer.values() track by index" - ng-model="value"> - */ - - - Orderer = (function() { - function Orderer(stuff, deep) { - this.data = {}; - this.keys = []; - this.update(stuff, deep); - } - - Orderer.prototype.get = function(key, tag) { - var _ref2; - if (tag) { - return (_ref2 = this.data[key]) != null ? _ref2[tag] : void 0; - } else { - return this.data[key]; - } - }; - - Orderer.prototype.set = function(key, val, tag) { - if (__indexOf.call(this.keys, key) >= 0) { - if (tag) { - this.data[key][tag] = val; - } else { - this.data[key] = val; - } - } else { - this.keys.push(key); - if (tag) { - this.data[key] = {}; - this.data[key][tag] = val; - } else { - this.data[key] = val; - } - } - return this; - }; - - Orderer.prototype._isItem = function(item) { - if (item instanceof Item) { - return true; - } - if (angular.isObject(item) && !angular.isArray(item) && "key" in item && "val" in item) { - return true; - } - return false; - }; - - Orderer.prototype._isItemList = function(items) { - var item, _i, _len; - if (!angular.isArray(items)) { - return false; - } - if (!items.length) { - return false; - } - for (_i = 0, _len = items.length; _i < _len; _i++) { - item = items[_i]; - if (!this._isItem(item)) { - return false; - } - } - return true; - }; - - Orderer.prototype.deepSet = function(key, val, update) { - var item, k, orderer, v, _i, _len; - orderer = this.data[key]; - if (this._isItemList(val)) { - if (!(orderer instanceof Orderer) || !update) { - orderer = new Orderer; - this.set(key, orderer); - } - for (_i = 0, _len = val.length; _i < _len; _i++) { - item = val[_i]; - orderer.deepSet(item.key, item.val, update); - } - } else if (angular.isObject(val) && !angular.isArray(val)) { - if (!(orderer instanceof Orderer) || !update) { - orderer = new Orderer(); - this.set(key, orderer); - } - for (k in val) { - if (!__hasProp.call(val, k)) continue; - v = val[k]; - orderer.deepSet(k, v, update); - } - } else { - this.set(key, val); - } - return this; - }; - - Orderer.prototype.del = function(key, tag) { - var _key; - if (__indexOf.call(this.keys, key) >= 0) { - if (tag) { - delete this.data[key].val[tag]; - } else { - this.keys = (function() { - var _i, _len, _ref2, _results; - _ref2 = this.keys; - _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - _key = _ref2[_i]; - if (_key !== key) { - _results.push(_key); - } - } - return _results; - }).call(this); - delete this.data[key]; - } - } - return this; - }; - - Orderer.prototype.clear = function() { - this.data = {}; - this.keys = []; - return this; - }; - - Orderer.prototype.items = function(deep) { - var items, key, _i, _len, _ref2; - items = []; - _ref2 = this.keys; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - key = _ref2[_i]; - if (deep && (this.data[key] instanceof Orderer)) { - items.push(new Item(key, this.data[key].items(deep))); - } else { - items.push(new Item(key, this.data[key])); - } - } - return items; - }; - - Orderer.prototype.values = function() { - var key; - return (function() { - var _i, _len, _ref2, _results; - _ref2 = this.keys; - _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - key = _ref2[_i]; - _results.push(this.data[key]); - } - return _results; - }).call(this); - }; - - Orderer.prototype.sort = function(sorter, deep) { - var key, _i, _len, _ref2; - if (sorter == null) { - return this._keys; - } - this.keys.sort(sorter); - if (deep) { - _ref2 = this.keys; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - key = _ref2[_i]; - if (this.data[key] instanceof Orderer) { - this.data[key].sort(sorter, deep); - } - } - } - return this.keys; - }; - - Orderer.prototype.update = function(stuff, deep) { - var item, key, val, _i, _len; - if (stuff != null) { - if (this._isItemList(stuff)) { - for (_i = 0, _len = stuff.length; _i < _len; _i++) { - item = stuff[_i]; - if (deep) { - this.deepSet(item.key, item.val, true); - } else { - this.set(item.key, item.val); - } - } - } else if (angular.isObject(stuff) && !angular.isArray(stuff)) { - for (key in stuff) { - if (!__hasProp.call(stuff, key)) continue; - val = stuff[key]; - if (deep) { - this.deepSet(key, val, true); - } else { - this.set(key, val); - } - } - } - } - return this; - }; - - Orderer.prototype.reload = function(stuff, deep) { - this.clear(); - this.update(stuff, deep); - return this; - }; - - Orderer.prototype.unorder = function() { - var data, key, _i, _len, _ref2; - data = {}; - _ref2 = this.keys; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - key = _ref2[_i]; - if (this.data[key] instanceof Orderer) { - data[key] = this.data[key].unorder(); - } else { - data[key] = this.data[key]; - } - } - return data; - }; - - Orderer.prototype.filter = function(keys) { - var key, _i, _key, _len, _ref2; - _ref2 = this.keys; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - key = _ref2[_i]; - if (__indexOf.call(keys, key) < 0) { - delete this.data[key]; - } - } - this.keys = (function() { - var _j, _len1, _ref3, _results; - _ref3 = this.keys; - _results = []; - for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { - _key = _ref3[_j]; - if (__indexOf.call(keys, _key) >= 0) { - _results.push(_key); - } - } - return _results; - }).call(this); - return this; - }; - - return Orderer; - - })(); - - appUtilSrvc.value("Orderer", Orderer); - }).call(this); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/view/console.html new/halite-0.1.04/halite/app/view/console.html --- old/halite-0.1.02/halite/app/view/console.html 2013-10-14 22:33:42.000000000 +0200 +++ new/halite-0.1.04/halite/app/view/console.html 2013-11-01 19:46:10.000000000 +0100 @@ -45,7 +45,6 @@ </div> </div> </div> - <div class="form-group"> <div class="btn-group"> <div class="btn-group"> @@ -127,7 +126,8 @@ title="Module function" ng-required="true" name="moduleFunction" - ng-model="command.cmd.fun" > + ng-model="command.cmd.fun" + ng-change="searchDocs()"> </div> <div class="form-group fatter" style="margin-right: 4px;" ng-repeat="arg in command.cmd.arg track by $index"> @@ -163,6 +163,15 @@ </div> </div> </div> + <hr /> + <Label>Doc Search Results</Label> + <div class="checkbox"> + <label> + <input type="checkbox" ng-disabled="!isSearchable()" + ng-change="searchDocs()" ng-model="docSearch" id="search-checkbox"> Live Doc Search + </label> + </div> + <pre ng-show="!!docSearchResults">{{docSearchResults}}</pre> </form> </div><!--box--> @@ -590,7 +599,6 @@ </form> </div><!--col--> </div><!--/row--> - <script type="text/ng-template" id="ensual_nested.html"> <span ng-switch on="expandMode(ensual)"> <span ng-switch-when="lone" > diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/view/console.js new/halite-0.1.04/halite/app/view/console.js --- old/halite-0.1.02/halite/app/view/console.js 2013-10-14 23:20:53.000000000 +0200 +++ new/halite-0.1.04/halite/app/view/console.js 2013-11-01 19:56:39.000000000 +0100 @@ -20,6 +20,7 @@ $scope.statusing = false; $scope.eventing = false; $scope.commanding = false; + $scope.docSearch = false; if (AppData.get('commands') == null) { AppData.set('commands', new Itemizer()); } @@ -585,6 +586,85 @@ $scope.graining = false; return job; }; + $scope.docsLoaded = false; + $scope.docKeys = []; + $scope.docSearchResults = ''; + $scope.docs = {}; + $scope.searchDocs = function() { + var key, matching, matchingDocs; + if (($scope.command.cmd.fun == null) || !$scope.docSearch || $scope.command.cmd.fun === '') { + $scope.docSearchResults = ''; + return true; + } + matching = _.filter($scope.docKeys, function(key) { + return key.indexOf($scope.command.cmd.fun.toLowerCase()) !== -1; + }); + matchingDocs = (function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = matching.length; _i < _len; _i++) { + key = matching[_i]; + _results.push(key + "\n" + $scope.docs[key] + "\n"); + } + return _results; + })(); + $scope.docSearchResults = matchingDocs.join(''); + return true; + }; + $scope.isSearchable = function() { + return $scope.docsLoaded; + }; + $scope.fetchDocsDone = function(donejob) { + var key, minion_with_result, minions, results, value; + results = donejob.results; + minions = results._data; + minion_with_result = _.find(minions, function(minion) { + return minion.val.retcode === 0; + }); + if (minion_with_result != null) { + $scope.docs = minion_with_result.val["return"]; + $scope.docKeys = (function() { + var _ref, _results; + _ref = $scope.docs; + _results = []; + for (key in _ref) { + value = _ref[key]; + _results.push("" + (key.toLowerCase())); + } + return _results; + })(); + $scope.docsLoaded = true; + } else { + $scope.errorMsg = 'Docs not loaded since all minions returned invalid data. Please Check Minions And Retry.'; + } + }; + $scope.fetchDocsFailed = function() { + return $scope.errorMsg = 'Failed to fetch Docs. Please check system and retry'; + }; + $scope.fetchDocs = function() { + var command, commands; + command = { + fun: 'sys.doc', + mode: 'async', + tgt: '*', + arg: [], + expr_form: 'glob' + }; + commands = [command]; + command = $scope.snagCommand($scope.humanize(commands), commands); + SaltApiSrvc.run($scope, commands).success(function(data, status, headers, config) { + var job, result, _ref; + result = (_ref = data["return"]) != null ? _ref[0] : void 0; + if (result) { + job = $scope.startJob(result, commands); + job.commit($q).then($scope.fetchDocsDone, $scope.fetchDocsFailed); + return true; + } + }).error(function(data, status, headers, config) { + return false; + }); + return true; + }; $scope.startWheel = function(tag, cmd) { var jid, job, parts; console.log("Start Wheel " + ($scope.humanize(cmd))); @@ -762,6 +842,7 @@ $scope.authListener = function(event, loggedIn) { if (loggedIn) { $scope.openEventStream(); + $scope.fetchDocs(); } else { $scope.closeEventStream(); $scope.clearSaltData(); @@ -786,6 +867,7 @@ $scope.testFocus = function(name) { return console.log("focus " + name); }; + $scope.fetchDocs(); return true; } ]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/app/view/home.html new/halite-0.1.04/halite/app/view/home.html --- old/halite-0.1.02/halite/app/view/home.html 2013-09-27 20:06:05.000000000 +0200 +++ new/halite-0.1.04/halite/app/view/home.html 2013-11-01 19:54:16.000000000 +0100 @@ -5,6 +5,8 @@ </div> <h3>About</h3> <p>Version: {{config.version}}</p> + <p>Date: {{config.date}}</p> + <p>Base Url: {{config.baseUrl}}</p> </div><!--/span--> </div><!--/row--> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite/server_bottle.py new/halite-0.1.04/halite/server_bottle.py --- old/halite-0.1.02/halite/server_bottle.py 2013-10-11 18:41:12.000000000 +0200 +++ new/halite-0.1.04/halite/server_bottle.py 2013-10-24 21:53:38.000000000 +0200 @@ -270,8 +270,16 @@ while True: data = client.get_event(wait=0.025, tag=tag, full=True) + if data: - yield 'data: {0}\n\n'.format(json.dumps(data)) + try: #work around try to decode catch unicode errors + data = json.dumps(data) + except UnicodeDecodeError as ex: + if 'data' in data: + if 'tok' in data['data']: + del data['data']['tok'] + data = json.dumps(data) + yield 'data: {0}\n\n'.format(data) else: sleep(0.1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/halite.egg-info/PKG-INFO new/halite-0.1.04/halite.egg-info/PKG-INFO --- old/halite-0.1.02/halite.egg-info/PKG-INFO 2013-10-14 23:24:21.000000000 +0200 +++ new/halite-0.1.04/halite.egg-info/PKG-INFO 2013-11-01 19:57:52.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: halite -Version: 0.1.02 +Version: 0.1.04 Summary: SaltStack Web UI Home-page: https://github.com/saltstack/halite Author: SaltStack Inc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/halite-0.1.02/setup.py new/halite-0.1.04/setup.py --- old/halite-0.1.02/setup.py 2013-10-14 23:20:18.000000000 +0200 +++ new/halite-0.1.04/setup.py 2013-11-01 19:51:49.000000000 +0100 @@ -11,7 +11,7 @@ setup( name = 'halite', - version = '0.1.02', + version = '0.1.04', description = 'SaltStack Web UI', url = 'https://github.com/saltstack/halite', author='SaltStack Inc', -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org