Browse Source

Allow client closing datasets

Matthias Vogelgesang 7 years ago
parent
commit
cb82c83bca
3 changed files with 32 additions and 2 deletions
  1. 21 1
      bin/nova
  2. 10 0
      nova/resources.py
  3. 1 1
      setup.py

+ 21 - 1
bin/nova

@@ -6,6 +6,7 @@ import io
 import argparse
 import requests
 import ConfigParser
+import logging
 from nova import memtar
 
 
@@ -51,6 +52,13 @@ class Config(object):
 
         return '{}{}'.format(self.remote, u)
 
+    @property
+    def dataset_url(self):
+        if not self.id:
+            sys.exit("No identifier specified.")
+
+        return self.url('/api/datasets/{}'.format(self.id))
+
     def __repr__(self):
         return '<Config remote={}, token={}, id={}>'.format(self.remote, self.token, self.id)
 
@@ -68,7 +76,7 @@ def clone(config):
     params = dict(token=config.token)
 
     if not config.name:
-        r = requests.get(config.url('/api/datasets/') + config.id, params=params)
+        r = requests.get(config.dataset_url, params=params)
         name = r.json()['name']
     else:
         name = config.name
@@ -82,6 +90,15 @@ def clone(config):
     config.write()
 
 
+def close(config):
+    params = dict(token=config.token)
+    data = dict( id=config.id, closed=True)
+    r = requests.put(config.dataset_url, params=params, data=data)
+
+    if r.status_code != 200:
+        logging.error(r.reason)
+
+
 def init(config):
     name = config.name if config.name else os.path.basename(os.path.abspath(os.curdir))
 
@@ -131,5 +148,8 @@ if __name__ == '__main__':
     clone_parser.add_argument('--name', type=str, help="Alternative directory name")
     clone_parser.set_defaults(run=clone)
 
+    close_parser = cmd_parsers.add_parser('close', help="Close dataset")
+    close_parser.set_defaults(run=close)
+
     args = parser.parse_args()
     args.run(Config(args))

+ 10 - 0
nova/resources.py

@@ -49,3 +49,13 @@ class Dataset(Resource):
                 filter(models.Dataset.id == dataset_id).\
                 first()
         return dict(name=dataset.name)
+
+    def put(self, dataset_id):
+        user = get_user()
+        dataset = db.session.query(models.Dataset).\
+                filter(models.Access.user == user).\
+                filter(models.Dataset.id == dataset_id).\
+                first()
+
+        dataset.closed = request.form.get('closed', False)
+        db.session.commit()

+ 1 - 1
setup.py

@@ -12,7 +12,7 @@ setup(
     url='http://github.com/ufo-kit/nova',
     license='LGPL',
     packages=find_packages(exclude=['*.tests']),
-    scripts=['bin/novactl', 'bin/nova'],
+    scripts=['bin/nova'],
     exclude_package_data={'': ['README.rst']},
     description="NOVA data suite",
     install_requires=[