Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
MerginProject,
InvalidProject
)
from mergin.client_pull import download_project_async, download_project_is_running, download_project_finalize, download_project_cancel
from mergin.client_pull import pull_project_async, pull_project_is_running, pull_project_finalize, pull_project_cancel
from mergin.client_push import push_project_async, push_project_is_running, push_project_finalize, push_project_cancel


def get_changes_count(diff):
Expand Down Expand Up @@ -99,6 +102,20 @@ def init(project, directory, public):
click.secho(str(e), fg='red')


@cli.command()
@click.option('--flag', help="What kind of projects (e.g. 'created' for just my projects,"
"'shared' for projects shared with me. No flag means returns all public projects.")
def list_projects(flag):
"""List projects on the server"""
filter_str = "(filter flag={})".format(flag) if flag is not None else "(all public)"
click.echo('List of projects {}:'.format(filter_str))
c = _init_client()
projects_list = c.projects_list(flag=flag)
for project in projects_list:
full_name = "{} / {}".format(project["namespace"], project["name"])
click.echo(" {:40}\t{:6.1f} MB\t{}".format(full_name, project["disk_usage"]/(1024*1024), project['version']))


@cli.command()
@click.argument('project')
@click.argument('directory', type=click.Path(), required=False)
Expand All @@ -111,6 +128,39 @@ def download(project, directory, parallel):
try:
c.download_project(project, directory, parallel)
click.echo('Done')
except Exception as e:
print("EXCEPTION!!!", type(e))
click.secho(str(e), fg='red')


@cli.command()
@click.argument('project')
@click.argument('directory', type=click.Path(), required=False)
def download2(project, directory):
"""Download last version of mergin project"""

c = _init_client()
directory = directory or os.path.basename(project)

click.echo('Downloading into {}'.format(directory))
try:
job = download_project_async(c, project, directory)

import time
with click.progressbar(length=job.total_size) as bar:
last_transferred_size = 0
while download_project_is_running(job):
time.sleep(1/10) # 100ms
new_transferred_size = job.transferred_size
bar.update(new_transferred_size - last_transferred_size) # the update() needs increment only
last_transferred_size = new_transferred_size

download_project_finalize(job)

click.echo('Done')
except KeyboardInterrupt:
print("Cancelling...")
download_project_cancel(job)
except Exception as e:
click.secho(str(e), fg='red')

Expand Down Expand Up @@ -154,6 +204,38 @@ def push(parallel):
click.secho(str(e), fg='red')


@cli.command()
def push2():
"""Upload local changes into Mergin repository"""

c = _init_client()
directory = os.getcwd()

try:
job = push_project_async(c, directory)

if job is not None: # if job is none, we don't upload any files, and the transaction is finished already
import time
with click.progressbar(length=job.total_size) as bar:
last_transferred_size = 0
while push_project_is_running(job):
time.sleep(1/10) # 100ms
new_transferred_size = job.transferred_size
bar.update(new_transferred_size - last_transferred_size) # the update() needs increment only
last_transferred_size = new_transferred_size

push_project_finalize(job)

click.echo('Done')
except InvalidProject:
click.echo('Invalid project directory')
except KeyboardInterrupt:
print("Cancelling...")
push_project_cancel(job)
except Exception as e:
click.secho(str(e), fg='red')


@cli.command()
@click.option('--parallel/--no-parallel', default=True, help='Download by sending parallel requests')
def pull(parallel):
Expand All @@ -167,6 +249,41 @@ def pull(parallel):
click.secho('Invalid project directory', fg='red')


@cli.command()
def pull2():
"""Fetch changes from Mergin repository"""

c = _init_client()
directory = os.getcwd()

try:
job = pull_project_async(c, directory)

if job is None:
click.echo('Project is up to date')
return

import time
with click.progressbar(length=job.total_size) as bar:
last_transferred_size = 0
while pull_project_is_running(job):
time.sleep(1/10) # 100ms
new_transferred_size = job.transferred_size
bar.update(new_transferred_size - last_transferred_size) # the update() needs increment only
last_transferred_size = new_transferred_size

pull_project_finalize(job)

click.echo('Done')
except InvalidProject:
click.echo('Invalid project directory')
except KeyboardInterrupt:
print("Cancelling...")
pull_project_cancel(job)
#except Exception as e:
# click.secho(str(e), fg='red')


@cli.command()
@click.argument('directory', required=False)
def modtime(directory):
Expand Down
11 changes: 5 additions & 6 deletions mergin/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from .client import (
MerginClient,
MerginProject,
ClientError,
InvalidProject
)
from . import common

from .client import MerginClient
from .common import ClientError
from .merginproject import MerginProject, InvalidProject
Loading