Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F92320825
admin.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, Nov 19, 09:37
Size
6 KB
Mime Type
text/x-python
Expires
Thu, Nov 21, 09:37 (2 d)
Engine
blob
Format
Raw Data
Handle
22398166
Attached To
R3600 invenio-infoscience
admin.py
View Options
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2014, 2015 CERN.
#
# Invenio is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# Invenio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Invenio; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
"""Knowledge Flask Blueprint."""
import
os
from
flask
import
request
from
invenio.base.i18n
import
_
from
invenio.ext.admin.views
import
ModelView
from
invenio.ext.sqlalchemy
import
db
from
invenio.modules.search.models
import
Collection
from
.forms
import
DynamicKnowledgeForm
,
KnowledgeForm
,
KnwKBRVALForm
,
\
TaxonomyKnowledgeForm
,
WrittenAsKnowledgeForm
from
.models
import
KnwKB
,
KnwKBRVAL
def
KnwKBRVAL_id_knwKB_formatter
(
view
,
context
,
model
,
name
):
"""Formatter for the id_knwKB: return the Knowledge name instead."""
return
model
.
kb
.
name
def
Knowledge_kbtype_formatter
(
view
,
context
,
model
,
name
):
"""Formatter for the kbtype: return the Knowledge name instead."""
value
=
model
.
kbtype
return
next
((
key
for
key
,
val
in
KnwKB
.
KNWKB_TYPES
.
items
()
if
val
==
value
),
None
)
class
KnwKBRVALAdmin
(
ModelView
):
"""Flask-Admin module to manage Knowledge Base Mappings."""
form
=
KnwKBRVALForm
column_list
=
[
'id_knwKB'
,
'm_key'
,
'm_value'
]
column_labels
=
dict
(
id_knwKB
=
'Knowledge'
,
m_key
=
'Map From'
,
m_value
=
'To'
,)
column_formatters
=
dict
(
id_knwKB
=
KnwKBRVAL_id_knwKB_formatter
)
column_sortable_list
=
(
'm_key'
,
'm_value'
,
'id_knwKB'
)
column_searchable_list
=
(
'm_key'
,
'm_value'
)
column_default_sort
=
'id_knwKB'
# TODO add filter for id_knwKB!
column_filters
=
[
'm_key'
]
def
__init__
(
self
,
app
,
*
args
,
**
kwargs
):
"""Constructor.
:param app: flask application
"""
super
(
KnwKBRVALAdmin
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
class
KnowledgeAdmin
(
ModelView
):
"""Flask-Admin module to manage knowledge."""
_can_create
=
True
_can_edit
=
True
# TODO check if multiple deletes of taxonomy type, also delete the
# associated files.
_can_delete
=
True
acc_view_action
=
'cfgbibknowledge'
acc_edit_action
=
'cfgbibknowledge'
acc_delete_action
=
'cfgbibknowledge'
form
=
KnowledgeForm
column_list
=
(
'name'
,
'kbtype'
,
'description'
)
column_formatters
=
dict
(
kbtype
=
Knowledge_kbtype_formatter
)
column_filters
=
(
'kbtype'
,)
# FIXME wait that Issue #2690 is fixed to finish the works
# column_choices = {
# 'kbtype': [(v, k) for (k, v) in KnwKB.KNWKB_TYPES.iteritems()]
# }
column_sortable_list
=
(
'name'
,
'kbtype'
)
list_template
=
'knowledge/list.html'
def
after_model_change
(
self
,
form
,
model
,
is_created
):
"""Save model."""
super
(
KnowledgeAdmin
,
self
)
.
after_model_change
(
form
,
model
,
is_created
)
if
form
.
kbtype
.
data
==
KnwKB
.
KNWKB_TYPES
[
'dynamic'
]:
id_collection
=
form
.
id_collection
.
data
or
None
collection
=
Collection
.
query
.
filter_by
(
id
=
id_collection
)
.
one
()
if
id_collection
else
None
model
.
set_dyn_config
(
field
=
form
.
output_tag
.
data
,
expression
=
form
.
search_expression
.
data
,
collection
=
collection
)
if
form
.
kbtype
.
data
==
KnwKB
.
KNWKB_TYPES
[
'taxonomy'
]:
if
form
.
tfile
.
data
:
file_name
=
model
.
get_filename
()
file_data
=
request
.
files
[
form
.
tfile
.
name
]
.
read
()
with
open
(
file_name
,
'w'
)
as
f
:
f
.
write
(
file_data
)
def
edit_form
(
self
,
obj
=
None
):
"""Edit form."""
kbtype
=
request
.
args
[
'kbtype'
]
if
'kbtype'
in
request
.
args
else
'w'
if
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'written_as'
]:
self
.
form
=
WrittenAsKnowledgeForm
elif
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'dynamic'
]:
self
.
form
=
DynamicKnowledgeForm
else
:
self
.
form
=
TaxonomyKnowledgeForm
form
=
self
.
form
(
obj
=
obj
)
if
not
form
.
is_submitted
():
# load extra data: obj => form
if
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'dynamic'
]:
if
obj
.
kbdefs
:
form
.
id_collection
.
data
=
obj
.
kbdefs
.
id_collection
form
.
output_tag
.
data
=
obj
.
kbdefs
.
output_tag
form
.
search_expression
.
data
=
obj
.
kbdefs
.
search_expression
if
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'taxonomy'
]:
file_name
=
obj
.
get_filename
()
if
os
.
path
.
isfile
(
file_name
):
form
.
tfile
.
label
.
text
=
form
.
tfile
.
label
.
text
+
" *"
# TODO add the possibility to download the file
form
.
tfile
.
description
=
_
(
"Already uploaded
%(name)s
"
,
name
=
obj
.
get_filename
())
form
.
kbtype
.
data
=
kbtype
return
form
def
create_form
(
self
,
obj
=
None
):
"""Create form."""
kbtype
=
request
.
args
[
'kbtype'
]
if
'kbtype'
in
request
.
args
else
'w'
if
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'written_as'
]:
self
.
form
=
WrittenAsKnowledgeForm
elif
kbtype
==
KnwKB
.
KNWKB_TYPES
[
'dynamic'
]:
self
.
form
=
DynamicKnowledgeForm
else
:
self
.
form
=
TaxonomyKnowledgeForm
form
=
self
.
form
()
form
.
kbtype
.
data
=
kbtype
return
form
def
get_query
(
self
):
"""Get query."""
return
KnwKB
.
query
def
__init__
(
self
,
app
,
*
args
,
**
kwargs
):
"""Constructor.
:param app: flask application
"""
super
(
KnowledgeAdmin
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
def
register_admin
(
app
,
admin
):
"""Called on app initialization to register administration interface."""
category
=
'Knowledge'
admin
.
add_view
(
KnowledgeAdmin
(
app
,
KnwKB
,
db
.
session
,
name
=
'Knowledge Base'
,
category
=
category
,
endpoint
=
"kb"
)
)
admin
.
add_view
(
KnwKBRVALAdmin
(
app
,
KnwKBRVAL
,
db
.
session
,
name
=
"Knowledge Mappings"
,
category
=
category
,
endpoint
=
"kbrval"
)
)
Event Timeline
Log In to Comment