本文整理汇总了Python中webui.models.Collection.from_json方法的典型用法代码示例。如果您正苦于以下问题:Python Collection.from_json方法的具体用法?Python Collection.from_json怎么用?Python Collection.from_json使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类webui.models.Collection
的用法示例。
在下文中一共展示了Collection.from_json方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: after_return
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def after_return(self, status, retval, task_id, args, kwargs, einfo):
logger.debug('DeleteFileTask.after_return(%s, %s, %s, %s, %s)' % (status, retval, task_id, args, kwargs))
collection_path = args[2]
collection = Collection.from_json(collection_path)
lockstatus = collection.unlock(task_id)
gitstatus.update(settings.MEDIA_BASE, collection_path)
gitstatus.unlock(settings.MEDIA_BASE, 'delete_file')
示例2: csv_export
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def csv_export( request, repo, org, cid, model=None ):
"""
"""
if (not model) or (not (model in ['entity','file'])):
raise Http404
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
things = {'entity':'objects', 'file':'files'}
csv_path = export_csv_path(collection.path, model)
csv_filename = os.path.basename(csv_path)
if model == 'entity':
file_url = reverse('webui-collection-csv-entities', args=[repo,org,cid])
elif model == 'file':
file_url = reverse('webui-collection-csv-files', args=[repo,org,cid])
# do it
result = csv_export_model.apply_async( (collection.path,model), countdown=2)
# add celery task_id to session
celery_tasks = request.session.get(settings.CELERY_TASKS_SESSION_KEY, {})
# IMPORTANT: 'action' *must* match a message in webui.tasks.TASK_STATUS_MESSAGES.
task = {'task_id': result.task_id,
'action': 'webui-csv-export-model',
'collection_id': collection.id,
'collection_url': collection.url(),
'things': things[model],
'file_name': csv_filename,
'file_url': file_url,
'start': datetime.now().strftime(settings.TIMESTAMP_FORMAT),}
celery_tasks[result.task_id] = task
request.session[settings.CELERY_TASKS_SESSION_KEY] = celery_tasks
return HttpResponseRedirect( reverse('webui-collection', args=[repo,org,cid]) )
示例3: csv_download
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def csv_download( request, repo, org, cid, model=None ):
"""Offers CSV file in settings.CSV_TMPDIR for download.
File must actually exist in settings.CSV_TMPDIR and be readable.
File must be readable by Python csv module.
If all that is true then it must be a legal CSV file.
"""
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
path = export_csv_path(collection.path, model)
filename = os.path.basename(path)
if not os.path.exists(path):
raise Http404
import csv
# TODO use vars from migrations.densho or put them in settings.
CSV_DELIMITER = ','
CSV_QUOTECHAR = '"'
CSV_QUOTING = csv.QUOTE_ALL
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
writer = csv.writer(response, delimiter=CSV_DELIMITER, quotechar=CSV_QUOTECHAR, quoting=CSV_QUOTING)
with open(path, 'rb') as f:
reader = csv.reader(f, delimiter=CSV_DELIMITER, quotechar=CSV_QUOTECHAR, quoting=CSV_QUOTING)
for row in reader:
writer.writerow(row)
return response
示例4: collections
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def collections( request ):
"""
We are displaying collection status vis-a-vis the project Gitolite server.
It takes too long to run git-status on every repo so, if repo statuses are not
cached they will be updated by jQuery after page load has finished.
"""
collections = []
collection_status_urls = []
for o in gitolite.get_repos_orgs():
repo,org = o.split('-')
colls = []
for coll in commands.collections_local(settings.MEDIA_BASE, repo, org):
if coll:
coll = os.path.basename(coll)
c = coll.split('-')
repo,org,cid = c[0],c[1],c[2]
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
colls.append(collection)
gitstatus = collection.gitstatus()
if gitstatus and gitstatus.get('sync_status'):
collection.sync_status = gitstatus['sync_status']
else:
collection_status_urls.append( "'%s'" % collection.sync_status_url())
collections.append( (o,repo,org,colls) )
# load statuses in random order
random.shuffle(collection_status_urls)
return render_to_response(
'webui/collections/index.html',
{'collections': collections,
'collection_status_urls': ', '.join(collection_status_urls),},
context_instance=RequestContext(request, processors=[])
)
示例5: merge
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def merge( request, repo, org, cid ):
"""
Decides how to merge the various files in a merge conflict.
Sends user around to different editors and things until everything is merged.
"""
collection_path = Collection.collection_path(request,repo,org,cid)
repository = dvcs.repository(collection_path)
collection = Collection.from_json(collection_path)
task_id = collection.locked()
status = commands.status(collection_path)
ahead = collection.repo_ahead()
behind = collection.repo_behind()
diverged = collection.repo_diverged()
conflicted = collection.repo_conflicted()
unmerged = dvcs.list_conflicted(repository)
staged = dvcs.list_staged(repository)
if request.method == 'POST':
form = MergeCommitForm(request.POST)
if form.is_valid():
which = form.cleaned_data['which']
if which == 'merge':
dvcs.merge_commit(repository)
committed = 1
elif which == 'commit':
dvcs.diverge_commit(repository)
committed = 1
else:
committed = 0
if committed:
if task_id:
collection.unlock(task_id)
messages.error(request, 'Merge conflict has been resolved. Please sync to make your changes available to other users.')
return HttpResponseRedirect( reverse('webui-collection', args=[repo,org,cid]) )
return HttpResponseRedirect( reverse('webui-merge', args=[repo,org,cid]) )
else:
which = 'unknown'
if conflicted and not unmerged:
which = 'merge'
elif diverged and staged:
which = 'commit'
form = MergeCommitForm({'path':collection_path, 'which':which,})
return render_to_response(
'webui/merge/index.html',
{'repo': repo,
'org': org,
'cid': cid,
'collection_path': collection_path,
'collection': collection,
'status': status,
'conflicted': conflicted,
'ahead': ahead,
'behind': behind,
'unmerged': unmerged,
'diverged': diverged,
'staged': staged,
'form': form,},
context_instance=RequestContext(request, processors=[])
)
示例6: sync_status_ajax
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def sync_status_ajax( request, repo, org, cid ):
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
gitstatus = collection.gitstatus()
if gitstatus:
sync_status = gitstatus['sync_status']
if sync_status.get('timestamp',None):
sync_status['timestamp'] = sync_status['timestamp'].strftime(settings.TIMESTAMP_FORMAT)
return HttpResponse(json.dumps(sync_status), mimetype="application/json")
raise Http404
示例7: new_access
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def new_access( request, repo, org, cid, eid, role, sha1 ):
"""Generate a new access file for the specified file.
NOTE: There is no GET for this view. GET requests will redirect to entity.
"""
git_name = request.session.get('git_name')
git_mail = request.session.get('git_mail')
if not git_name and git_mail:
messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED'])
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
entity = Entity.from_json(Entity.entity_path(request,repo,org,cid,eid))
if collection.locked():
messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id))
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
collection.repo_fetch()
if collection.repo_behind():
messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_BEHIND'].format(collection.id))
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
if entity.locked():
messages.error(request, WEBUI_MESSAGES['VIEWS_ENT_LOCKED'])
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
file_ = entity.file(repo, org, cid, eid, role, sha1)
#
if request.method == 'POST':
form = NewAccessFileForm(request.POST)
if form.is_valid():
src_path = form.cleaned_data['path']
# start tasks
result = entity_add_access.apply_async(
(git_name, git_mail, entity, file_),
countdown=2)
result_dict = result.__dict__
entity.files_log(1,'START task_id %s' % result.task_id)
entity.files_log(1,'ddrlocal.webui.file.new_access')
entity.files_log(1,'Locking %s' % entity.id)
# lock entity
lockstatus = entity.lock(result.task_id)
if lockstatus == 'ok':
entity.files_log(1, 'locked')
else:
entity.files_log(0, lockstatus)
# add celery task_id to session
celery_tasks = request.session.get(settings.CELERY_TASKS_SESSION_KEY, {})
# IMPORTANT: 'action' *must* match a message in webui.tasks.TASK_STATUS_MESSAGES.
task = {'task_id': result.task_id,
'action': 'webui-file-new-access',
'filename': os.path.basename(src_path),
'file_url': file_.url(),
'entity_id': entity.id,
'start': datetime.now().strftime(settings.TIMESTAMP_FORMAT),}
celery_tasks[result.task_id] = task
#del request.session[settings.CELERY_TASKS_SESSION_KEY]
request.session[settings.CELERY_TASKS_SESSION_KEY] = celery_tasks
# feedback
messages.success(request, WEBUI_MESSAGES['VIEWS_FILES_NEWACCESS'] % os.path.basename(src_path))
# redirect to entity
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
示例8: changelog
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def changelog( request, repo, org, cid ):
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
alert_if_conflicted(request, collection)
return render_to_response(
'webui/collections/changelog.html',
{'repo': repo,
'org': org,
'cid': cid,
'collection': collection,},
context_instance=RequestContext(request, processors=[])
)
示例9: edit_ead
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def edit_ead( request, repo, org, cid ):
"""
on GET
- reads contents of EAD.xml
- puts in form, in textarea
- user edits XML
on POST
- write contents of field to EAD.xml
- commands.update
"""
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
if collection.locked():
messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id))
return HttpResponseRedirect( reverse('webui-collection', args=[repo,org,cid]) )
ead_path_rel = 'ead.xml'
ead_path_abs = os.path.join(collection.path, ead_path_rel)
#
if request.method == 'POST':
form = UpdateForm(request.POST)
if form.is_valid():
git_name = request.session.get('git_name')
git_mail = request.session.get('git_mail')
if git_name and git_mail:
xml = form.cleaned_data['xml']
# TODO validate XML
with open(ead_path_abs, 'w') as f:
f.write(xml)
exit,status = commands.update(git_name, git_mail,
collection.path, [ead_path_rel],
agent=settings.AGENT)
if exit:
messages.error(request, WEBUI_MESSAGES['ERROR'].format(status))
else:
messages.success(request, 'Collection metadata updated')
return HttpResponseRedirect( reverse('webui-collection', args=[repo,org,cid]) )
else:
messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED'])
else:
with open(ead_path_abs, 'r') as f:
xml = f.read()
form = UpdateForm({'xml':xml,})
return render_to_response(
'webui/collections/edit-ead.html',
{'repo': repo,
'org': org,
'cid': cid,
'collection_uid': collection.id,
'collection': collection,
'form': form,},
context_instance=RequestContext(request, processors=[])
)
示例10: unlock
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def unlock( request, repo, org, cid, task_id ):
"""Provides a way to remove collection lockfile through the web UI.
"""
git_name = request.session.get('git_name')
git_mail = request.session.get('git_mail')
if not git_name and git_mail:
messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED'])
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
if task_id and collection.locked() and (task_id == collection.locked()):
collection.unlock(task_id)
messages.success(request, 'Collection <b>%s</b> unlocked.' % collection.id)
return HttpResponseRedirect( reverse('webui-collection', args=[repo,org,cid]) )
示例11: detail
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def detail( request, repo, org, cid ):
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
alert_if_conflicted(request, collection)
return render_to_response(
'webui/collections/detail.html',
{'repo': repo,
'org': org,
'cid': cid,
'collection': collection,
'unlock_task_id': collection.locked(),},
context_instance=RequestContext(request, processors=[])
)
示例12: edit
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def edit( request, repo, org, cid, eid, role, sha1 ):
git_name = request.session.get('git_name')
git_mail = request.session.get('git_mail')
if not git_name and git_mail:
messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED'])
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
entity = Entity.from_json(Entity.entity_path(request,repo,org,cid,eid))
if collection.locked():
messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id))
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
collection.repo_fetch()
if collection.repo_behind():
messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_BEHIND'].format(collection.id))
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
if entity.locked():
messages.error(request, WEBUI_MESSAGES['VIEWS_ENT_LOCKED'])
return HttpResponseRedirect( reverse('webui-entity', args=[repo,org,cid,eid]) )
file_ = entity.file(repo, org, cid, eid, role, sha1)
#
if request.method == 'POST':
form = DDRForm(request.POST, fields=FILE_FIELDS)
if form.is_valid():
file_.form_post(form)
file_.dump_json()
# commit files, delete cache, update search index, update git status
entity_file_edit(request, collection, file_, git_name, git_mail)
return HttpResponseRedirect( file_.url() )
else:
form = DDRForm(file_.form_prep(), fields=FILE_FIELDS)
return render_to_response(
'webui/files/edit-json.html',
{'repo': file_.repo,
'org': file_.org,
'cid': file_.cid,
'eid': file_.eid,
'role': file_.role,
'sha1': file_.sha1,
'collection': collection,
'entity': entity,
'file': file_,
'form': form,
},
context_instance=RequestContext(request, processors=[])
)
示例13: git_status
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def git_status( request, repo, org, cid ):
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
alert_if_conflicted(request, collection)
gitstatus = collection.gitstatus()
return render_to_response(
'webui/collections/git-status.html',
{'repo': repo,
'org': org,
'cid': cid,
'collection': collection,
'status': gitstatus['status'],
'astatus': gitstatus['annex_status'],
'timestamp': gitstatus['timestamp'],
},
context_instance=RequestContext(request, processors=[])
)
示例14: collection_save
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def collection_save(collection_path, updated_files, git_name, git_mail):
"""The time-consuming parts of collection-edit.
@param collection_path: str Absolute path to collection
@param git_name: Username of git committer.
@param git_mail: Email of git committer.
"""
logger.debug('collection_save(%s,%s,%s,%s)' % (
git_name, git_mail, collection_path, updated_files))
collection = Collection.from_json(collection_path)
gitstatus.lock(settings.MEDIA_BASE, 'collection_edit')
exit,status = collection.save(updated_files, git_name, git_mail)
gitstatus_update.apply_async((collection_path,), countdown=2)
return status,collection_path
示例15: browse
# 需要导入模块: from webui.models import Collection [as 别名]
# 或者: from webui.models.Collection import from_json [as 别名]
def browse( request, repo, org, cid, eid, role='master' ):
"""Browse for a file in vbox shared folder.
"""
collection = Collection.from_json(Collection.collection_path(request,repo,org,cid))
entity = Entity.from_json(Entity.entity_path(request,repo,org,cid,eid))
path = request.GET.get('path')
home = None
parent = None
if path:
path_abs = os.path.join(settings.VIRTUALBOX_SHARED_FOLDER, path)
parent = os.path.dirname(path)
home = settings.VIRTUALBOX_SHARED_FOLDER
else:
path_abs = settings.VIRTUALBOX_SHARED_FOLDER
listdir = []
if os.path.exists(path_abs):
for x in os.listdir(path_abs):
xabs = os.path.join(path_abs, x)
rel = xabs.replace(settings.VIRTUALBOX_SHARED_FOLDER, '')
if rel and rel[0] == '/':
rel = rel[1:]
isdir = os.path.isdir(xabs)
if isdir:
x = '%s/' % x
mtime = datetime.fromtimestamp(os.path.getmtime(xabs))
size = None
if not isdir:
size = os.path.getsize(xabs)
attribs = {'basename':x, 'rel':rel, 'path':xabs, 'isdir':isdir, 'size':size, 'mtime':mtime}
if os.path.exists(xabs):
listdir.append(attribs)
return render_to_response(
'webui/files/browse.html',
{'repo': repo,
'org': org,
'cid': cid,
'eid': eid,
'collection_uid': collection.id,
'collection': collection,
'entity': entity,
'role': role,
'listdir': listdir,
'parent': parent,
'home': home,},
context_instance=RequestContext(request, processors=[])
)