Giter Club home page Giter Club logo

wirecloud's Introduction

WireCloud

License: AGPLv3+ with classpath-like exception Docker Status Support badge Current stable version
Documentation badge Tests Coverage Status Status CII Best Practices

WireCloud builds on cutting-edge end-user development, RIA and semantic technologies to offer a next-generation end-user centred web application mashup platform aimed at leveraging the long tail of the Internet of Services.

WireCloud builds on cutting-edge end-user (software) development, RIA and semantic technologies to offer a next-generation end-user centred web application mashup platform aimed at allowing end users without programming skills to easily create web applications and dashboards/cockpits (e.g. to visualize their data of interest or to control their domotized home or environment). Web application mashups integrate heterogeneous data, application logic, and UI components (widgets) sourced from the Web to create new coherent and value-adding composite applications. They are targeted at leveraging the "long tail" of the Web of Services (a.k.a. the Programmable Web) by exploiting rapid development, DIY, and shareability. They typically serve a specific situational (i.e. immediate, short-lived, customized) need, frequently with high potential for reuse. Is this "situational" character which precludes them to be offered as 'off-the-shelf' functionality by solution providers, and therefore creates the need for a tool like WireCloud.

This project is part of FIWARE. For more information check the FIWARE Catalogue entry for Context Processing, Analysis and Visualization.

πŸ“š Documentation πŸ“„ Site πŸŽ“ Academy 🐳 Docker Hub 🎯 Roadmap

Contents

Install

$ sudo pip install wirecloud

See the installation guide for more info.

Usage

WireCloud is a user-development tool aimed both at users and developers. Users use the platform to build and/or use their interfaces using deployed widgets and developers, whereas developers do create such components by extending existing ones or creating them from scratch.

In the former, final users can find useful information in the User Guide. In the latter, developers can learn how to develop components in the Programmer Guide

Bugs and feature requests

Have a bug or a feature request? Please first read the issue guidelines and search for existing and closed issues. If your problem or idea is not addressed yet, please open a new issue.

Quality Assurance

This project is part of FIWARE and has been rated as follows:

  • Version Tested:
  • Documentation:
  • Responsiveness:
  • FIWARE Testing:

Testing

Testing of WireCloud is based on two different frameworks. On the one side, Python code is being tested using Django's own testing capabilities. On the other side, JavaScript code testing is based on Karma and Jasmine. Both tests are run on a local copy of the WireCloud repository on GitHub, inside the src folder.

Python code

Before running the tests, you have to ensure all the python dependencies are installed on the environment. To do so, execute the following commands on the src folder:

$ pip install -r requirements.txt
$ pip install -r requirements-dev.txt

Once installed all the dependencies, you can run the Python tests by using the following command:

$ python manage.py test --nologcapture -v 2 -a tags='wirecloud-noselenium'

WireCloud also comes with some selenium tests that can be executed using the following command:

$ python manage.py test --nologcapture -v 2 -a tags='wirecloud-selenium'

In this case, you will need to have Chrome and Firefox installed as well as chromedriver and geckodriver.

JavaScript code

Before being able to test JavaScript code, some dependencies have to be installed:

$ sudo npm install -g grunt-cli
$ npm install

Once installed all the npm dependencies, tests can be executed using grunt:

$ grunt

Monaco Editor

Wirecloud uses the Monaco Editor as its code editor. The Monaco Editor is the code editor that powers VS Code.

In order to use the Monaco Editor, install the npm dependencies and build the editor:

$ npm install
$ npm run build-monaco (optional, already done by npm install)

This will download the Monaco Editor and build it for Wirecloud.


License

WireCloud is licensed under Affero General Public License (GPL) version 3 (or any later, at your option) with classpath-like exception.

Are there any legal issues with AGPL 3.0? Is it safe for me to use?

There is absolutely no problem in using a product licensed under AGPL 3.0. Issues with GPL (or AGPL) licenses are mostly related with the fact that different people assign different interpretations on the meaning of the term β€œderivate work” used in these licenses. Due to this, some people believe that there is a risk in just using software under GPL or AGPL licenses (even without modifying it).

For the avoidance of doubt, the owners of this software licensed under an AGPL-3.0 license wish to make a clarifying public statement as follows:

Please note that software derived as a result of modifying the source code of this software in order to fix a bug or incorporate enhancements is considered a derivative work of the product. Software that merely uses or aggregates (i.e. links to) an otherwise unmodified version of existing software is not considered a derivative work, and therefore it does not need to be released as under the same license, or even released as open source.

wirecloud's People

Contributors

aarranz avatar ablanco avatar brylie avatar cblanco avatar dependabot[bot] avatar dmunozv04 avatar fdelavega avatar fisuda avatar github-actions[bot] avatar jason-fox avatar javier-soriano avatar jpajuelo avatar juliozinga avatar luksurious avatar mjimenezganan avatar mognom avatar oxixes avatar pcaro avatar rockneurotiko avatar sblancov avatar spanishkangaroo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wirecloud's Issues

NGSI Entity to PoI

Buenas Alvaro,

soy uno de los trabajadores del proyecto malaga citysense en TOPdigital. Mi problema es que en nuestro web service recibimos la posicion del mapa como dos datos independientes (latitud,longitud) y el operador llama a position, no entiendo muy bien como funciona, o si tendria que mandar el atributo en uno o modificar tu codigo para que pueda aceptarlo en dos!

Te agradeceria que me puedas guiar sobre esto, gracias!

WireCloud Installer

When following the tutorial,

running this command :
(ENV)root@ubuntu:/opt# wirecloud-admin startproject wirecloud_instance --quick-start

results to this error:

Traceback (most recent call last): File "/usr/local/bin/wirecloud-admin", line 7, in <module> from wirecloud.commons.wirecloud_admin import execute_from_command_line File "/usr/local/lib/python2.7/dist-packages/wirecloud/commons/wirecloud_admin.py", line 23, in <module> from django.core.management import LaxOptionParser ImportError: cannot import name LaxOptionParser

But i could not find any package name laxoptionparser for ubuntu..

Wirecloud browser support

What are the web browsers supported by Wirecloud? I was not able to find this information in the documentation.

Widget close event

When user closes widget (select 'Close' button in top right corner of the widget) it should be possible to detect this event programmatically.

In addition, the same principle should be applied on the rest of the widget manipulation options (e.g. minimize, maximize, full dragboard, exit full dragboard, extract from grid, snap to grid, rename).

Fixed widgets on all tabs

How can I wire an application consisting of more than one tabs containing one ore more widgets with the same content and functionality? Is it possible to define a widget outside a tab so that ist is always visible when the user selects any tab?

Provide search corrections

Whoosh supports search query corrections, use it for provide user with corrected queries when searching available resources in the local catalogue of the user (and for external WireCloud catalogues).

This ticket has nothing to do with adding support for correcting search queries made to the FI-WARE's Marketplace & Store, as they need to provide that support via API.

Add category metadata support to mashable application descriptions

This ticket is only for tracking that category metadata can be added to mashable application components descriptions and WireCloud handles it correctly.

In a near future, this metadata will be use to allow browsing resources using those categories in the user interface, but this will be tracked using another ticket.

Support widgets without titles

Sometimes there is not a reason to show a title near the widget, WireCloud should provide a way for displaying widgets without a title to be able to create clear/simple dashboards.

Add the same widget from marketplace to different tabs

I have an application consisting of various tabs with the same widget on more than one tabs. In wiring view I see all instances of this widget but I cannot differ which of them belongs to which tab. Is it possible to rename these widgets so that the correlation to the tabs will be recognizable?

Pagination in NGSI API

is pagination avaible in Wire Cloud NGSI API? how can I use this new option in Wire Cloud?

Private versioning for widget develop

It would be useful for a widget developer to have a private versioning for widgets in development.
Namely appending "-dev" to version number in config.xml should enable same version widget overwrite even in the case of different widget content (i.e. different hash).

Reverse for 'wirecloud_showcase.media' with arguments '(u'index.html',)' and keyword arguments '{}' not found.

Since yesterdays update to latest "develop" branch version, I get the following error for all my widgets:
NoReverseMatch at /api/widget/CoNWeT/weather-example/1.0.1/xhtml
Reverse for 'wirecloud_showcase.media' with arguments '(u'index.html',)' and keyword arguments '{}' not found.
Request Method: GET
Request URL: http://192.168.15.141:9090/api/widget/CoNWeT/weather-example/1.0.1/xhtml
Django Version: 1.4.5
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'wirecloud_showcase.media' with arguments '(u'index.html',)' and keyword arguments '{}' not found.
Exception Location: C:\Python27\lib\site-packages\django\core\urlresolvers.py in _reverse_with_prefix, line 396
Python Executable: C:\Python27\python.exe
Python Version: 2.7.3
Python Path:
['C:\Users\reimer\Projekte\fispace\wirecloud\src',
'C:\Python27\lib\site-packages\setuptools-0.8-py2.7.egg',
'C:\Python27\lib\site-packages\pip-1.3.1-py2.7.egg',
'C:\Windows\system32\python27.zip',
'C:\Python27\DLLs',
'C:\Python27\lib',
'C:\Python27\lib\plat-win',
'C:\Python27\lib\lib-tk',
'C:\Python27',
'C:\Python27\lib\site-packages']
Server time: Thu, 11 Jul 2013 16:14:59 +0200

Widget height is horribly long after switching from column to grid layout

After switching from the column layout to the grid layout, the widget height is terribly long.All other widgets on the workspace will be kicked to the bottom of the page, which means a lot of scrolling to bring them back in the right position.

Example:

Height after adding in column-layout:
column_layout

Height after adding in grid-layout: (Scroll bar)
grid_layout

Exception handling for unknown endpoints

When attempting to push data over a widget's endpoint and that endpoint is not defined in the config.xml file, an unhandled exception (correctly) occurs:

Uncaught TypeError: Cannot call method 'propagate' of undefined dcac64b2b132.js:812

This behaviour is fine and not an error per se, of course, but I do have a feature request concerning these cases:

When attempting to push or register callbacks using endpoint names that are not defined, the error should be cought by the API itself and pointed out in the JavaScript console or a modal pop-up. I propose this for two reasons:

  1. uncaught exceptions will stop the execution of the script, which can be inconvenient in some cases; and more importantly
  2. in my opinion, the error message (Uncaught TypeError: Cannot call method 'propagate' of undefined) does not properly reflect the underlying issue that one attempts to use and endpoint that is not defined. This can be non-trivial for developers to identify.

Orderby not supported

When uploading a widget to the local marketplace there is a request http://<my_hostname>/wirecloud/catalogue/resources?orderby=-popularity returning HTTP 400 (BAD REQUEST) with error description: "Orderby not supported".
Call Stack:
Request io.js:185
makeRequest io.js:250
search WirecloudCatalogue.js:116
search CatalogueView.js:81
_search CatalogueSearchView.js:229
refresh PaginatedSource.js:139
refresh_if_needed CatalogueSearchView.js:211
dispatch Event.js:62
StyledElements.Alternative.setVisible StyledElements.js:1077
initFunc Alternatives.js:103
doInit StyledElements.js:1014
addCommand StyledElements.js:1043
showAlternative Alternatives.js:261
changeCurrentView CatalogueView.js:121
(anonymous function) CatalogueView.js:66
dispatch Event.js:62
StyledElements.Alternative.setVisible StyledElements.js:1077
initFunc Alternatives.js:103
doInit StyledElements.js:1014
addCommand StyledElements.js:1043
showAlternative Alternatives.js:261
onGetStoresSuccess MarketplaceView.js:64
onSuccess MarketManager.js:44
onReadyStateChange

Add python 3 support

  • Django 1.7 is going to drop python2.6
  • Almost any recent Linux distribution comes with python 3

Test directory not removed

During wirecloud tests temporary directories are created but noone is removed. This will cause /tmp to consume disk space for nothing on systems that don't reboot daily (like servers).

Best practice suggest to employ TempDirectory [1] fixture as decorator or as instance attribute in conjunction with unittest.TestCase.addCleanup() function during setup to track used resources, so to free them automatically during teardown phase (even when setup fails)

[1]
https://pythonhosted.org/testfixtures/files.html

Widget upload to integrated Marketplace fails when running on Apache

I integrated Wirecloud with Apache as described here

Everything is working fine except uploading and deleting widgets to/from the integrated Marketplace.
I get the following error when trying to upload a widget:
image002

When running Wirecloud in Django's internal web server, uploading the same widget works just fine.

Documentation improvement

Before installing WireCloud on Ubuntu you must install these packages

libxml2-dev libxslt1-dev python-dev

otherwise command

 $ sudo pip install APPS-Application-Mashup-Wirecloud-x.x.x.tar.gz

fails

Tested on Ubuntu 12.04 64bit

widget development workflow

What is the recommended workflow for widget development? The tutorials I see online seem to invite developers to zip-rename-upload the developing widget to test them out.

Is there a way to develop and test the widgets by circumventing all this zip-upload business? Or has anyone developed editor plugins to automate this process?

Allow passing parameters from embedding Webpage into Widgets

Please allow passing parameters from the surrounding Webpage into Widgets.
This means, if you embed a workspace as IFrame, you can add additional parameters. E.g. currently
<iframe src="<url_to_workspace>?mode=embedded"...> may be extended <iframe src="<url_to_workspace>?mode=embedded&user_id=1"...>

The given parameter user_id is then passed to, for example, an operator which accepts a specific parameter as input.

Currently this is prevented as the operator's URLs do not include such GET parameters.

Log doesn't add additional info to an exception

An Exception occured in my widget, but the log doesn't told me what the problem was
It just say:
Widget has not registered a callback for this input endpoint

Although I implemented the 'input' endpoint
I found out that the problem was a forgotten brace.

It wasn't a custom instance of the filab, it was the one which is online.

screenshot

Platform.Wiring data

Currently, I have to serialize all data transferred between Wirecloud widgets, which is very performance consuming. Is it possible/planned, that input and output endpoints can accept data "by reference" instead of "by value"?

Integrate Cosmos into WireCloud

Would be great to include into WireCloud an API for using the API provided by Cosmos(Hive) remotely.

This requires changes in the configuration of the Cosmos instances, WireCloud is not going to be able to connect to Cosmos instances using TCP mode in the HiveServer2 as it's not possible from browser.

JavaScript API can be created following this tutorial.

See the HiveServer2 documentation for more information.

Custom tutorials

It should be possible to define custom user tutorials which are accessed from User menu (upper right corner) -> Tutorials or from the Welcome screen (empty workspace).

This functionality would be used together with 'User template' issue (#50) to provide instructions for user first login.

Ask for confirmation when removing tabs

Currently, Wirecloud doesn't ask the user if she really want to remove the tab. Other operations ask for confirmation (for example, when removing workspaces).

Programmatic change of tab

We think about sending onclick events to a tab element to switch between tabs programmatically. The tab elements cannot be accessed directly because they have no id or name. Is there a possibillity to realize this?

User template

It should be possible to define 'user template' by using admin Wirecloud account in order to provide pre-configured Wirecloud environment with specific welcome screen, widgets, mashups, tutorials, language, etc. Wirecloud admin would be able to assign 'user template' to a new Wirecloud user.

In addition, Wirecloud should provide API which could be used by other applications to programmatically assign user templates to new users.

Description of endpoints in config.xml limited to 250 characters

If the description of an input or output endpoint in config.xml contains more than 250 characters, there is an "HTTP 500 - Internal Server Error" reported when uploading the widget. This results from a Postgres exception on the server because the db field for the description is limited to 250 chars. Is it possible, to eliminate this restriction?

Upgrade to new version

Is it posible to upgrade an existing wirecloud instance to a new wirecloud version without losing all data?

Error when vendor name contains space character

When the vendor name in config.xml contains a space character, this is converted to %20 and then to %2520 in the widget url (since % is converted to %25). After that, the url is not valid anymore.

WireCloud returns error 500 when the html file of Widgets are invalid

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/local/lib/python2.7/dist-packages/wirecloud/commons/baseviews/resource.py", line 50, in __call__
    return getattr(self, METHOD_MAPPING[request_method])(request, *args, **kwargs)

  File "/usr/local/lib/python2.7/dist-packages/wirecloud/platform/widget/views.py", line 117, in read
    code = fix_widget_code(code, base_url, content_type, request, charset, xhtml.use_platform_style, process_requirements(widget_info['requirements']), force_base, mode)

  File "/usr/local/lib/python2.7/dist-packages/wirecloud/platform/widget/utils.py", line 189, in fix_widget_code
    xmltree = etree.parse(BytesIO(widget_code), parser)

  File "lxml.etree.pyx", line 3201, in lxml.etree.parse (src/lxml/lxml.etree.c:65033)

  File "parser.pxi", line 1588, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:93395)

  File "parser.pxi", line 1617, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:93691)

  File "parser.pxi", line 1495, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:92490)

  File "parser.pxi", line 1011, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:89130)

  File "parser.pxi", line 577, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:84831)

  File "parser.pxi", line 676, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:85936)

  File "parser.pxi", line 627, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:85428)

XMLSyntaxError: None

Use whoosh for searching catalogue resources

Current database search engine has some drawbacks:

  • Doesn't provide autocompletion assistance.
  • Doesn't play nicely with translated resources.
  • Makes hard to extend the search engine features and makes the search engine depend on ad-hoc database relations.
  • ...

I think that reimplementing the search engine using whoosh should improve this situation.

Quickstar conf rise Internal Server Error

Hi there, I'm trying to familiarize myself with Wirecloud starting with quickstart option as it is shown in the documentation.

wirecloud-admin startproject wirecloud_instance --quick-start

But i got this error:

mod_wsgi (pid=19541): Exception occurred processing WSGI script '/opt/quickly/quickly/wsgi.py'.
Traceback (most recent call last): ...
ImportError: Could not import settings 'quickly.settings' (Is it on sys.path? Is there an 
import error in the settings file?): No module named wirecloud.commons.utils.conf

I followed the steps of Administration and Installation Guide and have configured my local instance over Apache 2.4 server

PD: sorry i dont know how to assign Doubt label.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.