summaryrefslogtreecommitdiff
path: root/src/local/server-tools
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-08-15 17:58:57 +0300
committerAlon Levy <alon@pobox.com>2015-08-15 18:04:45 +0300
commit60533f89e72fe73d6b5cdd9fc39e6b0311512ea4 (patch)
tree17f23d2247b4f9b08ae744d02f2bbc7ffbfb9382 /src/local/server-tools
parentdab4cb9df78d8b2f312d35c6da38f1e203a6aa93 (diff)
server-tools/rz_doc: add single doc creation (no merge)
Diffstat (limited to 'src/local/server-tools')
-rw-r--r--src/local/server-tools/rz.py24
-rwxr-xr-xsrc/local/server-tools/rz_doc.py47
2 files changed, 48 insertions, 23 deletions
diff --git a/src/local/server-tools/rz.py b/src/local/server-tools/rz.py
index f23628ba..78def9ba 100644
--- a/src/local/server-tools/rz.py
+++ b/src/local/server-tools/rz.py
@@ -15,11 +15,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# hack to setup rhizi path - needs a proper install
import sys
import os
+import time
-# to work both from source dir and from deployment dir
+# Hack to setup rhizi path - needs a proper install.
path = None
for postfix in [['..', 'bin'], ['..', '..', 'server'], ['..', '..', 'rhizi-server']]:
candidate = os.path.join(*([os.path.dirname(__file__)] + postfix))
@@ -30,3 +30,23 @@ if None is path:
print("must be run from one or two directories above server")
raise SystemExit
sys.path.append(path)
+
+
+from rz_server import init_config, init_webapp
+from rz_user_db import Fake_User_DB
+from rz_kernel import RZ_Kernel
+import db_controller as dbc
+
+class RZ(object):
+ def __init__(self, config_dir):
+ cfg = init_config(config_dir)
+ kernel = RZ_Kernel()
+ db_ctl = dbc.DB_Controller(cfg.db_base_url)
+ kernel.db_ctl = db_ctl
+ user_db = Fake_User_DB()
+ webapp = init_webapp(cfg, kernel)
+ webapp.user_db = user_db
+ kernel.db_op_factory = webapp # assist kernel with DB initialization
+ kernel.start()
+ time.sleep(0.1)
+ self.kernel = kernel
diff --git a/src/local/server-tools/rz_doc.py b/src/local/server-tools/rz_doc.py
index fb9eb7a6..eade48fb 100755
--- a/src/local/server-tools/rz_doc.py
+++ b/src/local/server-tools/rz_doc.py
@@ -23,22 +23,31 @@ import os
import uuid
import time
+#### must be before any rhizi import ####
try:
import rz
except:
pass
-import db_controller as dbc
+#########################################
+
from model.graph import Topo_Diff
-from neo4j_util import generate_random_id__uuid
-from rz_kernel import RZ_Kernel
-from rz_server import init_config, init_webapp
-from rz_user_db import Fake_User_DB
-# must be before any rhizi import
def clone(rzdoc_name):
return kernel.rzdoc__clone(kernel.rzdoc__lookup_by_name(rzdoc_name))
+def create(rzdoc_name, clone):
+ """
+ create a new document with @rzdoc_name with a single commit clone.
+
+ Missing:
+ this loses all the history.
+ no user recorded for newly created doc
+ """
+ destination = kernel.rzdoc__create(rzdoc_name)
+ ctx = namedtuple('Context', ['user_name', 'rzdoc'])(None, destination)
+ kernel.diff_commit__topo(clone, ctx)
+
def names():
return [v['name'] for v in kernel.rzdoc__list()]
@@ -116,10 +125,7 @@ def merge(destination_name, sources=None):
sources = names()
docs = [kernel.rzdoc__lookup_by_name(name) for name in sources]
topos = [kernel.rzdoc__clone(doc) for doc in docs]
- destination = kernel.rzdoc__create(destination_name)
-
- ctx = namedtuple('Context', ['user_name', 'rzdoc'])(None, destination)
- kernel.diff_commit__topo(merge_topos(topos, sources), ctx)
+ create(destination_name, merge_topos(topos, sources))
def remove(rzdoc_name):
kernel.rzdoc__delete(kernel.rzdoc__lookup_by_name(rzdoc_name))
@@ -141,9 +147,13 @@ if __name__ == '__main__':
p.add_argument('--merge-target', help='name of resulting rzdoc')
p.add_argument('--merge', help='comma separated names of docs to merge')
p.add_argument('--merge-file', help='filename with line per doc name')
- p.add_argument('--clone', help='show contents of doc')
+ p.add_argument('--clone', help='dump contents of doc as clone json')
+ p.add_argument('--create', help='create a single doc from a dumped clone json')
+ p.add_argument('--create-name', help='name of document to create')
p.add_argument('--rename-from', help='rename current name')
p.add_argument('--rename-to', help='rename new name')
+ p.add_argument('--dump-all', help='dump all documents')
+ p.add_argument('--load-all', help='load all arguments from previous dump')
args = p.parse_args()
if args.config_dir is None:
@@ -151,16 +161,8 @@ if __name__ == '__main__':
if os.path.exists(d):
args.config_dir = d
break
- cfg = init_config(args.config_dir)
- kernel = RZ_Kernel()
- db_ctl = dbc.DB_Controller(cfg.db_base_url)
- kernel.db_ctl = db_ctl
- user_db = Fake_User_DB()
- webapp = init_webapp(cfg, kernel)
- webapp.user_db = user_db
- kernel.db_op_factory = webapp # assist kernel with DB initialization
- kernel.start()
- time.sleep(0.1)
+ RZ = rz.RZ(args.config_dir)
+ kernel = RZ.kernel
if args.list_table:
print('\n'.join('%30s %30s' % (d['name'].encode('utf-8').ljust(30),
d['id'].encode('utf-8').ljust(30)) for d in kernel.rzdoc__search('')))
@@ -174,6 +176,9 @@ if __name__ == '__main__':
rename(args.rename_from, args.rename_to)
if args.clone:
print(json.dumps(clone(args.clone).to_json_dict()))
+ if args.create and args.create_name:
+ with open(args.create) as fd:
+ create(args.create_name, Topo_Diff.from_json_dict(json.load(fd)))
if args.merge_target:
merge_sources = None
if args.merge: