datavisyn / tdp_core Goto Github PK
View Code? Open in Web Editor NEWTarget Discovery Platform Core
License: BSD 3-Clause "New" or "Revised" License
Target Discovery Platform Core
License: BSD 3-Clause "New" or "Revised" License
options to
count
: http://localhost:8080/api/tdp/db/dummy/a/countapi_1 | 14:50:57 INFO tdp_core.db: SELECT count(d.*) as count FROM b d
api_1 | 14:50:57 INFO tdp_core.db: removing session again
api_1 | Traceback (most recent call last):
api_1 | File "/usr/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 884, in handle_one_response
api_1 | self.run_application()
api_1 | File "/usr/local/lib/python2.7/site-packages/geventwebsocket/handler.py", line 88, in run_application
api_1 | return super(WebSocketHandler, self).run_application()
api_1 | File "/usr/local/lib/python2.7/site-packages/gevent/pywsgi.py", line 870, in run_application
api_1 | self.result = self.application(self.environ, self.start_response)
api_1 | File "/usr/local/lib/python2.7/site-packages/werkzeug/contrib/fixers.py", line 152, in __call__
api_1 | return self.app(environ, start_response)
api_1 | File "phovea_server/phovea_server/dispatcher.py", line 62, in __call__
api_1 | return app(environ, start_response)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 2000, in __call__
api_1 | return self.wsgi_app(environ, start_response)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1991, in wsgi_app
api_1 | response = self.make_response(self.handle_exception(e))
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1567, in handle_exception
api_1 | reraise(exc_type, exc_value, tb)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app
api_1 | response = self.full_dispatch_request()
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request
api_1 | rv = self.handle_user_exception(e)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception
api_1 | reraise(exc_type, exc_value, tb)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request
api_1 | rv = self.dispatch_request()
api_1 | File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request
api_1 | return self.view_functions[rule.endpoint](**req.view_args)
api_1 | File "/usr/local/lib/python2.7/site-packages/flask_login/utils.py", line 228, in decorated_view
api_1 | return func(*args, **kwargs)
api_1 | File "/phovea/tdp_core/tdp_core/sql.py", line 114, in get_count_data
api_1 | r = db.get_count(database, view_name, request.args)
api_1 | File "/phovea/tdp_core/tdp_core/db.py", line 362, in get_count
api_1 | r = sess.run(count_query.format(**replace), **kwargs)
api_1 | File "/phovea/tdp_core/tdp_core/db.py", line 133, in run
api_1 | result = self._session.execute(parsed, kwargs)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1034, in execute
api_1 | bind, close_with_result=True).execute(clause, params or {})
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute
api_1 | return meth(self, multiparams, params)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
api_1 | return connection._execute_clauseelement(self, multiparams, params)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
api_1 | compiled_sql, distilled_params
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
api_1 | context)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
api_1 | exc_info
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause
api_1 | reraise(type(exception), exception, tb=exc_tb, cause=cause)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
api_1 | context)
api_1 | File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute
api_1 | cursor.execute(statement, parameters)
api_1 | OperationalError: (sqlite3.OperationalError) near "*": syntax error [SQL: u'SELECT count(d.*) as count FROM b d ']
api_1 | {'GATEWAY_INTERFACE': 'CGI/1.1',
api_1 | 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
api_1 | 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br',
api_1 | 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.9',
api_1 | 'HTTP_CACHE_CONTROL': 'no-cache',
api_1 | 'HTTP_CONNECTION': 'close',
api_1 | 'HTTP_COOKIE': 'randomCredentials=cranky_golick@b37hyd; session=.eJwdzr1qwzAUQOFXKXfOEP8thgwGFWPDvUZBsrhaQus4jaWog5PQSiHv3tDpfON5wOG0ztcz1Lf1Pm_gsByhfsDbJ9TArnfY6mgD_6BoIpu9I-cLVl85mfGC5j2iGR2GfmE3ZeyawoouQ9N7fJmS3g6iq0hgiUFGq7jgsPfWyF9SumCjIyWO5OR2UBdvXVOhmEp054WMrijJSGrKqeWEqctR4asyQzX6QchyaGXkJEsbcAfPDdyv8_r_Dx_HsHzD8w-VlEkK.DOHSQA.nLIPefFgcGHpFS_g3_yy1PM_S9E',
api_1 | 'HTTP_HOST': 'localhost:8080',
api_1 | 'HTTP_PRAGMA': 'no-cache',
api_1 | 'HTTP_UPGRADE_INSECURE_REQUESTS': '1',
api_1 | 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
api_1 | 'PATH_INFO': '/dummy/b/count',
api_1 | 'QUERY_STRING': '',
api_1 | 'REMOTE_ADDR': '172.20.0.1',
api_1 | 'REMOTE_PORT': '46802',
api_1 | 'REQUEST_METHOD': 'GET',
api_1 | 'SCRIPT_NAME': '/api/tdp/db',
api_1 | 'SERVER_NAME': '00b34b55b068',
api_1 | 'SERVER_PORT': '80',
api_1 | 'SERVER_PROTOCOL': 'HTTP/1.1',
api_1 | 'SERVER_SOFTWARE': 'gevent/1.1 Python/2.7',
api_1 | 'werkzeug.proxy_fix.orig_http_host': 'localhost:8080',
api_1 | 'werkzeug.proxy_fix.orig_remote_addr': '172.20.0.1',
api_1 | 'werkzeug.proxy_fix.orig_wsgi_url_scheme': 'http',
api_1 | 'werkzeug.request': <Request 'http://localhost:8080/api/tdp/db/dummy/b/count' [GET]>,
api_1 | 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7f0f99d511e0>,
api_1 | 'wsgi.input': <gevent.pywsgi.Input object at 0x7f0f74e458d8>,
api_1 | 'wsgi.multiprocess': False,
api_1 | 'wsgi.multithread': False,
api_1 | 'wsgi.run_once': False,
api_1 | 'wsgi.url_scheme': 'http',
api_1 | 'wsgi.version': (1, 0)} failed with OperationalError
api_1 |
in order to improve the user experience we could prefetch some views + their data if they are possible. Such that the data is loaded and the e.g. rendered in a dom node that is not yet attached to the real DOM.
or a way just to load the data of the view
such as view descriptions server db connector descriptions, ... first just highlight next provide for filtering and search
e.g. for performance testing
would be nice to have a CSV export of the sql view results
As a user, I want to get a feedback whether an action in the user interface has been (un)successful.
For example simple bootstrap alerts: see https://v4-alpha.getbootstrap.com/components/alerts/#dismissing
to better indicate embedded views and provide option to open in new tab
as used in lineup_dev standalone edition
currently you have to specify the idType (however already declared using .itemIDType
and the range. However, creating the range is cumbersome. e.g. utilities to add/set/remove/toggle id/_ids would be useful
categories:
atm. there is this get/set Parameter construct with an onChange handler.
An alternative solution can be use to use an object for all params. Using a Proxy wrapper all changes can be tracked and e.g. trigger an event that view wrapper can use to track the parameter change.
e.g. for advanced server side processing as an alternative to the current JSON format
@sgratzl commented on Thu Nov 09 2017
in the next dev version we can switch to taggle since it is almost stable.
e.g. as an alternative for :ids
for in db mappings and everywhere were mapping applies
e.g. whether the user has a certain role
.security(lambda user: user.has_role('role_name'))
when replaying actions can be compressed, e.g. certain views never shown since they will be replaced anyhow this includes executing all the parameter settings.
However, with the "useSession" feature in which previous filter settings are stored, these stored values will never be set and the initial parameters are not stored.
possible solution:
@lehnerchristian commented on Wed Aug 16 2017
As a user I want to filter a wide range of numeric values so that I don't have to select each element inside the range I want to filter
Currently the FormMap is only able to insert a single field (e.g. Select2). This works well for categorical columns, however for numeric columns each element would have to be selected separately (see screenshot)
It would be nicer to do something like:
Column | Comparison operator | Value | Delete |
---|---|---|---|
Age | >= (greater than or equal) | 42 | x |
@sgratzl commented on Thu Aug 17 2017
why isn't that an ordino issue?
for the deployment this should be a pure volatile redis database. If mixed the the default one used for mapping all the volatile cache content will be persisted, too.
see also https://github.com/phovea/phovea_data_redis/tree/redis_cache
and https://github.com/Caleydo/ordino/tree/cache
to locally use a different redis database.
in <workspace>/config.json
"phovea_data_redis": {
"cache": {
"hostname": "redis_cache",
"timeout": 6000
}
}
6000 = 6000sec = 100min
in <workspace>/docker-compose.yml
db_redis_cache:
image: 'redis:3.2-alpine'
command: 'redis-server --save "" --appendonly no'
...
api:
depends_on:
- db_redis_cache
links:
- 'db_redis_cache:redis_cache'
we could think about creating score templates = parameter filled up dialogs and provide them as "additional named scores"
@lehnerchristian commented on Mon Nov 27 2017
Overview (e.g. bar chart, chart js, boxplots, ...) + ranking (detail) view. Bi-directional filtering, synced selections, sidepanel should work for both. The Ranking view should only be shown when interacting with the overview (details on demand)
in the current version the named sets just store the set of rows that are listed.
In an advanced version, we could store the whole LineUp setup
Wouldn't that be the same as storing the entire session?
e.g. that a callback function is given with the signature
(engine) => list of dicts (that can be converted to json)
coming from Caleydo/ordino#22 point 4 and Caleydo/ordino#22 (comment):
When one column in LineUp and then trying to filter another column the second column should have the new domain as the boundaries (without the filtered rows)
E.g. when column B has a domain from [0, 10] and column A is filtered first, the remaining rows of column B could have the domain [1, 3]. when opening the filter dialog the domain of column B should be [1, 3] instead of the original [0, 10]
e.g. like an auto-fit option and zoom handles such that embedded views can scaled more easily
Currently based on select2 with some customizations. However the customizations should be unified and normalized. In different applications like dTiles the search box is already advanced
features
\s;,
.
the parameter is correctly set but the ui is not updated
the form builder is the only piece left in the core using d3. I order to avoid using d3(v3) in the core the FormBuilder needs to be refactored.
At the same time it can be improved.
getParameter
the view has to now which are valid parameter and what will be the return value. When using an interface object (IParams...) everything could be typed.@zichner commented on Mon Nov 06 2017
Release: dev
Steps to reproduce
TPM
and Raw Counts
for gene TP53
)-> The column that got dragged and dropped doesn't contain data any more (all values are NaN
)
PS: You can postpone this issue to a later milestone in case it is rather difficult to fix.
Gender
for color codingDatabase Info
viewDatabase Info
view are different (always CL-34)Database Info
view is always CL-34Database Info
view should be the same as when hovering the markcoming from phovea/phovea_core#125
since a (non-parameterized) score is essentially a vector we could wrap it to a phovea datastructure at least on the client side.
on the server side more information about the parameters are needed, see also #6
Currently the dialog is closed after a column was added
This would allow the user to add many columns without the need to click anywhere
we have multiple scores that take just one entity as input e..g a gene. Besides the data to show no additional parameters are needed. The idea is to unify those single scores such that you have only one unified dialog where you can select one or multiple data values that you want to add.
pro: database idempotent and this scores type can be used in other views, too
the view definition almost contains everything needed for generating a proper swagger.json file without any dynamic things.
missing
e.g. when dealing with Ensembl or EntrezIDs that still GeneSymbols are shown and selectable
in case of volatile id managements
favicon + loading icon
such that we can avoid the Caleydo Icon
In case a score is restored using the score parameters stored in the provenance state, it would be useful to store a checksum that tells the user if the re-calculated scores are the same as the original ones. When the data in the database changes, this will not the case.
@zichner commented on Wed Sep 27 2017
Computed and uploaded columns can be removed, however, sometimes it might be desired to just hide a column and to be able to show it again later (without re-computation or re-uploading).
A search for HUNK1 should also show BRD4 with a note that it is a synonym of the searched entity
@sgratzl commented on Mon Nov 13 2017
currently empty
@thinkh commented on Wed Jan 10 2018
The link is named //www.targetvalidation.org/
www.targetvalidation.org/...
or https://www.targetvalidation.org/...
@thinkh commented on Wed Jan 10 2018
The same applies to other detail views, for instance Pub Med.
Select2 is limited as it does not support drop files and token validation.
Extract Select3 implementation from sgratzl/refactor into new branch.
to improve the ATableView simple operations such as sorting would be useful.
loading icon isn't shown anymore
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.