ucl-ingi / ictv Goto Github PK
View Code? Open in Web Editor NEWICTV is a simple content management system for digital signage on multiple screens.
License: Other
ICTV is a simple content management system for digital signage on multiple screens.
License: Other
The image type returned by the template class is given as img
but in the doc it is given as image
.
After some tests, it appears that the correct type is image
.
The configuration.example.yaml
file contains redundant configuration that is not needed for a minimal configuration file. The documentation should provide a minimal configuration file. A note should be added to indicate that production instances should not use the minimal configuration file.
As I first implement in #21, I thought it is a good idea to extend orientation of a channel to a bundle. This allows user to subscribe their vertical screen to a bundle that contains all the vertical channels for example.
Does it make sense?
Hi,
I installed ICTV via the pip3
command given here into a fresh python3.7 virtualenv
and I got this error :
ictv-webapp 0.0.0.0:8080 --config configuration.yaml
Exception encountered when starting the application
Traceback (most recent call last):
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/utils.py", line 526, in take
yield next(seq)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/ictv/app.py", line 506, in main
app = get_app(config_file)
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/ictv/app.py", line 404, in get_app
app = web.application(app_urls, globals())
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/application.py", line 62, in __init__
self.init_mapping(mapping)
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/application.py", line 130, in init_mapping
self.mapping = list(utils.group(mapping, 2))
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/utils.py", line 531, in group
x = list(take(seq, size))
RuntimeError: generator raised StopIteration
Traceback (most recent call last):
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/utils.py", line 526, in take
yield next(seq)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<$HOME>/ICTV/env/bin/ictv-webapp", line 67, in <module>
main(config_file)
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/ictv/app.py", line 517, in main
raise e
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/ictv/app.py", line 506, in main
app = get_app(config_file)
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/ictv/app.py", line 404, in get_app
app = web.application(app_urls, globals())
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/application.py", line 62, in __init__
self.init_mapping(mapping)
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/application.py", line 130, in init_mapping
self.mapping = list(utils.group(mapping, 2))
File "<$HOME>/ICTV/env/lib/python3.7/site-packages/web/utils.py", line 531, in group
x = list(take(seq, size))
RuntimeError: generator raised StopIteration
I have the same issue when running the source code with python3.7
I tried the same installation with a python3.6 virtualenv
and all is working like a charm.
Any detailed step by step instructions on how to install it?
During the route initialization process, the client_pages
module is loaded to add the route to the client kickstart files.
Line 7 in 97c8dcb
However, this module also generates the kickstart zip when it is loaded the first time.
ICTV/ictv/client/pages/client_pages.py
Line 84 in 97c8dcb
In a multi-threaded/process environnement, the function generating the zip file is called multiple times in parallel, and may try to unlink a file that has already been unlinked by a parallel process. This ends up with a FileNotFoundError
exception being raised at the application startup if such a case occurs.
ICTV/ictv/client/pages/client_pages.py
Lines 54 to 64 in 97c8dcb
Writing the file in parallel should also be avoided in case ZipFile
does not implement an internal lock/is not threadsafe.
It should be possible to set parameters (like time to display) depending subscriptions.
As example: we have a request for displaying an embed channel more than 10 sec on one client. If i change this parameter, all clients will be impacted which is not the expected behavior.
As already talk, it should be interesting to get a full live system feature to let users display a livestream.
Let's have this issue as a reminder.
Hi,
It seems that screen subscriptions seems to be associated with the screen orientation.
Step to reproduce :
What do you think ?
Let's try submitting a minimal PR, e.g. adding a single space somewhere, to see if Travis is still ok. Oddly, commits directly on the master branch are fine.
Currently, the caching mechanism is not updating assets in cache at any time. It should use the information exposed in HTTP headers (Last-Modified, Cache-Control, etc) to update assets in cache.
We have to define a policy for this update mechanism to trigger. Sending an HTTP request every time the PluginManager
sees a slide referencing an external asset seems a bit heavy, but it is the policy that ensures the most consistent cache.
I got those propositions to enhance the user interface:
Using a relative path for indicating the location of the database result different behaviours of ictv-webapp
and ictv-setup-database
.
One expects the same behaviour to manifest.
Hello,
It has been a while since I have first seen this error on the TVs and I thought it might be good to share it here.
I can't see the full trace and can't find the ictv.py
file, so I have no clue how to help you.
However, I see that you are using Python 2 which has been officially deprecated since 2015, and I think it might be a good idea to switch to a more recent Python version. I can also help with the recurring UTF encoding errors we can see on some screens, since Python 3 better handles string encoding.
If I can help, please tell me.
Jérome
To improve the interface and user experience, a different button should be presented when visualizing a screen or a channel. In one case, the button "subscription" will show a list of channels, and in the other case, a button with the same label will show a list of screens.
It may be good to have a different label on theses buttons.
Templates are themes table are re-initialized at application startup in a transaction that empties the database table and feeds it using the discovered files.
Line 372 in 97c8dcb
Lines 87 to 90 in 97c8dcb
In a multi-process setup with (u)wsgi and lazy-apps set to true, multiple transactions may be performed in parallel during application startup. This leads to the failure and rollback of one or several of them because the first one may be in the commit stage while the other is in the processing stage.
This is not destructive as the transaction is rolled back but sqlobject.dberrors.DuplicateEntryError
as well as psycopg2.errors.UniqueViolation
exceptions are raised and never caught, making the app crash.
While we could logically accept such a failure and pass on sqlobject.dberrors.DuplicateEntryError
, it is not sufficient to catch the sqlobject backend underlying exception (psyscopg in the case of postgre). Catching all exceptions and pass
ing could lead to more instable behaviour (I/O erros, ...)...
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.