本文整理汇总了Python中tracim.lib.content.ContentApi类的典型用法代码示例。如果您正苦于以下问题:Python ContentApi类的具体用法?Python ContentApi怎么用?Python ContentApi使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ContentApi类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _build_sibling_list_of_tree_items
def _build_sibling_list_of_tree_items(self,
workspace: Workspace,
content: Content,
children: [NodeTreeItem],
select_active_node = False,
allowed_content_types: list = [],
ignored_item_ids: list = []) -> (Content, [NodeTreeItem]):
api = ContentApi(tmpl_context.current_user)
tree_items = []
parent = content.parent if content else None
viewable_content_types = self._get_treeviewable_content_types_or_none()
child_contents = api.get_child_folders(parent, workspace, allowed_content_types, ignored_item_ids, viewable_content_types)
for child in child_contents:
children_to_add = children if child==content else []
if child==content and select_active_node:
# The item is the requested node, so we select it
is_selected = True
elif content not in child_contents and select_active_node and child==content:
# The item is not present in the list, so we select its parent node
is_selected = True
else:
is_selected = False
new_item = NodeTreeItem(child, children_to_add, is_selected)
tree_items.append(new_item)
# This allow to show contents and folders group by type
tree_items = ContentApi.sort_tree_items(tree_items)
return parent, tree_items
示例2: get_one
def get_one(self,
page_id: str='-1',
revision_id: str=None,
size: int=300,
*args, **kwargs):
file_id = int(tg.request.controller_state.routing_args.get('file_id'))
page = int(page_id)
revision_id = int(revision_id) if revision_id != 'latest' else None
cache_path = CFG.get_instance().PREVIEW_CACHE_DIR
preview_manager = PreviewManager(cache_path, create_folder=True)
user = tmpl_context.current_user
content_api = ContentApi(user,
show_archived=True,
show_deleted=True)
if revision_id:
file_path = content_api.get_one_revision_filepath(revision_id)
else:
file = content_api.get_one(file_id, self._item_type)
file_path = content_api.get_one_revision_filepath(file.revision_id)
try:
path = preview_manager.get_jpeg_preview(file_path=file_path,
page=page,
height=size,
width=size)
with open(path, 'rb') as large:
result = large.read()
except PreviewGeneratorException:
result = None
return result
示例3: download_pdf_one
def download_pdf_one(self,
page_id: str,
revision_id: str=None,
*args, **kwargs):
file_id = int(tg.request.controller_state.routing_args.get('file_id'))
revision_id = int(revision_id) if revision_id != 'latest' else None
page = int(page_id)
cache_path = CFG.get_instance().PREVIEW_CACHE_DIR
preview_manager = PreviewManager(cache_path, create_folder=True)
user = tmpl_context.current_user
content_api = ContentApi(user,
show_archived=True,
show_deleted=True)
file = content_api.get_one(file_id, self._item_type)
if revision_id:
file_path = content_api.get_one_revision_filepath(revision_id)
else:
file = content_api.get_one(file_id, self._item_type)
file_path = content_api.get_one_revision_filepath(file.revision_id)
path = preview_manager.get_pdf_preview(file_path=file_path,
page=page)
file_suffix = ''
if page > -1:
file_suffix = '.page-{}'.format(page + 1)
tg.response.headers['Content-Disposition'] = \
'attachment; filename="{}{}.pdf"'.format(
file.label,
file_suffix,
)
with open(path, 'rb') as pdf:
return pdf.read()
示例4: download
def download(self, file_id, revision_id=None):
file_id = int(file_id)
revision_id = int(revision_id) if revision_id!='latest' else None
user = tmpl_context.current_user
workspace = tmpl_context.workspace
content_api = ContentApi(user)
revision_to_send = None
if revision_id:
item = content_api.get_one_from_revision(file_id, self._item_type, workspace, revision_id)
else:
item = content_api.get_one(file_id, self._item_type, workspace)
revision_to_send = None
if item.revision_to_serialize<=0:
for revision in item.revisions:
if not revision_to_send:
revision_to_send = revision
if revision.revision_id>revision_to_send.revision_id:
revision_to_send = revision
else:
for revision in item.revisions:
if revision.revision_id==item.revision_to_serialize:
revision_to_send = revision
break
content_type = 'application/x-download'
if revision_to_send.file_mimetype:
content_type = str(revision_to_send.file_mimetype)
tg.response.headers['Content-type'] = str(revision_to_send.file_mimetype)
tg.response.headers['Content-Type'] = content_type
tg.response.headers['Content-Disposition'] = str('attachment; filename="{}"'.format(revision_to_send.file_name))
return revision_to_send.file_content
示例5: test_mark_read
def test_mark_read(self):
uapi = UserApi(None)
groups = [GroupApi(None).get_one(Group.TIM_USER),
GroupApi(None).get_one(Group.TIM_MANAGER),
GroupApi(None).get_one(Group.TIM_ADMIN)]
user_a = uapi.create_user(email='[email protected]',
groups=groups, save_now=True)
user_b = uapi.create_user(email='[email protected]',
groups=groups, save_now=True)
wapi = WorkspaceApi(user_a)
workspace = wapi.create_workspace(
'test workspace',
save_now=True)
role_api = RoleApi(user_a)
role_api.create_one(user_b, workspace, UserRoleInWorkspace.READER, False)
cont_api_a = ContentApi(user_a)
cont_api_b = ContentApi(user_b)
page_1 = cont_api_a.create(ContentType.Page, workspace, None,
'this is a page', do_save=True)
for rev in page_1.revisions:
eq_(user_b not in rev.read_by.keys(), True)
cont_api_b.mark_read(page_1)
for rev in page_1.revisions:
eq_(user_b in rev.read_by.keys(), True)
示例6: current_folder
def current_folder(cls) -> Content:
content_api = ContentApi(tg.tmpl_context.current_user)
folder_id = int(tg.request.controller_state.routing_args.get('folder_id'))
folder = content_api.get_one(folder_id, ContentType.Folder, tg.tmpl_context.workspace)
tg.tmpl_context.folder_id = folder_id
tg.tmpl_context.folder = folder
return folder
示例7: _current_item_manually
def _current_item_manually(cls, item_id: int, item_type: str) -> Content:
# in case thread or page or other stuff is instanciated, then force
# the associated item to be available through generic name tmpl_context.item to be available
content_api = ContentApi(tg.tmpl_context.current_user)
item = content_api.get_one(item_id, item_type, tg.tmpl_context.workspace)
tg.tmpl_context.item_id = item.content_id
tg.tmpl_context.item = item
return item
示例8: treeview_root
def treeview_root(self, id='#',
current_id=None,
all_workspaces=True,
folder_allowed_content_types='',
ignore_id=None,
ignore_workspace_id=None):
all_workspaces = bool(int(all_workspaces))
# ignore_workspace_id is a string like 3,12,78,15
ignored_ids = [int(id) for id in ignore_workspace_id.split(',')] if ignore_workspace_id else None
if not current_id:
# Default case is to return list of workspaces
api = WorkspaceApi(tmpl_context.current_user)
workspaces = api.get_all_for_user(tmpl_context.current_user,
ignored_ids)
dictified_workspaces = Context(CTX.MENU_API).toDict(workspaces, 'd')
return dictified_workspaces
allowed_content_types = ContentType.allowed_types_from_str(folder_allowed_content_types)
ignored_item_ids = [int(ignore_id)] if ignore_id else []
# Now complex case: we must return a structured tree
# including the selected node, all parents (and their siblings)
workspace, content = convert_id_into_instances(current_id)
# The following step allow to select the parent folder when content itself is not visible in the treeview
if content and content.type!=ContentType.Folder and CFG.CST.TREEVIEW_ALL!=CFG.get_instance().WEBSITE_TREEVIEW_CONTENT:
content = content.parent if content.parent else None
# This is the init of the recursive-like build of the tree
content_parent = content
tree_items = []
# The first step allow to load child of selected item
# (for example, when you select a folder in the windows explorer,
# then the selected folder is expanded by default)
content_api = ContentApi(tmpl_context.current_user)
child_folders = content_api.get_child_folders(content_parent, workspace, allowed_content_types, ignored_item_ids)
if len(child_folders)>0:
first_child = child_folders[0]
content_parent, tree_items = self._build_sibling_list_of_tree_items(workspace, first_child, tree_items, False, allowed_content_types, ignored_item_ids)
content_parent, tree_items = self._build_sibling_list_of_tree_items(workspace, content_parent, tree_items, True, allowed_content_types, ignored_item_ids)
while content_parent:
# Do the same for the parent level
content_parent, tree_items = self._build_sibling_list_of_tree_items(workspace, content_parent, tree_items)
# Now, we have a tree_items list that is the root folders list,
# so we now have to put it as a child of a list of workspaces
should_select_workspace = not content
full_tree = self._build_sibling_list_of_workspaces(workspace, tree_items, should_select_workspace, all_workspaces)
return Context(CTX.MENU_API_BUILD_FROM_TREE_ITEM).toDict(full_tree, 'd')
示例9: mark_read
def mark_read(self, workspace_id, **kwargs):
user = tmpl_context.current_user
workspace_api = WorkspaceApi(user)
workspace = workspace_api.get_one(workspace_id)
content_api = ContentApi(user)
content_api.mark_read__workspace(workspace)
tg.redirect('/workspaces/{}'.format(workspace_id))
return DictLikeClass(fake_api=fake_api)
示例10: post
def post(self, label='', content=''):
workspace = tmpl_context.workspace
api = ContentApi(tmpl_context.current_user)
page = api.create(ContentType.Page, workspace, tmpl_context.folder, label)
page.description = content
api.save(page, ActionDescription.CREATION, do_notify=True)
tg.flash(_('Page created'), CST.STATUS_OK)
tg.redirect(tg.url('/workspaces/{}/folders/{}/pages/{}').format(tmpl_context.workspace_id, tmpl_context.folder_id, page.content_id))
示例11: getMemberList
def getMemberList(self) -> [_DAVResource]:
members = []
content_api = ContentApi(self.user)
visible_children = content_api.get_all(
self.content.content_id,
ContentType.Any,
self.workspace,
)
for content in visible_children:
content_path = '%s/%s' % (self.path, transform_to_display(content.get_label_as_file()))
if content.type == ContentType.Folder:
members.append(Folder(content_path, self.environ, self.workspace, content))
elif content.type == ContentType.File:
self._file_count += 1
members.append(File(content_path, self.environ, content))
else:
self._file_count += 1
members.append(OtherFile(content_path, self.environ, content))
if self._file_count > 0 and self.provider.show_history():
members.append(
HistoryFolder(
path=self.path + '/' + ".history",
environ=self.environ,
content=self.content,
workspace=self.workspace,
type=HistoryType.Standard
)
)
if self.provider.show_delete():
members.append(
DeletedFolder(
path=self.path + '/' + ".deleted",
environ=self.environ,
content=self.content,
workspace=self.workspace
)
)
if self.provider.show_archive():
members.append(
ArchivedFolder(
path=self.path + '/' + ".archived",
environ=self.environ,
content=self.content,
workspace=self.workspace
)
)
return members
示例12: _create_content_and_test
def _create_content_and_test(self, name, workspace, *args, **kwargs) -> Content:
"""
All extra parameters (*args, **kwargs) are for Content init
:return: Created Content instance
"""
content = Content(*args, **kwargs)
content.label = name
content.workspace = workspace
DBSession.add(content)
DBSession.flush()
eq_(1, ContentApi.get_canonical_query().filter(Content.label == name).count())
return ContentApi.get_canonical_query().filter(Content.label == name).one()
示例13: test_set_status_unknown_status
def test_set_status_unknown_status(self):
uapi = UserApi(None)
groups = [GroupApi(None).get_one(Group.TIM_USER),
GroupApi(None).get_one(Group.TIM_MANAGER),
GroupApi(None).get_one(Group.TIM_ADMIN)]
user = uapi.create_user(email='[email protected]',
groups=groups, save_now=True)
workspace = WorkspaceApi(user).create_workspace('test workspace',
save_now=True)
api = ContentApi(user)
c = api.create(ContentType.Folder, workspace, None, 'parent', True)
api.set_status(c, 'unknown-status')
示例14: put
def put(self, folder_id, label, can_contain_folders=False, can_contain_threads=False, can_contain_files=False, can_contain_pages=False):
# TODO - SECURE THIS
workspace = tmpl_context.workspace
api = ContentApi(tmpl_context.current_user)
next_url = ''
try:
folder = api.get_one(int(folder_id), ContentType.Folder, workspace)
subcontent = dict(
folder = True if can_contain_folders=='on' else False,
thread = True if can_contain_threads=='on' else False,
file = True if can_contain_files=='on' else False,
page = True if can_contain_pages=='on' else False
)
if label != folder.label:
# TODO - D.A. - 2015-05-25 - Allow to set folder description
api.update_content(folder, label, folder.description)
api.set_allowed_content(folder, subcontent)
api.save(folder)
tg.flash(_('Folder updated'), CST.STATUS_OK)
next_url = self.url(folder.content_id)
except Exception as e:
tg.flash(_('Folder not updated: {}').format(str(e)), CST.STATUS_ERROR)
next_url = self.url(int(folder_id))
tg.redirect(next_url)
示例15: get_all_fake
def get_all_fake(self, context_workspace: Workspace, context_folder: Content) -> [Content]:
"""
fake methods are used in other controllers in order to simulate a client/server api.
the "client" controller method will include the result into its own fake_api object
which will be available in the templates
:param context_workspace: the workspace which would be taken from tmpl_context if we were in the normal behavior
:return:
"""
workspace = context_workspace
content_api = ContentApi(tmpl_context.current_user)
items = content_api.get_all(context_folder.content_id, self._item_type, workspace)
dictified_items = Context(self._get_all_context).toDict(items)
return DictLikeClass(result = dictified_items)