inspirehep / inspire-next Goto Github PK
View Code? Open in Web Editor NEWThe INSPIRE repo.
Home Page: https://inspirehep.net
License: GNU General Public License v3.0
The INSPIRE repo.
Home Page: https://inspirehep.net
License: GNU General Public License v3.0
Add the following:
schema:
{'references': {'type': 'list', 'force': True}}
to the fields that should be lists to simplify handling them in inspire.cfg
.
in literature.py
, the function get_title()
expects metadata['title']
to be a dictionary while sometimes it will not be.
While working to fix #88 I have seen that the main INSPIRE page contains the file search_box.js
which is not AMD compatible so the following line gives an error:
return $("#" + containerId + " a[href=" + href + "]").tab('show');
The module should be converted using:
Define
to declare the modulerequire("bootstrap")
to get $.fn.tab availableThis should be tested using the variables ASSETS_DEBUG = False
and REQUIREJS_RUN_IN_DEBUG = True
Note: there are other issues related to typeahead and facets JS not being requirejs compatible, I will create a separate issue in Invenio
We have the following issue in our forms Eonasdan/tempus-dominus#1036 (comment)
Checking the demos of datetimepicker, it looks like the correct default behaviour is for the time picker to appear on top of the input when the input is at the bottom of the page.
Might be some problem with our markup.
We have an issue with the upgrade script collections_2015_05_28_recjson_tag_value
I think the reason is simply that the tag is named differently on INSPIRE:
SELECT id,name,value FROM tag where value like '%980%';
+----+--------------------+--------+
| id | name | value |
+----+--------------------+--------+
| 51 | collection | 980__a |
| 52 | collection deleted | 980__c |
+----+--------------------+--------+
2 rows in set (0.00 sec)
While the upgrade script checks for name == "collection identifier"
.
Is it safe to simply rename on INSPIRE to collection identifier
?
EDIT: I noticed this when running inveniomanage upgrader check
:
>>> Running pre-upgrade checks...
>>> ERROR: Pre-upgrade check for collections_2015_05_28_recjson_tag_value failed with the following errors:
(-) Missing 'collection identifier' tag.
>>> ERROR: Upgrade check failed. Aborting.
Currently, the main-container
class is added in page.html
on every page except search.index
. This causes some padding to appear before the content of for example the Holding Pen.
Is this legacy already or shall we only use it on the applicable pages?
.main-container {
padding-top: 50px;
padding-bottom: 50px;
}
The point is that I would not like to use it on the Holding Pen pages.
It'd be nice to use testing frameworks for JavaScript.
Our custom JS libraries for the forms.
Reproduced also on the https://inspirelabstest.cern.ch/. Just open the dev console of the browser and try to focus/unfocus on the input of the search box. The below error is given:
Uncaught TypeError: Cannot read property 'start' of undefined typeahead.js:419
If you also start typing, the focus hangs on the search box.
@kneczaj Any ideas on it?
The existing journal workflows need to be ported to use the new hepcrawl
service based on scrapy
. Scheduled and one-shot harvests can be made by triggering harvests via appropriate Celery tasks which integrates with the scrapyd
service. The results are then pushed back to INSPIRE when crawling is completed (or in error state) and appropriate HEP ingestion workflows are launched (WIP in #730).
arxiv_harvest_math
to be generic (unified to hep_ingestion
).hepcrawl
hepcrawl
:hepcrawl
Edit: Updated June 2016
In the DOI rule https://github.com/inspirehep/inspire-next/blob/master/inspire/dojson/hep/fields/bd01x09x.py#L55 we are adding as a doi
key any value that comes in the field 024
.
@hep.over('doi', '^024[1032478_][10_]')
@utils.for_each_value
@utils.filter_values
def doi(self, key, value):
"""Other Standard Identifier."""
return {
'doi': value.get('a')
}
Problem is that 024 field is reused for other identifiers that are not DOIs.
To solve this we should only add in the doi
key values that contain $$2DOI
@hep.over('doi', '^024[1032478_][10_]')
@utils.for_each_value
@utils.filter_values
def doi(self, key, value):
"""Other Standard Identifier."""
if value.get("2").lower() == "doi":
return {
'doi': value.get('a')
}
Then we will have to add in their appropriate keys the rest of the identifiers found in 024
.
The following error is happening sometimes when accessing the Holding Pen table and also when accessing the submission form in qa
branch.
* 2015-06-16 13:52:18 -> UndefinedError: 'score' is undefined (filters.py:657:do_round)
** User details
agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36
email: inspirelabs-admins@cern.ch
family_name:
given_names:
group: []
guest: 0
id: 1
login_method: Local
nickname: admin
note: 1
precached_allowed_deposition_types: set(['literature'])
precached_canseehiddenmarctags: True
precached_permitted_restricted_collections: []
precached_sendcomments: False
precached_useadmin: True
precached_usealerts: True
precached_useapprove: True
precached_usebaskets: True
precached_usegroups: True
precached_useloans: True
precached_usemessages: True
precached_usepaperattribution: True
precached_usepaperclaim: True
precached_usestats: True
precached_usesuperadmin: True
precached_viewclaimlink: False
precached_viewsubmissions: False
referer: <https://qa.inspirehep.net/>
remote_host:
remote_ip: 188.184.151.228
session: None
settings: {'login_method': 'Local'}
uid: 1
uri: </submit/literature/14208>
** Traceback details
Traceback (most recent call last):
File "/opt/inspire/src/invenio/invenio/ext/legacy/__init__.py", line 119, in __call__
response = self.app.full_dispatch_request()
File "/opt/inspire/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/inspire/lib/python2.7/site-packages/flask_restful/__init__.py", line 265, in error_router
return original_handler(e)
File "/opt/inspire/src/invenio/invenio/base/wrappers.py", line 133, in handle_user_exception
return super(Flask, self).handle_user_exception(e)
File "/opt/inspire/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/inspire/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/inspire/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/inspire/lib/python2.7/site-packages/flask_login.py", line 758, in decorated_view
return func(*args, **kwargs)
File "/opt/inspire/src/invenio/invenio/modules/deposit/views/deposit.py", line 75, in inner
return f(*args, **kwargs)
File "/opt/inspire/lib/python2.7/site-packages/flask_principal.py", line 199, in _decorated
rv = f(*args, **kw)
File "/opt/inspire/src/invenio/invenio/modules/deposit/views/deposit.py", line 313, in run
return deposition.run_workflow()
File "/opt/inspire/src/invenio/invenio/modules/deposit/models.py", line 1161, in run_workflow
self.engine = self.type.run_workflow(self)
File "/opt/inspire/src/invenio/invenio/modules/deposit/models.py", line 480, in run_workflow
module_name="webdeposit"
File "/opt/inspire/src/invenio/invenio/modules/workflows/models.py", line 629, in start_workflow
return start_func(workflow_name, data=[self], **kwargs)
File "/opt/inspire/src/invenio/invenio/modules/workflows/api.py", line 99, in start
return run_worker(workflow_name, data, **kwargs)
File "/opt/inspire/src/invenio/invenio/modules/workflows/worker_engine.py", line 45, in run_worker
run_workflow(wfe=engine, data=objects, **kwargs)
File "/opt/inspire/src/invenio/invenio/modules/workflows/client.py", line 75, in run_workflow
workflow_halted.send(current_obj)
File "/opt/inspire/lib/python2.7/site-packages/blinker/base.py", line 267, in send
for receiver in self.receivers_for(sender)]
File "/opt/inspire/src/inspire/inspire/modules/workflows/receivers.py", line 39, in precache_holdingpen_row
get_formatted_holdingpen_object(sender)
File "/opt/inspire/src/invenio/invenio/modules/workflows/utils.py", line 278, in get_formatted_holdingpen_object
results = generate_formatted_holdingpen_object(bwo)
File "/opt/inspire/src/invenio/invenio/modules/workflows/utils.py", line 312, in generate_formatted_holdingpen_object
"additional": workflow_definition.get_additional(bwo),
File "/opt/inspire/src/inspire/inspire/modules/deposit/workflows/literature.py", line 245, in get_additional
overall_score=core_guessing.get("overall_score"))
File "/opt/inspire/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template
context, ctx.app)
File "/opt/inspire/lib/python2.7/site-packages/flask/templating.py", line 110, in _render
rv = template.render(context)
File "/opt/inspire/lib/python2.7/site-packages/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/opt/inspire/lib/python2.7/site-packages/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "/opt/inspire/src/inspire/inspire/modules/workflows/views/../templates/workflows/styles/harvesting_record_additional.html", line 35, in top-level template code
{{decision}} ({{ score|round(2) }})
File "/opt/inspire/lib/python2.7/site-packages/jinja2/filters.py", line 657, in do_round
return round(value, precision)
UndefinedError: 'score' is undefined
** Stack frame details
Frame do_round in /opt/inspire/lib/python2.7/site-packages/jinja2/filters.py at line 657
-------------------------------------------------------------------------------
654 if not method in ('common', 'ceil', 'floor'):
655 raise FilterArgumentError('method must be common, ceil or floor')
656 if method == 'common':
----> 657 return round(value, precision)
658 func = getattr(math, method)
659 return func(value * (10 ** precision)) / (10 ** precision)
660
-------------------------------------------------------------------------------
method = "'common'"
value = 'Undefined'
precision = '2'
Frame top-level template code in /opt/inspire/src/inspire/inspire/modules/workflows/views/../templates/workflows/styles/harvesting_record_additional.html at line 35
alternate_urls = "{u'en': u'http://qa.inspirehep.net/submit/literature/14208?ln=en'}"
object = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
easy_search_form = '<invenio.modules.search.forms.EasySearchForm object at 0x7fd146b86ed0>'
current_menu = '<flask_menu.MenuEntryMixin object at 0x7fd17d289e90>'
searchbar_enable = 'True'
lipsum = '<function generate_lorem_ipsum at 0x7fd17643d050>'
ngettext = '<function ngettext at 0x7fd176f83d70>'
get_record = "<bound method StorageEngine.get_record of <class 'invenio.modules.records.api.Record'>>"
session = "<Session {'websearch-last-query': '/search?cc=HEP', 'inspire-last-search-params': MultiDict([('cc', u'HEP')]), 'csrf_token': 'aae5894c8f2b4c08a9dbde3d6b084cbe0773b314', 'user_id': 1L, u'oauth_token_orcid_next_url': u'https://qa.inspirehep.net', 'author_new_referrer': None, 'identity.id': 1L, '_fresh': True, '_uid': 1L, 'inspire-current-collection': u'HEP', 'uid': 1L, '_id': '76362c3f7c76c65e8bc8f2164b688b9c', 'identity.auth_type': None, 'websearch-last-query-hits': intbitset([]), '_permanent': [...]
top_words = 'None'
get_flashed_messages = '<function get_flashed_messages at 0x7fd17666e410>'
keywords = 'None'
core = 'None'
canonical_url = "u'http://qa.inspirehep.net/submit/literature/14208'"
_ = '<function _gettext_alias at 0x7fd176ca6140>'
url_for = '<function invenio_url_for at 0x7fd1468917d0>'
g = "<flask.g of 'invenio.base'>"
macros = "<TemplateModule 'workflows/macros.html'>"
breadcrumbs = '[<flask_menu.MenuEntryMixin object at 0x7fd146201a90>, <flask_menu.MenuEntryMixin object at 0x7fd146245110>]'
decision = 'Undefined'
request = "<LegacyRequest 'https://qa.inspirehep.net/submit/literature/14208' [GET]>"
core_words = 'Undefined'
gettext = '<function gettext at 0x7fd176f83cf8>'
overall_score = 'None'
get_bundle = '<function get_bundle at 0x7fd1746e5668>'
range = "<type 'xrange'>"
score = 'Undefined'
dict = '<function <lambda> at 0x7fd1764b2578>'
current_user = "UserInfo([{'referer': 'https://qa.inspirehep.net/', 'remote_host': '', 'uri': '/submit/literature/14208', 'agent': u'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36', 'remote_ip': '188.184.151.228'}, <CallbackDict {'uid': 1L, 'given_names': '', 'agent': u'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36', 'referer': 'https://qa.inspirehep.net/youracc [...]
collection = 'Collection <id: 1, name: HEP, dbquery: SELECT collection.id AS collection_id, collection.name AS collection_name, collection.dbquery AS collection_dbquery \nFROM collection, nbrecs: 0>'
is_language_rtl = '<function is_language_rtl at 0x7fd178371410>'
cycler = "<class 'jinja2.utils.Cycler'>"
joiner = "<class 'jinja2.utils.Joiner'>"
config = '<Config {\'ARXIV_API_URL\': u\'http://export.arxiv.org/oai2\', \'CFG_BIBINDEX_MIN_WORD_LENGTH\': 0, \'CFG_WEBAUTHORPROFILE_CFG_HEPNAMES_EMAIL\': u\'[email protected]\', \'INSPIRE_URL_REGEX\': u\'^(?:http(?:s)?:\\\\/\\\\/)?(?:www\\\\.)?(?:[\\\\w-]*)\\\\.\\\\w{2,}$\', \'WORKFLOWS_HOLDING_PEN_CACHE_TIMEOUT\': 2629743, \'CFG_WEBTAG_DEFAULT_USER_SETTINGS\': {u\'display_tags_public\': True, u\'display_tags_group\': True, u\'display_tags\': True}, \'CFG_SITE_EMERGENCY_EMAIL_ADDRESSES\': {}, \'CFG [...]
filtered_core = 'Undefined'
Frame handle_exception in /opt/inspire/lib/python2.7/site-packages/jinja2/environment.py at line 742
-------------------------------------------------------------------------------
739 if self.exception_handler is not None:
740 self.exception_handler(traceback)
741 exc_type, exc_value, tb = traceback.standard_exc_info
----> 742 reraise(exc_type, exc_value, tb)
743
744 def join_path(self, template, parent):
745 """Join a template with the parent. By default all the lookups are
-------------------------------------------------------------------------------
source_hint = 'None'
rendered = 'True'
self = '<flask.templating.Environment object at 0x7fd176f81e90>'
traceback = '<jinja2.debug.ProcessedTraceback object at 0x7fd146d59b10>'
exc_type = "<class 'jinja2.exceptions.UndefinedError'>"
exc_info = '(<class \'jinja2.exceptions.UndefinedError\'>, UndefinedError("\'score\' is undefined",), <traceback object at 0x7fd146b5db48>)'
tb = '<traceback object at 0x7fd146d503f8>'
exc_value = 'UndefinedError("\'score\' is undefined",)'
Frame render in /opt/inspire/lib/python2.7/site-packages/jinja2/environment.py at line 969
exc_info = '(<class \'jinja2.exceptions.UndefinedError\'>, UndefinedError("\'score\' is undefined",), <traceback object at 0x7fd146b5db48>)'
self = "<Template 'workflows/styles/harvesting_record_additional.html'>"
args = '({\'core\': None, \'object\': <BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been complete [...]
vars = '{\'core\': None, \'searchbar_enable\': True, \'easy_search_form\': <invenio.modules.search.forms.EasySearchForm object at 0x7fd146b86ed0>, \'alternate_urls\': {u\'en\': u\'http://qa.inspirehep.net/submit/literature/14208?ln=en\'}, \'object\': <BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-021 [...]
kwargs = '{}'
Frame _render in /opt/inspire/lib/python2.7/site-packages/flask/templating.py at line 110
app = "<Flask 'invenio.base'>"
template = "<Template 'workflows/styles/harvesting_record_additional.html'>"
context = '{\'core\': None, \'object\': <BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed [...]
Frame render_template in /opt/inspire/lib/python2.7/site-packages/flask/templating.py at line 128
ctx = '<flask.ctx.AppContext object at 0x7fd146890390>'
template_name_or_list = "'workflows/styles/harvesting_record_additional.html'"
context = '{\'core\': None, \'object\': <BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed [...]
Frame get_additional in /opt/inspire/src/inspire/inspire/modules/deposit/workflows/literature.py at line 245
-------------------------------------------------------------------------------
242 keywords=keywords,
243 top_words=core_guessing.get("top_words"),
244 core=core_guessing.get("core"),
----> 245 overall_score=core_guessing.get("overall_score"))
246
247 @staticmethod
248 def formatter(bwo, **kwargs):
-------------------------------------------------------------------------------
results = '{}'
core_guessing = '{}'
kwargs = '{}'
keywords = 'None'
get_classification_from_task_results = '<function get_classification_from_task_results at 0x7fd146adced8>'
bwo = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
Frame generate_formatted_holdingpen_object in /opt/inspire/src/invenio/invenio/modules/workflows/utils.py at line 312
-------------------------------------------------------------------------------
309 "description": workflow_definition.get_description(bwo),
310 "title": workflow_definition.get_title(bwo),
311 "date": bwo.modified.strftime(date_format),
----> 312 "additional": workflow_definition.get_additional(bwo),
313 "action": mini_action
314 }
315 return results
-------------------------------------------------------------------------------
date_format = "'%Y-%m-%d %H:%M:%S.%f'"
mini_action = "''"
workflows_name = "u'literature'"
WorkflowBase = "<class 'invenio.modules.workflows.definitions.WorkflowBase'>"
action_name = "''"
workflow_definition = "<class 'inspire.modules.deposit.workflows.literature.literature'>"
action = 'None'
bwo = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
Frame get_formatted_holdingpen_object in /opt/inspire/src/invenio/invenio/modules/workflows/utils.py at line 278
-------------------------------------------------------------------------------
275 results = msgpack.loads(cache.get("workflows_holdingpen_{0}".format(bwo.id)))
276 if results["date"] == bwo.modified.strftime(date_format):
277 return results
----> 278 results = generate_formatted_holdingpen_object(bwo)
279 if results:
280 cache.set("workflows_holdingpen_{0}".format(bwo.id),
281 msgpack.dumps(results),
-------------------------------------------------------------------------------
date_format = "'%Y-%m-%d %H:%M:%S.%f'"
results = 'None'
bwo = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
Frame precache_holdingpen_row in /opt/inspire/src/inspire/inspire/modules/workflows/receivers.py at line 39
-------------------------------------------------------------------------------
36 """Precache a Holding Pen row."""
37 from invenio.modules.workflows.utils import get_formatted_holdingpen_object
38 # Call it to cache it
----> 39 get_formatted_holdingpen_object(sender)
40
41
42 workflow_halted.connect(precache_holdingpen_row)
-------------------------------------------------------------------------------
kwargs = '{}'
sender = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
get_formatted_holdingpen_object = '<function get_formatted_holdingpen_object at 0x7fd17c2fa050>'
Frame send in /opt/inspire/lib/python2.7/site-packages/blinker/base.py at line 267
-------------------------------------------------------------------------------
264 return []
265 else:
266 return [(receiver, receiver(sender, **kwargs))
----> 267 for receiver in self.receivers_for(sender)]
268
269 def has_receivers_for(self, sender):
270 """True if there is probably a receiver for *sender*.
-------------------------------------------------------------------------------
self = "<blinker.base.NamedSignal object at 0x7fd1784c98d0; 'workflow_halted'>"
kwargs = '{}'
sender = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
receiver = '<function precache_holdingpen_row at 0x7fd1784cab90>'
Frame run_workflow in /opt/inspire/src/invenio/invenio/modules/workflows/client.py at line 75
-------------------------------------------------------------------------------
72 wfe.get_current_taskname() or "Unknown",
73 workflowhalt_triggered.message)
74 wfe.log.warning(message)
----> 75 workflow_halted.send(current_obj)
76 if stop_on_halt:
77 break
78 except Exception as exception_triggered:
-------------------------------------------------------------------------------
current_obj = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
workflowhalt_triggered = 'WorkflowHalt()'
stop_on_error = 'True'
wfe = '<BibWorkflow_engine(literature)>'
initial_run = 'False'
kwargs = "{'module_name': 'webdeposit', 'id_user': 1L}"
message = 'u"Workflow \'literature\' halted at task render_form with message: Wait for form submission."'
data = '[<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: [...]
stop_on_halt = 'False'
Frame run_worker in /opt/inspire/src/invenio/invenio/modules/workflows/worker_engine.py at line 45
-------------------------------------------------------------------------------
42 engine = BibWorkflowEngine(wname, **kwargs)
43 engine.save()
44 objects = get_workflow_object_instances(data, engine)
----> 45 run_workflow(wfe=engine, data=objects, **kwargs)
46 return engine
47
48
-------------------------------------------------------------------------------
engine = '<BibWorkflow_engine(literature)>'
wname = "'literature'"
objects = '[<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: [...]
data = '[<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: [...]
kwargs = "{'module_name': 'webdeposit', 'id_user': 1L}"
Frame start in /opt/inspire/src/invenio/invenio/modules/workflows/api.py at line 99
-------------------------------------------------------------------------------
96 if not isinstance(data, list):
97 data = [data]
98
----> 99 return run_worker(workflow_name, data, **kwargs)
100
101
102 def start_delayed(workflow_name, data, **kwargs):
-------------------------------------------------------------------------------
run_worker = '<function run_worker at 0x7fd14677fed8>'
data = '[<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: [...]
workflow_name = "'literature'"
kwargs = "{'module_name': 'webdeposit', 'id_user': 1L}"
Frame start_workflow in /opt/inspire/src/invenio/invenio/modules/workflows/models.py at line 629
-------------------------------------------------------------------------------
626 else:
627 from .api import start as start_func
628 self.save()
----> 629 return start_func(workflow_name, data=[self], **kwargs)
630
631 def continue_workflow(self, start_point="continue_next",
632 delayed=False, **kwargs):
-------------------------------------------------------------------------------
self = '<BibWorkflowObject(id = 14208, data = {\'files\': [], \'title\': \'\', \'type\': \'literature\', \'drafts\': {\'default\': {\'values\': {}, \'validate\': False, \'flags\': {}, \'completed\': False}}, \'sips\': []}, id_workflow = 1ee9a28c-141e-11e5-9dd8-02163e00cb72, version = 4, id_parent = None, created = 2015-06-16 13:52:10, extra_data = {\'latest_object\': -1, \'_task_history\': [{\'doc\': u"Render a form if the draft associated with it has not yet been completed.\\n\\n :param draft_id: T [...]
workflow_name = "'literature'"
start_func = '<function start at 0x7fd17e2b15f0>'
delayed = 'False'
kwargs = "{'module_name': 'webdeposit', 'id_user': 1L}"
Frame run_workflow in /opt/inspire/src/invenio/invenio/modules/deposit/models.py at line 480
-------------------------------------------------------------------------------
477 return deposition.workflow_object.start_workflow(
478 workflow_name=cls.get_identifier(),
479 id_user=deposition.workflow_object.id_user,
----> 480 module_name="webdeposit"
481 )
482 else:
483 return deposition.workflow_object.continue_workflow(
-------------------------------------------------------------------------------
deposition = '<invenio.modules.deposit.models.Deposition object at 0x7fd146a0c590>'
cls = "<class 'inspire.modules.deposit.workflows.literature.literature'>"
Frame run_workflow in /opt/inspire/src/invenio/invenio/modules/deposit/models.py at line 1161
-------------------------------------------------------------------------------
1158 else self.type.render_final(self)
1159
1160 self.update()
----> 1161 self.engine = self.type.run_workflow(self)
1162 self.reload()
1163 status = self.engine.status
1164
-------------------------------------------------------------------------------
headless = 'False'
self = '<invenio.modules.deposit.models.Deposition object at 0x7fd146a0c590>'
Frame run in /opt/inspire/src/invenio/invenio/modules/deposit/views/deposit.py at line 313
-------------------------------------------------------------------------------
310 """Run the workflow and show the current output of the workflow."""
311 deposition = Deposition.get(uuid, current_user, type=deposition_type)
312
----> 313 return deposition.run_workflow()
314
315
316 @blueprint.route('/<depositions:deposition_type>/<int:uuid>/edit/',
-------------------------------------------------------------------------------
deposition_type = "u'literature'"
deposition = '<invenio.modules.deposit.models.Deposition object at 0x7fd146a0c590>'
uuid = '14208'
Frame _decorated in /opt/inspire/lib/python2.7/site-packages/flask_principal.py at line 199
-------------------------------------------------------------------------------
196 @wraps(f)
197 def _decorated(*args, **kw):
198 with self:
----> 199 rv = f(*args, **kw)
200 return rv
201 return _decorated
202
-------------------------------------------------------------------------------
self = '<flask_principal.IdentityContext object at 0x7fd17d7ef2d0>'
args = '()'
kw = "{'deposition_type': u'literature', 'uuid': 14208}"
f = '<function run at 0x7fd17d7eea28>'
Frame inner in /opt/inspire/src/invenio/invenio/modules/deposit/views/deposit.py at line 100
-------------------------------------------------------------------------------
97 flash(_("Not allowed."), 'danger')
98 return redirect(url_for(endpoint))
99 except (UploadError,):
----> 100 abort(400)
101 return inner
102 return decorator
103
-------------------------------------------------------------------------------
args = '()'
endpoint = "'.index'"
f = '<function run at 0x7fd17d7eeaa0>'
kwargs = "{'deposition_type': u'literature', 'uuid': 14208}"
Frame decorated_view in /opt/inspire/lib/python2.7/site-packages/flask_login.py at line 758
-------------------------------------------------------------------------------
755 return func(*args, **kwargs)
756 elif not current_user.is_authenticated():
757 return current_app.login_manager.unauthorized()
----> 758 return func(*args, **kwargs)
759 return decorated_view
760
761
-------------------------------------------------------------------------------
args = '()'
func = '<function run at 0x7fd17d7eeb18>'
kwargs = "{'deposition_type': u'literature', 'uuid': 14208}"
Frame dispatch_request in /opt/inspire/lib/python2.7/site-packages/flask/app.py at line 1461
-------------------------------------------------------------------------------
1458 and req.method == 'OPTIONS':
1459 return self.make_default_options_response()
1460 # otherwise dispatch to the handler for that endpoint
----> 1461 return self.view_functions[rule.endpoint](**req.view_args)
1462
1463 def full_dispatch_request(self):
1464 """Dispatches the request and on top of that performs request
-------------------------------------------------------------------------------
self = "<Flask 'invenio.base'>"
req = "<LegacyRequest 'https://qa.inspirehep.net/submit/literature/14208' [GET]>"
rule = "<Rule '/submit/<deposition_type>/<uuid>' (HEAD, POST, OPTIONS, GET) -> webdeposit.run>"
Frame full_dispatch_request in /opt/inspire/lib/python2.7/site-packages/flask/app.py at line 1477
-------------------------------------------------------------------------------
1474 if rv is None:
1475 rv = self.dispatch_request()
1476 except Exception as e:
----> 1477 rv = self.handle_user_exception(e)
1478 response = self.make_response(rv)
1479 response = self.process_response(response)
1480 request_finished.send(self, response=response)
-------------------------------------------------------------------------------
rv = 'None'
e = 'UndefinedError("\'score\' is undefined",)'
self = "<Flask 'invenio.base'>"
Frame handle_user_exception in /opt/inspire/lib/python2.7/site-packages/flask/app.py at line 1381
-------------------------------------------------------------------------------
1378 if isinstance(e, typecheck):
1379 return handler(e)
1380
----> 1381 reraise(exc_type, exc_value, tb)
1382
1383 def handle_exception(self, e):
1384 """Default exception handling that kicks in when an exception
-------------------------------------------------------------------------------
e = 'UndefinedError("\'score\' is undefined",)'
handlers = 'None'
self = "<Flask 'invenio.base'>"
exc_value = 'UndefinedError("\'score\' is undefined",)'
blueprint_handlers = '()'
app_handlers = '()'
tb = '<traceback object at 0x7fd146d50638>'
exc_type = "<class 'jinja2.exceptions.UndefinedError'>"
Frame handle_user_exception in /opt/inspire/src/invenio/invenio/base/wrappers.py at line 133
-------------------------------------------------------------------------------
130 Hook a before handle to it.
131 """
132 before_handle_user_exception.send(e)
----> 133 return super(Flask, self).handle_user_exception(e)
134
135
136 def lazy_import(name):
-------------------------------------------------------------------------------
self = "<Flask 'invenio.base'>"
e = 'UndefinedError("\'score\' is undefined",)'
Frame error_router in /opt/inspire/lib/python2.7/site-packages/flask_restful/__init__.py at line 265
-------------------------------------------------------------------------------
262 return self.handle_error(e)
263 except Exception:
264 pass # Fall through to original handler
----> 265 return original_handler(e)
266
267 def handle_error(self, e):
268 """Error handler for the API transforms a raised exception into a Flask
-------------------------------------------------------------------------------
original_handler = "<bound method Flask.handle_user_exception of <Flask 'invenio.base'>>"
self = '<flask_restful.Api object at 0x7fd17c0ab190>'
e = 'UndefinedError("\'score\' is undefined",)'
Frame full_dispatch_request in /opt/inspire/lib/python2.7/site-packages/flask/app.py at line 1477
-------------------------------------------------------------------------------
1474 if rv is None:
1475 rv = self.dispatch_request()
1476 except Exception as e:
----> 1477 rv = self.handle_user_exception(e)
1478 response = self.make_response(rv)
1479 response = self.process_response(response)
1480 request_finished.send(self, response=response)
-------------------------------------------------------------------------------
rv = 'None'
e = 'UndefinedError("\'score\' is undefined",)'
self = "<Flask 'invenio.base'>"
Frame __call__ in /opt/inspire/src/invenio/invenio/ext/legacy/__init__.py at line 122
-------------------------------------------------------------------------------
119 response = self.app.full_dispatch_request()
120 except Exception as e:
121 from invenio.ext.logging import register_exception
----> 122 register_exception(req=request, alert_admin=True)
123 response = self.app.handle_exception(e)
124
125 return response(environ, start_response)
-------------------------------------------------------------------------------
start_response = '<built-in method start_response of mod_wsgi.Adapter object at 0x7fd17d0be120>'
environ = "{'wsgi.version': (1, 0), 'mod_wsgi.listener_port': '443', 'HTTP_COOKIE': '_pk_id.11.386a=122e12ee9a8c3737.1434369296.3.1434455484.1434453857.; _pk_ses.11.386a=*; session=2a54565a4352412689f4dae4b61a7243.CGGfag.DFW-jMeRJS75siVcgAAYqUzcubM; sessionstub=HTTPS', 'mod_wsgi.listener_host': '', 'CONTEXT_DOCUMENT_ROOT': '/opt/inspire/var/invenio.base-instance/static', 'SERVER_SOFTWARE': 'Apache', 'SCRIPT_NAME': '', 'mod_wsgi.enable_sendfile': '0', 'mod_wsgi.handler_script': '', 'SERVER_SIGNATURE': '', [...]
self = '<invenio.ext.legacy.LegacyAppMiddleware object at 0x7fd178186bd0>'
register_exception = '<function register_exception at 0x7fd17b7d9320>'
e = 'UndefinedError("\'score\' is undefined",)'
Seems like template harvesting_record_additional.html
expects score
to be in the context but it is not.
This is the result of bower install
:
Unable to find a suitable version for moment, please choose one:
1) moment#2.7.0 which resolved to 2.7.0 and is required by inspire
2) moment#>=2.8.0 which resolved to 2.8.3 and is required by eonasdan-bootstrap-datetimepicker#3.1.3Prefix the choice with ! to persist it to bower.json
In the landing page the console shows:
Uncaught ReferenceError: jQuery is not defined search_box.js:118
Uncaught ReferenceError: jQuery is not defined jquery.feeds.js:182
Current INSPIRE formats (used in http://inspirehep.net) live in https://github.com/inspirehep/inspire/tree/master/bibformat/output_formats.
This task keeps track of the porting status:
An example of how the new formats look like (using yml
instead of bfo
) can be seen here
The following dojson improvements are needed to reach a production status for INSPIRE.
@hep.over('isbn', '^020..')
@utils.for_each_value
@utils.filter_values
def isbn(self, key, value):
"""Other Standard Identifier."""
return {
'isbn': value.get('a'),
'medium': value.get('b')
}
We then need the opposite that we will write in the same file close to the original:
@unhep.over('020', 'isbn')
@utils.for_each_value
@utils.filter_values
def isbn(self, key, value):
"""Other Standard Identifier."""
return {
'a': value.get('isbn'),
'b': value.get('medium')
}
hep
then use unhep
and make sure no information is lost. @ioannistsanaktsidisDue to changes in classifier
module on the Invenio side, the literature workflow gives error:
keyworder.py
In line 41 cfg["CLASSIFIER_VALID_SEPARATORS”]
KeyError: ‘CLASSIFIER_VALID_SEPARATORS’
Using lambda
to access the config might help.
This commit addresses some problems d1533c7 but still the error above has to be solved.
The search returns the results only matching exact words of the query. Maybe in some situations it's desired, but normally it shrinks the results much.
On some records (like oai:arXiv.org:1410.4632
) bibclassification taskes a loooooong time. (~30-60 mins).
Why is that? Can we optimize?
/home/jlavik/envs/labs/src/invenio/invenio/legacy/bibclassify/engine.pyc in extract_single_keywords(skw_db, fulltext)
212 or empty {}
213 """
--> 214 return keyworder.get_single_keywords(skw_db, fulltext) or {}
215
216
/home/jlavik/envs/labs/src/invenio/invenio/legacy/bibclassify/keyword_analyzer.pyc in get_single_keywords(skw_db, fulltext)
58 for single_keyword in skw_db.values():
59 for regex in single_keyword.regex:
---> 60 for match in regex.finditer(fulltext):
61 # Modify the right index to put it on the last letter
62 # of the word.
Dear @fschwenn, @aw-bib, @ksachs, @tsgit (and whoever wants to take part), this ticket wants to aggregate in one place all the steps needed to complete the new INSPIRE data model.
FIXME
in hep-0.0.1.json (@fschwenn, @aw-bib, @ksachs, @tsgit we'll need your help here):
HEP-EX/9911023 does not work, hep-ex/9911023 does
Currently the Elasticsearch mapping is taken from Invenio; we are still missing a mechanism to allow for its override at the overlay level, but (I think) this will eventually be solved upstream.
In any case, here I'll note a few modifications that we are going to need:
"doi": {
"type": "object",
"properties": {
"doi": {
"type": "string",
"index": "not_analyzed"
}
}
}
(This of course is strongly tied to the data models developed in #265)
In the end, it would be valuable to get the orcid of the submitter as part of the new record.
Add the ORCID of the user to 541.
Once inveniosoftware/invenio#3122 is integrated, add email verification workflow.
Verification email should be sent after first registration and link to verify email always visible in Settings
page.
See example:
For security reasons, the remember_me cookie should have httponly enabled.
This can be done with REMEMBER_COOKIE_HTTPONLY = True
To be set in inspire/config.py
With latest labs and master branch, we are seeing the submission getting stuck on render_form() task after submitting the form due to some "hidden"/unknown validation failure happening during save() - causing the form to be reloaded instead of showing a pretty confirmation screen.
First investigation stated the validated == False during submission.
Will need to be further investigated...
@inspirehep/labs-scrum
We should use the MathJax CDN to avoid moving around 40k static files.
Include on page:
<script src="//cdnjs.cloudflare.com/ajax/libs/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
On document load:
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
inveniosoftware/invenio-jsonschemas#1 implements jsonschema-registry
. Would be cool to:
I remember @jmartinm you did (maybe with Lars) the fix for overwriting mustache templates. Now static files from inspire overwite the ones from invenio with the same name. The problem occurs with settings.js used by require.js. It seems that the one from invenio gets overwritten by inspire's counterpart. This means that all the paths declared there are not available from inspire, and we may get problems with 404 errors when loading js files. I had this problem with bootstrap-datetimepicker
and moment
. A workaround is to duplicate paths in inspire's settings.js
Due to that field being Typeahead field, selecting the content makes it go away, which is not desirable.
Elasticsearch configuration should reflect the INSPIRE data model, whatever that means. We should ensure this is compatible with the invenio-query-parser.
There are some DOIs that don't have the "page" property in their JSON schema, therefore the following error is raised when such a DOI is imported.
Uncaught TypeError: Cannot read property 'split' of undefined doi.js:49
The 10.1103/PhysRevD.90.036007
will raise the error but not the 10.1063/1.4894158
.
As per inveniosoftware/invenio-oaiharvester#1 we need to move to use the new module and schedule it using Celery beat.
I noticed some minor display issues in our style guide: https://labs.inspirehep.net/style-guide
label-success
green color is different than btn-success
green color.It would be nice to fix these as it affects the whole site. E.g. I noticed this in the Holding Pen.
2014-11-19 16:36:16,190 ERROR: Exception on /admin/holdingpen/details/804 [GET] [in /opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/flask/app.py:1423]
Traceback (most recent call last):
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/invenio/ext/legacy/init.py", line 124, in call
response = self.app.full_dispatch_request()
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/Flask_RESTful-0.2.12-py2.7.egg/flask_restful/init.py", line 258, in error_router
return original_handler(e)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/invenio/base/wrappers.py", line 125, in handle_user_exception
return super(Flask, self).handle_user_exception(e)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functionsrule.endpoint
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/Flask_Login-0.2.11-py2.7.egg/flask_login.py", line 758, in decorated_view
return func(_args, *_kwargs)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/Flask_Principal-0.4.0-py2.7.egg/flask_principal.py", line 199, in _decorated
rv = f(_args, *_kw)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/invenio/modules/workflows/views/holdingpen.py", line 132, in details
previous_object, next_object = get_previous_next_objects(objects, objectid)
File "/opt/Inspire-2.0.1.dev20141107094016/lib/python2.7/site-packages/invenio/modules/workflows/utils.py", line 421, in get_previous_next_objects
next_object_id = object_list[0]
IndexError: list index out of range
We need a module or facility (for example, invenio-matcher via search engine extensions) that will provide an API to perform weighted, configurable searches on INSPIRE records to determine if the incoming record is already in INSPIRE or not.
See inveniosoftware/invenio#2886 for more details.
This will probably be heavily dependant on #276 as well.
TODO: List INSPIRE specific use cases.
Currently:
CFG_SITE_NAME = u"HEP"
Which means that in certain parts like emails sent to the user, the title is Account registration at HEP
The reason behind that site name is that Invenio required the CFG_SITE_NAME
to be the same as the main collection so that an empty search would work.
We need to double check if this is still a problem and solve it so that we can change the name.
State of checkboxes is saved properly on save. Loading a draft form loads the state correctly of you debug the server code, although a checkbox is still displayed as disabled in the form no matter what state is loaded from the draft.
The bug is introduced here.
Possible solution:
It doesn't make sense to work on thesis exclusive fields such as degree_type
or defense_date
when we got an article document type, for instance. I started cleaning them here fd12dce in the post processing but after discussing with @jalavik we should probably clean them even before the workflow starts. Suggestions:
What do you think @jmartinm @giokokos @kneczaj @GiorgosPa?
Hello!
Lately I've beeen working on moving the authors front-end to pu. I tried to keep the look with the current box order. Unfortunately it seems that that we don't have enough space to do that. Here is a screenshot from 1920x1080 monitor from demosite:
The boxes that in my opinion look wrong:
I don't want to discuss here any issues regarding compability with Invenio. This RFC aims to gather requirements for Inspire next author's page (and that's why it is here) and look for a solution for Inspire only. I need to know what will be needed by Inspire before I start writing the demosite version.
The solution implemented by me will work well for Invenio framework.
Redesign. I know that it took a lot of time to develop current look, but we need to go forward.
If one imports and then clicks Cancel, on submission there is the error:
File "/home/jmartinm/.virtualenvs/pu-inspire2/src/inspire/inspire/modules/deposit/workflows/literature.py", line 355, in process_sip_metadata
metadata['abstract']['source'] = 'arXiv'
KeyError: 'abstract'
When running in 'production mode' with Bundle generation there is currently an error related to ``r.js` that complains about inspire_init dependencies problem.
Making the subject field required with:
validators=[validators.Required()]
Creates a problem in the Multiselect field. If nothing in the field is selected, instead of showing the message "Saved with errors" like in the title or authors the page reloads with no message.
When there is no nickname (after ORCID login) the email of the user does not appear in the header.
Accessing the user through the User
model shows empty value when doing User.email
.
The user
table contains the email address though.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.