path listing working

This commit is contained in:
2014-10-30 22:38:05 +01:00
parent a3eb5b05a3
commit 83f981ce3d
2 changed files with 98 additions and 11 deletions

View File

@@ -17,8 +17,12 @@
#
# ***** END GPL LICENCE BLOCK *****
"""
Blender asset manager
"""
# TODO
# * checkout command
# * checkout command (store some handy json info!)
# * commit command
# ** staging for svn commit
# ** svn commit
@@ -26,6 +30,7 @@
# * definition of project (.bam (like .git)) ... json
class bam_utils:
# fake module
__slots__ = ()
@@ -36,12 +41,82 @@ class bam_utils:
def session_find_url():
return "http://localhost:5000"
@staticmethod
def session_request_url(req_path):
# TODO, get from config
BAM_SERVER = "http://localhost:5000"
result = "%s/%s" % (BAM_SERVER, req_path)
print(result)
return result
@staticmethod
def checkout(paths):
import sys
import requests
# TODO(cam) multiple paths
path = paths[0]
del paths
payload = {
"filepath": path,
"command": "checkout",
}
r = requests.get(
bam_utils.session_request_url("file"),
params=payload,
auth=("bam", "bam"),
stream=True,
)
if r.status_code not in {200,}:
# TODO(cam), make into reusable function?
print("Error %d:\n%s" % (r.status_code, next(r.iter_content(chunk_size=1024)).decode('utf-8')))
return
# TODO(cam) how to tell if we get back a message payload? or real data???
local_filename = payload['filepath'].split('/')[-1]
if 1:
local_filename += ".zip"
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
sys.stdout.write(".")
sys.stdout.flush()
print("Written:", local_filename)
@staticmethod
def list_dir(paths):
import sys
import requests
path = paths[0]
del paths
# TODO(cam) multiple paths
payload = {
"path": path,
}
r = requests.get(
bam_utils.session_request_url("file_list"),
params=payload,
auth=("bam", "bam"),
stream=True,
)
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
sys.stdout.write(chunk.decode('utf-8'))
sys.stdout.flush()
def subcommand_checkout_cb(args):
print(args)
bam_utils.checkout(args.paths)
def subcommand_commit_cb(args):
print(args)
@@ -56,7 +131,7 @@ def subcommand_revert_cb(args):
def subcommand_list_cb(args):
print(args)
bam_utils.list_dir(args.paths)
def subcommand_status_cb(args):
@@ -74,9 +149,14 @@ def create_argparse_checkout(subparsers):
def create_argparse_commit(subparsers):
subparse = subparsers.add_parser("commit", aliases=("ci",))
subparse.add_argument(
"-m", "--message", dest="message", metavar='MESSAGE',
help="Commit message",
)
subparse.add_argument(
"paths", nargs="*", help="paths to commit",
)
subparse.set_defaults(func=subcommand_commit_cb)
@@ -120,8 +200,8 @@ def create_argparse():
import argparse
usage_text = (
"BAM! (Blender Asset Manager) " +
os.path.basename(__file__)
"BAM! (Blender Asset Manager)\n" +
__doc__
)
parser = argparse.ArgumentParser(description=usage_text)

View File

@@ -144,19 +144,25 @@ class FileAPI(Resource):
elif command == 'checkout':
filepath = os.path.join(app.config['STORAGE_PATH'], filepath)
if not os.path.exists(filepath):
return jsonify(message="Path not found %r" % filepath)
elif os.path.isdir(filepath):
return jsonify(message="Path is a directory %r" % filepath)
# pack the file!
print("PACKING")
filepath_zip = self.pack_fn(filepath)
# TODO, handle fail
if filepath_zip is None:
pass
return jsonify(message="Path not found %r" % filepath)
f = open(filepath_zip, 'rb')
return Response(f, direct_passthrough=True)
else:
return jsonify(message='Command unknown')
return jsonify(message="Command unknown")
def put(self):
command = request.args['command']
@@ -196,10 +202,9 @@ class FileAPI(Resource):
@staticmethod
def pack_fn(filepath):
import tempfile
filepath_zip = tempfile.mkstemp(suffix=".zip")
import os
assert(os.path.exists(filepath) and not os.path.isdir(filepath))
modpath = \
os.path.normpath(
os.path.abspath(
@@ -215,8 +220,10 @@ class FileAPI(Resource):
sys.path.append(modpath)
del modpath
import tempfile
import packer
filepath_zip = tempfile.mkstemp(suffix=".zip")
print(" Source path:", filepath)
print(" Zip path:", filepath_zip)