1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-24 14:04:19 +00:00

📔 Document installation process

This commit is contained in:
Steffo 2021-05-15 02:39:33 +02:00
parent 8975567118
commit 522ec0b5be
Signed by: steffo
GPG key ID: 6965406171929D01
104 changed files with 25845 additions and 1 deletions

2
.gitignore vendored
View file

@ -2,7 +2,6 @@
/.config*.py
# --- --- --- --- --- --- --- ---
# AUTOGENERATED STUFF BELOW
# --- --- --- --- --- --- --- ---
@ -40,6 +39,7 @@ __pycache__/
# Distribution / packaging
.Python
build/
!/docs/build
develop-eggs/
dist/
downloads/

BIN
docs/build/doctrees/about/index.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/build/doctrees/environment.pickle vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
docs/build/doctrees/index.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

4
docs/build/html/.buildinfo vendored Normal file
View file

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 697fdcf2a865ef95bc825235d33ec5a4
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -0,0 +1,2 @@
Il progetto
===========

View file

@ -0,0 +1,37 @@
``nest_backend`` - Web API in Python
====================================
.. automodule:: nest_backend
``.gestione`` - Metodi di utility
---------------------------------
.. automodule:: nest_backend.gestione
``.database`` - Database
------------------------
.. automodule:: nest_backend.database
``.base`` - Estensione flask
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: nest_backend.database.base
``.tables`` - Tabelle
~~~~~~~~~~~~~~~~~~~~~
.. automodule:: nest_backend.database.tables
:imported-members:
``.routes`` - Percorsi API
--------------------------
.. automodule:: nest_backend.database.routes
:imported-members:

View file

@ -0,0 +1,2 @@
``nest_crawler`` - Crawler in Python
====================================

View file

@ -0,0 +1,2 @@
``nest_frontend`` - Interfaccia utente in React
===============================================

28
docs/build/html/_sources/index.rst.txt vendored Normal file
View file

@ -0,0 +1,28 @@
N.E.S.T.
========
Benvenuto alla documentazione di N.E.S.T.!
.. toctree::
:maxdepth: 2
:caption: Manuale
about/index
installation/index
.. toctree::
:caption: Documentazione autogenerata
backend/index
crawler/index
frontend/index
Collegamenti utili
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

View file

@ -0,0 +1,337 @@
Installazione
=============
Questa guida illustra come installare interamente N.E.S.T. su un server Linux.
Prerequisiti
------------
Per installare ed eseguire N.E.S.T., è necessario:
- Una connessione a Internet
- Un sistema operativo Linux-based (preferibilmente `Arch Linux <https://wiki.archlinux.org/title/Main_page>`_)
- `SystemD ^248.2 <https://www.freedesktop.org/wiki/Software/systemd/>`_
- `Apache HTTP Server ^2.4.46 <https://httpd.apache.org/>`_
- `PostgreSQL ^13.2 <https://www.postgresql.org/download/>`_
- `Git ^2.31.1 <https://git-scm.com/>`_
- `Python ^3.8 <https://www.python.org/downloads/>`_
- `Poetry ^1.0 <https://python-poetry.org/>`_
- `NodeJS ^16.0 <https://nodejs.org/>`_
- `npm ^7.13.0 <https://www.npmjs.com/>`_
Creare un nuovo utente
----------------------
Per motivi di sicurezza, si suggerisce di creare un nuovo utente con il quale eseguire il progetto:
.. note::
È necessario essere amministratori di sistema per eseguire i seguenti comandi.
Si veda il manuale di `useradd <https://linux.die.net/man/8/useradd>`_ per più dettagli.
.. code-block:: console
root:~# mkdir --parents /srv/nest
root:~# useradd --home-dir /srv/nest --shell /bin/bash nest
root:~# chown --recursive nest: /srv/nest
Scaricare il codice sorgente
----------------------------
Per installare N.E.S.T., è necessario avere il codice sorgente disponibile sul server.
Si consiglia di scaricarlo tramite *Git*:
.. code-block:: console
nest:~$ git clone https://gitlab.steffo.eu/nest/g2-progetto.git
Questo creerà una nuova cartella ``g2-progetto`` nella directory in cui è stato eseguito il comando.
Per proseguire, sarà necessario entrarvi:
.. code-block:: console
nest:~$ cd g2-progetto
Creare il database
------------------
N.E.S.T. necessita di un database PostgreSQL in cui salvare i dati.
Per motivi di sicurezza, si suggerisce di creare un ruolo isolato dal resto del DBMS apposta per N.E.S.T.:
.. code-block:: console
postgres:~$ createuser nest
Per creare il database PostgreSQL, si esegua:
.. code-block:: console
postgres:~$ createdb --owner=nest nest
Creare un file di configurazione per il backend
-----------------------------------------------
Il backend usa un file di configurazione per impostare certe variabili.
Si crei un nuovo file nella working directory del progetto denominato ``config.py``:
.. code-block:: console
nest:~/g2-progetto$ vim config.py
Il file dovrà avere i seguenti contenuti:
.. code-block:: python
# Una stringa rappresentante il database da utilizzare
# Per maggiori informazioni sulla sintassi, si veda https://docs.sqlalchemy.org/en/14/core/engines.html
SQLALCHEMY_DATABASE_URI = "postgresql://nest@/nest"
# Una stringa casuale utilizzata per generare i JSON Web Token (JWT)
# Va mantenuta segreta e costante per tutta l'operazione del backend!
# Si suggerisce di premere tasti casuali sulla tastiera finchè la riga non è piena.
SECRET_KEY = "dsjiofgvinmodfiojvbnio3erfnoiweraqugu43ghjwrevniuwerng43iugnreuwignhritmj43i43nb8i42ug0wevkwovmwigtjj"
Installare le dipendenze Python
-------------------------------
Le dipendenze Python sono gestite da *Poetry*, e possono essere installate con:
.. code-block:: console
nest:~/g2-progetto$ poetry install
Poetry creerà automaticamente un `venv <https://docs.python.org/3/library/venv.html>`_ e vi installerà all'interno tutti
i pacchetti necessari all'esecuzione del backend e del crawler di N.E.S.T. .
**Segnatevi il nome** del venv creato da Poetry, in quanto sarà necessario per
:ref:`Creare un servizio SystemD per il backend`:
.. code-block:: console
Creating virtualenv nest-7C2fm2VD-py3.9 in /srv/nest/.cache/pypoetry/virtualenvs
Installare le dipendenze NodeJS
-------------------------------
Le dipendenze NodeJS sono gestite da *npm*, e possono essere installate con:
.. code-block:: console
nest:~/g2-progetto$ npm install
npm creerà automaticamente una cartella
`node_modules <https://docs.npmjs.com/cli/v7/configuring-npm/folders#node-modules>`_ e vi installerà all'interno tutte
le librerie necessarie all'esecuzione del frontend di N.E.S.T. .
Creare un servizio SystemD per il backend
-----------------------------------------
Per fare in modo che il backend rimanga attivo in background, anche dopo un riavvio, si suggerisce di installarlo come
servizio di sistema di *SystemD*:
.. code-block:: console
root:~# systemctl edit --force --full nest-backend
Inserire all'interno del file le seguenti direttive:
.. code-block:: systemd
[Unit]
Description=N.E.S.T. Backend
Wants=network-online.target postgresql.service
After=network-online.target nss-lookup.target postgresql.service
[Service]
Type=exec
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
# Si sostituisca a questo il percorso del virtualenv creato in precedenza da Poetry
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ExecStart=/srv/nest/.cache/pypoetry/virtualenvs/nest-7C2fm2VD-py3.9/bin/python -m gunicorn -b 127.0.0.1:30040 --env="FLASK_CONFIG=../config.py" nest_backend.app:rp_app
[Install]
WantedBy=multi-user.target
Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:
.. code-block:: console
root:~# systemctl start nest-backend
In caso di successo, l'API dovrebbe essere esposto sulla porta ``30040`` dell'indirizzo di loopback ``127.0.0.1``:
.. code-block:: console
root:~# curl 127.0.0.1:30040/doa
If you see this, the server is fine.
Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:
.. code-block:: console
root:~# systemctl enable nest-backend
Compilare il frontend
---------------------
Perchè sia possibile servire il frontend agli utenti, è necessario prima crearne una versione compilata ottimizzata.
È possibile farlo con il comando:
.. code-block:: console
nest:~/g2-progetto$ npm run build
Verrà creata una cartella ``build`` con all'interno la versione compilata.
Creare un servizio SystemD per il frontend
------------------------------------------
Per rendere disponibile alla rete la copia locale del frontend, si suggerisce di avviare lo script npm ``serve``
integrato con N.E.S.T. come un servizio di sistema di *SystemD*:
.. code-block:: console
root:~# systemctl edit --force --full nest-frontend
Inserire all'interno del file le seguenti direttive:
.. code-block:: systemd
[Unit]
Description=N.E.S.T. Frontend
Wants=network-online.target nest-backend.service
After=network-online.target nss-lookup.target nest-backend.service
[Service]
Type=exec
Environment=NODE_ENV=production
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
ExecStart=/usr/bin/npm run serve
[Install]
WantedBy=multi-user.target
.. todo::
Questo file non è stato testato, in quanto sul server demo è in uso una versione più complessa che usa
`nvm <https://github.com/nvm-sh/nvm>`_ per gestire più versioni di NodeJS sullo stesso sistema.
La versione in uso sul server demo è:
.. code-block:: systemd
[Unit]
Description=N.E.S.T. Frontend
Wants=network-online.target nest-backend.service
After=network-online.target nss-lookup.target nest-backend.service
[Service]
Type=exec
Environment=NODE_ENV=production
Environment=NODE_VERSION=16
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
ExecStart=/srv/nest/.nvm/nvm-exec npm run serve
[Install]
WantedBy=multi-user.target
Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:
.. code-block:: console
root:~# systemctl start nest-frontend
In caso di successo, il frontend dovrebbe essere esposto sulla porta ``30041`` dell'indirizzo di loopback ``127.0.0.1``:
.. code-block:: console
root:~# curl 127.0.0.1:30041
[...]
Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:
.. code-block:: console
root:~# systemctl enable nest-frontend
Creare un servizio SystemD per il crawler
-----------------------------------------
.. todo::
Il crawler non è ancora disponibile.
Configurare Apache come reverse proxy
-------------------------------------
Per rendere l'API e il frontend disponibili al pubblico, si suggerisce di configurare Apache HTTP Server
come reverse proxy.
La configurazione di Apache varia molto da distribuzione a distribuzione Linux, e talvolta anche da server a server;
pertanto, si fornisce solamente un file `VirtualHost <https://httpd.apache.org/docs/2.4/vhosts/examples.html>`_ di
esempio da adattare al proprio setup:
.. code-block:: apacheconf
<VirtualHost *:80>
ServerName "api.nest.steffo.eu"
ServerName "prod.nest.steffo.eu"
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName "api.nest.steffo.eu"
SSLEngine on
SSLCertificateFile "/root/.acme.sh/*.nest.steffo.eu/fullchain.cer"
SSLCertificateKeyFile "/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key"
ProxyPass "/" "http://127.0.0.1:30040/"
ProxyPassReverse "/" "http://127.0.0.1:30040/"
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
<VirtualHost *:443>
ServerName "prod.nest.steffo.eu"
SSLEngine on
SSLCertificateFile "/root/.acme.sh/*.nest.steffo.eu/fullchain.cer"
SSLCertificateKeyFile "/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key"
ProxyPass "/" "http://127.0.0.1:30041/"
ProxyPassReverse "/" "http://127.0.0.1:30041/"
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

294
docs/build/html/_static/base-stemmer.js vendored Normal file
View file

@ -0,0 +1,294 @@
/**@constructor*/
BaseStemmer = function() {
this.setCurrent = function(value) {
this.current = value;
this.cursor = 0;
this.limit = this.current.length;
this.limit_backward = 0;
this.bra = this.cursor;
this.ket = this.limit;
};
this.getCurrent = function() {
return this.current;
};
this.copy_from = function(other) {
this.current = other.current;
this.cursor = other.cursor;
this.limit = other.limit;
this.limit_backward = other.limit_backward;
this.bra = other.bra;
this.ket = other.ket;
};
this.in_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor++;
return true;
};
this.in_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor--;
return true;
};
this.out_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) {
this.cursor++;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
this.cursor++;
return true;
}
return false;
};
this.out_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) {
this.cursor--;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
this.cursor--;
return true;
}
return false;
};
this.eq_s = function(s)
{
if (this.limit - this.cursor < s.length) return false;
if (this.current.slice(this.cursor, this.cursor + s.length) != s)
{
return false;
}
this.cursor += s.length;
return true;
};
this.eq_s_b = function(s)
{
if (this.cursor - this.limit_backward < s.length) return false;
if (this.current.slice(this.cursor - s.length, this.cursor) != s)
{
return false;
}
this.cursor -= s.length;
return true;
};
/** @return {number} */ this.find_among = function(v)
{
var i = 0;
var j = v.length;
var c = this.cursor;
var l = this.limit;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >>> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j; // smaller
// w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
var w = v[k];
var i2;
for (i2 = common; i2 < w[0].length; i2++)
{
if (c + common == l)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break; // v->s has been inspected
if (j == i) break; // only one item in v
// - but now we need to go round once more to get
// v->s inspected. This looks messy, but is actually
// the optimal approach.
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c + w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c + w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
// find_among_b is for backwards processing. Same comments apply
this.find_among_b = function(v)
{
var i = 0;
var j = v.length
var c = this.cursor;
var lb = this.limit_backward;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j;
var w = v[k];
var i2;
for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
{
if (c - common == lb)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break;
if (j == i) break;
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c - w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c - w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
/* to replace chars between c_bra and c_ket in this.current by the
* chars in s.
*/
this.replace_s = function(c_bra, c_ket, s)
{
var adjustment = s.length - (c_ket - c_bra);
this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
this.limit += adjustment;
if (this.cursor >= c_ket) this.cursor += adjustment;
else if (this.cursor > c_bra) this.cursor = c_bra;
return adjustment;
};
this.slice_check = function()
{
if (this.bra < 0 ||
this.bra > this.ket ||
this.ket > this.limit ||
this.limit > this.current.length)
{
return false;
}
return true;
};
this.slice_from = function(s)
{
var result = false;
if (this.slice_check())
{
this.replace_s(this.bra, this.ket, s);
result = true;
}
return result;
};
this.slice_del = function()
{
return this.slice_from("");
};
this.insert = function(c_bra, c_ket, s)
{
var adjustment = this.replace_s(c_bra, c_ket, s);
if (c_bra <= this.bra) this.bra += adjustment;
if (c_bra <= this.ket) this.ket += adjustment;
};
this.slice_to = function()
{
var result = '';
if (this.slice_check())
{
result = this.current.slice(this.bra, this.ket);
}
return result;
};
this.assign_to = function()
{
return this.current.slice(0, this.limit);
};
};

861
docs/build/html/_static/basic.css vendored Normal file
View file

@ -0,0 +1,861 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 450px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0.5em;
content: ":";
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
code.descclassname {
background-color: transparent;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View file

@ -0,0 +1 @@
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

4
docs/build/html/_static/css/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

321
docs/build/html/_static/doctools.js vendored Normal file
View file

@ -0,0 +1,321 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
&& !event.shiftKey) {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

View file

@ -0,0 +1,12 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.1.0',
LANGUAGE: 'it',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false
};

BIN
docs/build/html/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,996 @@
// Generated by Snowball 2.1.0 - https://snowballstem.org/
/**@constructor*/
ItalianStemmer = function() {
var base = new BaseStemmer();
/** @const */ var a_0 = [
["", -1, 7],
["qu", 0, 6],
["\u00E1", 0, 1],
["\u00E9", 0, 2],
["\u00ED", 0, 3],
["\u00F3", 0, 4],
["\u00FA", 0, 5]
];
/** @const */ var a_1 = [
["", -1, 3],
["I", 0, 1],
["U", 0, 2]
];
/** @const */ var a_2 = [
["la", -1, -1],
["cela", 0, -1],
["gliela", 0, -1],
["mela", 0, -1],
["tela", 0, -1],
["vela", 0, -1],
["le", -1, -1],
["cele", 6, -1],
["gliele", 6, -1],
["mele", 6, -1],
["tele", 6, -1],
["vele", 6, -1],
["ne", -1, -1],
["cene", 12, -1],
["gliene", 12, -1],
["mene", 12, -1],
["sene", 12, -1],
["tene", 12, -1],
["vene", 12, -1],
["ci", -1, -1],
["li", -1, -1],
["celi", 20, -1],
["glieli", 20, -1],
["meli", 20, -1],
["teli", 20, -1],
["veli", 20, -1],
["gli", 20, -1],
["mi", -1, -1],
["si", -1, -1],
["ti", -1, -1],
["vi", -1, -1],
["lo", -1, -1],
["celo", 31, -1],
["glielo", 31, -1],
["melo", 31, -1],
["telo", 31, -1],
["velo", 31, -1]
];
/** @const */ var a_3 = [
["ando", -1, 1],
["endo", -1, 1],
["ar", -1, 2],
["er", -1, 2],
["ir", -1, 2]
];
/** @const */ var a_4 = [
["ic", -1, -1],
["abil", -1, -1],
["os", -1, -1],
["iv", -1, 1]
];
/** @const */ var a_5 = [
["ic", -1, 1],
["abil", -1, 1],
["iv", -1, 1]
];
/** @const */ var a_6 = [
["ica", -1, 1],
["logia", -1, 3],
["osa", -1, 1],
["ista", -1, 1],
["iva", -1, 9],
["anza", -1, 1],
["enza", -1, 5],
["ice", -1, 1],
["atrice", 7, 1],
["iche", -1, 1],
["logie", -1, 3],
["abile", -1, 1],
["ibile", -1, 1],
["usione", -1, 4],
["azione", -1, 2],
["uzione", -1, 4],
["atore", -1, 2],
["ose", -1, 1],
["ante", -1, 1],
["mente", -1, 1],
["amente", 19, 7],
["iste", -1, 1],
["ive", -1, 9],
["anze", -1, 1],
["enze", -1, 5],
["ici", -1, 1],
["atrici", 25, 1],
["ichi", -1, 1],
["abili", -1, 1],
["ibili", -1, 1],
["ismi", -1, 1],
["usioni", -1, 4],
["azioni", -1, 2],
["uzioni", -1, 4],
["atori", -1, 2],
["osi", -1, 1],
["anti", -1, 1],
["amenti", -1, 6],
["imenti", -1, 6],
["isti", -1, 1],
["ivi", -1, 9],
["ico", -1, 1],
["ismo", -1, 1],
["oso", -1, 1],
["amento", -1, 6],
["imento", -1, 6],
["ivo", -1, 9],
["it\u00E0", -1, 8],
["ist\u00E0", -1, 1],
["ist\u00E8", -1, 1],
["ist\u00EC", -1, 1]
];
/** @const */ var a_7 = [
["isca", -1, 1],
["enda", -1, 1],
["ata", -1, 1],
["ita", -1, 1],
["uta", -1, 1],
["ava", -1, 1],
["eva", -1, 1],
["iva", -1, 1],
["erebbe", -1, 1],
["irebbe", -1, 1],
["isce", -1, 1],
["ende", -1, 1],
["are", -1, 1],
["ere", -1, 1],
["ire", -1, 1],
["asse", -1, 1],
["ate", -1, 1],
["avate", 16, 1],
["evate", 16, 1],
["ivate", 16, 1],
["ete", -1, 1],
["erete", 20, 1],
["irete", 20, 1],
["ite", -1, 1],
["ereste", -1, 1],
["ireste", -1, 1],
["ute", -1, 1],
["erai", -1, 1],
["irai", -1, 1],
["isci", -1, 1],
["endi", -1, 1],
["erei", -1, 1],
["irei", -1, 1],
["assi", -1, 1],
["ati", -1, 1],
["iti", -1, 1],
["eresti", -1, 1],
["iresti", -1, 1],
["uti", -1, 1],
["avi", -1, 1],
["evi", -1, 1],
["ivi", -1, 1],
["isco", -1, 1],
["ando", -1, 1],
["endo", -1, 1],
["Yamo", -1, 1],
["iamo", -1, 1],
["avamo", -1, 1],
["evamo", -1, 1],
["ivamo", -1, 1],
["eremo", -1, 1],
["iremo", -1, 1],
["assimo", -1, 1],
["ammo", -1, 1],
["emmo", -1, 1],
["eremmo", 54, 1],
["iremmo", 54, 1],
["immo", -1, 1],
["ano", -1, 1],
["iscano", 58, 1],
["avano", 58, 1],
["evano", 58, 1],
["ivano", 58, 1],
["eranno", -1, 1],
["iranno", -1, 1],
["ono", -1, 1],
["iscono", 65, 1],
["arono", 65, 1],
["erono", 65, 1],
["irono", 65, 1],
["erebbero", -1, 1],
["irebbero", -1, 1],
["assero", -1, 1],
["essero", -1, 1],
["issero", -1, 1],
["ato", -1, 1],
["ito", -1, 1],
["uto", -1, 1],
["avo", -1, 1],
["evo", -1, 1],
["ivo", -1, 1],
["ar", -1, 1],
["ir", -1, 1],
["er\u00E0", -1, 1],
["ir\u00E0", -1, 1],
["er\u00F2", -1, 1],
["ir\u00F2", -1, 1]
];
/** @const */ var /** Array<int> */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1];
/** @const */ var /** Array<int> */ g_AEIO = [17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2];
/** @const */ var /** Array<int> */ g_CG = [17];
var /** number */ I_p2 = 0;
var /** number */ I_p1 = 0;
var /** number */ I_pV = 0;
/** @return {boolean} */
function r_prelude() {
var /** number */ among_var;
var /** number */ v_1 = base.cursor;
while(true)
{
var /** number */ v_2 = base.cursor;
lab0: {
base.bra = base.cursor;
among_var = base.find_among(a_0);
if (among_var == 0)
{
break lab0;
}
base.ket = base.cursor;
switch (among_var) {
case 1:
if (!base.slice_from("\u00E0"))
{
return false;
}
break;
case 2:
if (!base.slice_from("\u00E8"))
{
return false;
}
break;
case 3:
if (!base.slice_from("\u00EC"))
{
return false;
}
break;
case 4:
if (!base.slice_from("\u00F2"))
{
return false;
}
break;
case 5:
if (!base.slice_from("\u00F9"))
{
return false;
}
break;
case 6:
if (!base.slice_from("qU"))
{
return false;
}
break;
case 7:
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
break;
}
continue;
}
base.cursor = v_2;
break;
}
base.cursor = v_1;
while(true)
{
var /** number */ v_3 = base.cursor;
lab1: {
golab2: while(true)
{
var /** number */ v_4 = base.cursor;
lab3: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab3;
}
base.bra = base.cursor;
lab4: {
var /** number */ v_5 = base.cursor;
lab5: {
if (!(base.eq_s("u")))
{
break lab5;
}
base.ket = base.cursor;
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab5;
}
if (!base.slice_from("U"))
{
return false;
}
break lab4;
}
base.cursor = v_5;
if (!(base.eq_s("i")))
{
break lab3;
}
base.ket = base.cursor;
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab3;
}
if (!base.slice_from("I"))
{
return false;
}
}
base.cursor = v_4;
break golab2;
}
base.cursor = v_4;
if (base.cursor >= base.limit)
{
break lab1;
}
base.cursor++;
}
continue;
}
base.cursor = v_3;
break;
}
return true;
};
/** @return {boolean} */
function r_mark_regions() {
I_pV = base.limit;
I_p1 = base.limit;
I_p2 = base.limit;
var /** number */ v_1 = base.cursor;
lab0: {
lab1: {
var /** number */ v_2 = base.cursor;
lab2: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab2;
}
lab3: {
var /** number */ v_3 = base.cursor;
lab4: {
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab4;
}
golab5: while(true)
{
lab6: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab6;
}
break golab5;
}
if (base.cursor >= base.limit)
{
break lab4;
}
base.cursor++;
}
break lab3;
}
base.cursor = v_3;
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab2;
}
golab7: while(true)
{
lab8: {
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab8;
}
break golab7;
}
if (base.cursor >= base.limit)
{
break lab2;
}
base.cursor++;
}
}
break lab1;
}
base.cursor = v_2;
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab0;
}
lab9: {
var /** number */ v_6 = base.cursor;
lab10: {
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab10;
}
golab11: while(true)
{
lab12: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab12;
}
break golab11;
}
if (base.cursor >= base.limit)
{
break lab10;
}
base.cursor++;
}
break lab9;
}
base.cursor = v_6;
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab0;
}
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
}
}
I_pV = base.cursor;
}
base.cursor = v_1;
var /** number */ v_8 = base.cursor;
lab13: {
golab14: while(true)
{
lab15: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab15;
}
break golab14;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
golab16: while(true)
{
lab17: {
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab17;
}
break golab16;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
I_p1 = base.cursor;
golab18: while(true)
{
lab19: {
if (!(base.in_grouping(g_v, 97, 249)))
{
break lab19;
}
break golab18;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
golab20: while(true)
{
lab21: {
if (!(base.out_grouping(g_v, 97, 249)))
{
break lab21;
}
break golab20;
}
if (base.cursor >= base.limit)
{
break lab13;
}
base.cursor++;
}
I_p2 = base.cursor;
}
base.cursor = v_8;
return true;
};
/** @return {boolean} */
function r_postlude() {
var /** number */ among_var;
while(true)
{
var /** number */ v_1 = base.cursor;
lab0: {
base.bra = base.cursor;
among_var = base.find_among(a_1);
if (among_var == 0)
{
break lab0;
}
base.ket = base.cursor;
switch (among_var) {
case 1:
if (!base.slice_from("i"))
{
return false;
}
break;
case 2:
if (!base.slice_from("u"))
{
return false;
}
break;
case 3:
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
break;
}
continue;
}
base.cursor = v_1;
break;
}
return true;
};
/** @return {boolean} */
function r_RV() {
if (!(I_pV <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_R1() {
if (!(I_p1 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_R2() {
if (!(I_p2 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_attached_pronoun() {
var /** number */ among_var;
base.ket = base.cursor;
if (base.find_among_b(a_2) == 0)
{
return false;
}
base.bra = base.cursor;
among_var = base.find_among_b(a_3);
if (among_var == 0)
{
return false;
}
if (!r_RV())
{
return false;
}
switch (among_var) {
case 1:
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!base.slice_from("e"))
{
return false;
}
break;
}
return true;
};
/** @return {boolean} */
function r_standard_suffix() {
var /** number */ among_var;
base.ket = base.cursor;
among_var = base.find_among_b(a_6);
if (among_var == 0)
{
return false;
}
base.bra = base.cursor;
switch (among_var) {
case 1:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_1 = base.limit - base.cursor;
lab0: {
base.ket = base.cursor;
if (!(base.eq_s_b("ic")))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_1;
break lab0;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 3:
if (!r_R2())
{
return false;
}
if (!base.slice_from("log"))
{
return false;
}
break;
case 4:
if (!r_R2())
{
return false;
}
if (!base.slice_from("u"))
{
return false;
}
break;
case 5:
if (!r_R2())
{
return false;
}
if (!base.slice_from("ente"))
{
return false;
}
break;
case 6:
if (!r_RV())
{
return false;
}
if (!base.slice_del())
{
return false;
}
break;
case 7:
if (!r_R1())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_2 = base.limit - base.cursor;
lab1: {
base.ket = base.cursor;
among_var = base.find_among_b(a_4);
if (among_var == 0)
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
switch (among_var) {
case 1:
base.ket = base.cursor;
if (!(base.eq_s_b("at")))
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
break;
}
}
break;
case 8:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_3 = base.limit - base.cursor;
lab2: {
base.ket = base.cursor;
if (base.find_among_b(a_5) == 0)
{
base.cursor = base.limit - v_3;
break lab2;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_3;
break lab2;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 9:
if (!r_R2())
{
return false;
}
if (!base.slice_del())
{
return false;
}
var /** number */ v_4 = base.limit - base.cursor;
lab3: {
base.ket = base.cursor;
if (!(base.eq_s_b("at")))
{
base.cursor = base.limit - v_4;
break lab3;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_4;
break lab3;
}
if (!base.slice_del())
{
return false;
}
base.ket = base.cursor;
if (!(base.eq_s_b("ic")))
{
base.cursor = base.limit - v_4;
break lab3;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_4;
break lab3;
}
if (!base.slice_del())
{
return false;
}
}
break;
}
return true;
};
/** @return {boolean} */
function r_verb_suffix() {
if (base.cursor < I_pV)
{
return false;
}
var /** number */ v_2 = base.limit_backward;
base.limit_backward = I_pV;
base.ket = base.cursor;
if (base.find_among_b(a_7) == 0)
{
base.limit_backward = v_2;
return false;
}
base.bra = base.cursor;
if (!base.slice_del())
{
return false;
}
base.limit_backward = v_2;
return true;
};
/** @return {boolean} */
function r_vowel_suffix() {
var /** number */ v_1 = base.limit - base.cursor;
lab0: {
base.ket = base.cursor;
if (!(base.in_grouping_b(g_AEIO, 97, 242)))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.bra = base.cursor;
if (!r_RV())
{
base.cursor = base.limit - v_1;
break lab0;
}
if (!base.slice_del())
{
return false;
}
base.ket = base.cursor;
if (!(base.eq_s_b("i")))
{
base.cursor = base.limit - v_1;
break lab0;
}
base.bra = base.cursor;
if (!r_RV())
{
base.cursor = base.limit - v_1;
break lab0;
}
if (!base.slice_del())
{
return false;
}
}
var /** number */ v_2 = base.limit - base.cursor;
lab1: {
base.ket = base.cursor;
if (!(base.eq_s_b("h")))
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!(base.in_grouping_b(g_CG, 99, 103)))
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!r_RV())
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
}
return true;
};
this.stem = /** @return {boolean} */ function() {
var /** number */ v_1 = base.cursor;
r_prelude();
base.cursor = v_1;
r_mark_regions();
base.limit_backward = base.cursor; base.cursor = base.limit;
var /** number */ v_3 = base.limit - base.cursor;
r_attached_pronoun();
base.cursor = base.limit - v_3;
var /** number */ v_4 = base.limit - base.cursor;
lab0: {
lab1: {
var /** number */ v_5 = base.limit - base.cursor;
lab2: {
if (!r_standard_suffix())
{
break lab2;
}
break lab1;
}
base.cursor = base.limit - v_5;
if (!r_verb_suffix())
{
break lab0;
}
}
}
base.cursor = base.limit - v_4;
var /** number */ v_6 = base.limit - base.cursor;
r_vowel_suffix();
base.cursor = base.limit - v_6;
base.cursor = base.limit_backward;
var /** number */ v_7 = base.cursor;
r_postlude();
base.cursor = v_7;
return true;
};
/**@return{string}*/
this['stemWord'] = function(/**string*/word) {
base.setCurrent(word);
this.stem();
return base.getCurrent();
};
};

10872
docs/build/html/_static/jquery-3.5.1.js vendored Normal file

File diff suppressed because it is too large Load diff

2
docs/build/html/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

View file

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

View file

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

File diff suppressed because one or more lines are too long

1
docs/build/html/_static/js/theme.js vendored Normal file
View file

@ -0,0 +1 @@
!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<span class="toctree-expand"></span>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);

117
docs/build/html/_static/language_data.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
docs/build/html/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
docs/build/html/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

74
docs/build/html/_static/pygments.css vendored Normal file
View file

@ -0,0 +1,74 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

522
docs/build/html/_static/searchtools.js vendored Normal file
View file

@ -0,0 +1,522 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2
};
}
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var i;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase());
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
var toAppend;
// select the correct list
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
});
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// no source available, just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
$(document).ready(function() {
Search.init();
});

63
docs/build/html/_static/translations.js vendored Normal file
View file

@ -0,0 +1,63 @@
Documentation.addTranslations({
"locale": "it",
"messages": {
"%(filename)s &#8212; %(docstitle)s": "%(filename)s &#8212; %(docstitle)s",
"&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.",
"&#169; Copyright %(copyright)s.": "&#169; Copyright %(copyright)s.",
", in ": ", in ",
"About these documents": "A proposito di questi documenti",
"Automatically generated list of changes in version %(version)s": "Lista delle modifiche generata automaticamente nella versione %(version)s",
"C API changes": "Modifiche nelle API C",
"Changes in Version %(version)s &#8212; %(docstitle)s": "Cambiamenti nella Versione %(version)s &#8212; %(docstitle)s",
"Collapse sidebar": "Comprimi la barra laterale",
"Complete Table of Contents": "Tabella dei contenuti completa",
"Contents": "Contenuti",
"Copyright": "Copyright",
"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creato con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.",
"Expand sidebar": "Espandi la barra laterale",
"Full index on one page": "Indice completo in una pagina",
"General Index": "Indice generale",
"Global Module Index": "Indice dei moduli",
"Go": "Vai",
"Hide Search Matches": "Nascondi i risultati della ricerca",
"Index": "Indice",
"Index &ndash; %(key)s": "Indice &ndash; %(key)s",
"Index pages by letter": "Indice delle pagine per lettera",
"Indices and tables:": "Indici e tabelle:",
"Last updated on %(last_updated)s.": "Ultimo aggiornamento %(last_updated)s.",
"Library changes": "Modifiche nella libreria",
"Navigation": "Navigazione",
"Next topic": "Argomento successivo",
"Other changes": "Altre modifiche",
"Overview": "Sintesi",
"Permalink to this definition": "Link a questa definizione",
"Permalink to this headline": "Link a questa intestazione",
"Please activate JavaScript to enable the search\n functionality.": "Attiva JavaScript per abilitare la funzione\u23ce\ndi ricerca.",
"Preparing search...": "Preparo la ricerca...",
"Previous topic": "Argomento precedente",
"Quick search": "Ricerca veloce",
"Search": "Cerca",
"Search Page": "Cerca",
"Search Results": "Risultati della ricerca",
"Search finished, found %s page(s) matching the search query.": "Ricerca completata, trovata/e %s pagina/e corrispondenti.",
"Search within %(docstitle)s": "Cerca in %(docstitle)s",
"Searching": "Cerca",
"Searching for multiple words only shows matches that contain\n all words.": "",
"Show Source": "Mostra sorgente",
"Table of Contents": "",
"This Page": "Questa pagina",
"Welcome! This is": "Benvenuto! Questa \u00e8",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La tua ricerca non corrisponde a nessun documento. Verifica che tutte le parole siano scritte correttamente e di aver scelto un numero sufficiente di categorie.",
"all functions, classes, terms": "tutte le funzioni, classi e moduli",
"can be huge": "pu\u00f2 essere enorme",
"last updated": "ultimo aggiornamento",
"lists all sections and subsections": "elenca l'insieme delle sezioni e sottosezioni",
"next chapter": "capitolo successivo",
"previous chapter": "capitolo precedente",
"quick access to all modules": "accesso veloce ai moduli",
"search": "cerca",
"search this documentation": "cerca in questa documentazione",
"the documentation for": "la documentazione per"
},
"plural_expr": "(n != 1)"
});

File diff suppressed because it is too large Load diff

6
docs/build/html/_static/underscore.js vendored Normal file

File diff suppressed because one or more lines are too long

217
docs/build/html/about/index.html vendored Normal file
View file

@ -0,0 +1,217 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Il progetto &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../genindex.html" />
<link rel="search" title="Cerca" href="../search.html" />
<link rel="next" title="Installazione" href="../installation/index.html" />
<link rel="prev" title="N.E.S.T." href="../index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li>Il progetto</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/about/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="il-progetto">
<h1>Il progetto<a class="headerlink" href="#il-progetto" title="Link a questa intestazione"></a></h1>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../installation/index.html" class="btn btn-neutral float-right" title="Installazione" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../index.html" class="btn btn-neutral float-left" title="N.E.S.T." accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

969
docs/build/html/backend/index.html vendored Normal file
View file

@ -0,0 +1,969 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>nest_backend - Web API in Python &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../genindex.html" />
<link rel="search" title="Cerca" href="../search.html" />
<link rel="next" title="nest_crawler - Crawler in Python" href="../crawler/index.html" />
<link rel="prev" title="Installazione" href="../installation/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#module-nest_backend.gestione"><code class="docutils literal notranslate"><span class="pre">.gestione</span></code> - Metodi di utility</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-nest_backend.database"><code class="docutils literal notranslate"><span class="pre">.database</span></code> - Database</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#module-nest_backend.database.base"><code class="docutils literal notranslate"><span class="pre">.base</span></code> - Estensione flask</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-nest_backend.database.tables"><code class="docutils literal notranslate"><span class="pre">.tables</span></code> - Tabelle</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#routes-percorsi-api"><code class="docutils literal notranslate"><span class="pre">.routes</span></code> - Percorsi API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/backend/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="module-nest_backend">
<span id="nest-backend-web-api-in-python"></span><h1><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python<a class="headerlink" href="#module-nest_backend" title="Link a questa intestazione"></a></h1>
<div class="section" id="module-nest_backend.gestione">
<span id="gestione-metodi-di-utility"></span><h2><code class="docutils literal notranslate"><span class="pre">.gestione</span></code> - Metodi di utility<a class="headerlink" href="#module-nest_backend.gestione" title="Link a questa intestazione"></a></h2>
<p>Gestione adds many fancy thingamajigs to the flask application, such as a login system and such.</p>
<dl class="py function">
<dt id="nest_backend.gestione.authenticate">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">authenticate</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">password</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.authenticate" title="Link a questa definizione"></a></dt>
<dd><p>Authentication method. It checks if the combination of username+password is a valid match. If not, it returns None.
:param username: the users email
:param password: the users password
:return: if the credentials are correct, it returns the user. Else, it returns None.</p>
</dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.identity">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">identity</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">payload</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.identity" title="Link a questa definizione"></a></dt>
<dd><p>Authentication verification method. It checks if the user is in fact registered on the server.
It is required by Flask-JWT, and shouldnt be used alone.
:param payload: the reqest payload.
:return: an User or None. It depends whether the user is actually registered on the platform.</p>
</dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.gen_password">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">gen_password</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">password</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.gen_password" title="Link a questa definizione"></a></dt>
<dd><p>It generates an hashed password.
:param password: the password that needs to be hashed.
:return: the passwords hash.</p>
</dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.find_user">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">find_user</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">email</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.find_user" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.admin_or_403">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">admin_or_403</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.admin_or_403" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.repository_auth">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">repository_auth</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.repository_auth" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.json_request_authorizer">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">json_request_authorizer</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">json</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">serializable</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.json_request_authorizer" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.json_error">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">json_error</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">msg</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.json_error" title="Link a questa definizione"></a></dt>
<dd><p>Returns an error in json format
:param msg: the error message.
:return: a json formatted string.</p>
</dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.json_success">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">json_success</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.json_success" title="Link a questa definizione"></a></dt>
<dd><p>An happy little function. Its happy because the operation was successful.
:param data: the thing you want to be returned
:return: a json formatted string</p>
</dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.error_handler">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">error_handler</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">e</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.error_handler" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="nest_backend.gestione.hashtag_validator">
<code class="sig-prename descclassname"><span class="pre">nest_backend.gestione.</span></code><code class="sig-name descname"><span class="pre">hashtag_validator</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">hashtag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.gestione.hashtag_validator" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-nest_backend.database">
<span id="database-database"></span><h2><code class="docutils literal notranslate"><span class="pre">.database</span></code> - Database<a class="headerlink" href="#module-nest_backend.database" title="Link a questa intestazione"></a></h2>
<p>This module imports all the tables and the declarative base</p>
<div class="section" id="module-nest_backend.database.base">
<span id="base-estensione-flask"></span><h3><code class="docutils literal notranslate"><span class="pre">.base</span></code> - Estensione flask<a class="headerlink" href="#module-nest_backend.database.base" title="Link a questa intestazione"></a></h3>
</div>
<div class="section" id="module-nest_backend.database.tables">
<span id="tables-tabelle"></span><h3><code class="docutils literal notranslate"><span class="pre">.tables</span></code> - Tabelle<a class="headerlink" href="#module-nest_backend.database.tables" title="Link a questa intestazione"></a></h3>
<p>This module contains all database classes.</p>
<dl class="py class">
<dt id="nest_backend.database.tables.Alert">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Alert</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Alert" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.id">
<code class="sig-name descname"><span class="pre">id</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.name">
<code class="sig-name descname"><span class="pre">name</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.name" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.limit">
<code class="sig-name descname"><span class="pre">limit</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.limit" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.window_size">
<code class="sig-name descname"><span class="pre">window_size</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.window_size" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.repository_id">
<code class="sig-name descname"><span class="pre">repository_id</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.repository_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.repository">
<code class="sig-name descname"><span class="pre">repository</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.repository" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.notifications">
<code class="sig-name descname"><span class="pre">notifications</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.notifications" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Alert.operations">
<code class="sig-name descname"><span class="pre">operations</span></code><a class="headerlink" href="#nest_backend.database.tables.Alert.operations" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Alert.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Alert.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Alert.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Alert.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Authorization">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Authorization</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Authorization" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Authorization.rid">
<code class="sig-name descname"><span class="pre">rid</span></code><a class="headerlink" href="#nest_backend.database.tables.Authorization.rid" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Authorization.email">
<code class="sig-name descname"><span class="pre">email</span></code><a class="headerlink" href="#nest_backend.database.tables.Authorization.email" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Authorization.repository">
<code class="sig-name descname"><span class="pre">repository</span></code><a class="headerlink" href="#nest_backend.database.tables.Authorization.repository" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Authorization.user">
<code class="sig-name descname"><span class="pre">user</span></code><a class="headerlink" href="#nest_backend.database.tables.Authorization.user" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Authorization.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Authorization.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.BoolOperation">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">BoolOperation</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.BoolOperation" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.id">
<code class="sig-name descname"><span class="pre">id</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.operation">
<code class="sig-name descname"><span class="pre">operation</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.operation" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.is_root">
<code class="sig-name descname"><span class="pre">is_root</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.is_root" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.condition_id">
<code class="sig-name descname"><span class="pre">condition_id</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.condition_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.node_1_id">
<code class="sig-name descname"><span class="pre">node_1_id</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.node_1_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.node_2_id">
<code class="sig-name descname"><span class="pre">node_2_id</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.node_2_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.alert_id">
<code class="sig-name descname"><span class="pre">alert_id</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.alert_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.condition">
<code class="sig-name descname"><span class="pre">condition</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.condition" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.node_1">
<code class="sig-name descname"><span class="pre">node_1</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.node_1" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.node_2">
<code class="sig-name descname"><span class="pre">node_2</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.node_2" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.alert">
<code class="sig-name descname"><span class="pre">alert</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.alert" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.BoolOperation.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.BoolOperation.get_chain_ids">
<code class="sig-name descname"><span class="pre">get_chain_ids</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">lista</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.get_chain_ids" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.BoolOperation.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.father_1">
<code class="sig-name descname"><span class="pre">father_1</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.father_1" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.BoolOperation.father_2">
<code class="sig-name descname"><span class="pre">father_2</span></code><a class="headerlink" href="#nest_backend.database.tables.BoolOperation.father_2" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Composed">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Composed</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Composed" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Composed.rid">
<code class="sig-name descname"><span class="pre">rid</span></code><a class="headerlink" href="#nest_backend.database.tables.Composed.rid" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Composed.snowflake">
<code class="sig-name descname"><span class="pre">snowflake</span></code><a class="headerlink" href="#nest_backend.database.tables.Composed.snowflake" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Composed.repository">
<code class="sig-name descname"><span class="pre">repository</span></code><a class="headerlink" href="#nest_backend.database.tables.Composed.repository" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Composed.tweet">
<code class="sig-name descname"><span class="pre">tweet</span></code><a class="headerlink" href="#nest_backend.database.tables.Composed.tweet" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Composed.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Composed.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Condition">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Condition</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Condition" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.id">
<code class="sig-name descname"><span class="pre">id</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.type">
<code class="sig-name descname"><span class="pre">type</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.type" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.content">
<code class="sig-name descname"><span class="pre">content</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.content" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.repository_id">
<code class="sig-name descname"><span class="pre">repository_id</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.repository_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.repository">
<code class="sig-name descname"><span class="pre">repository</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.repository" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.tweets">
<code class="sig-name descname"><span class="pre">tweets</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.tweets" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Condition.operations">
<code class="sig-name descname"><span class="pre">operations</span></code><a class="headerlink" href="#nest_backend.database.tables.Condition.operations" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Condition.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Condition.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Condition.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Condition.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Contains">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Contains</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Contains" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Contains.cid">
<code class="sig-name descname"><span class="pre">cid</span></code><a class="headerlink" href="#nest_backend.database.tables.Contains.cid" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Contains.snowflake">
<code class="sig-name descname"><span class="pre">snowflake</span></code><a class="headerlink" href="#nest_backend.database.tables.Contains.snowflake" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Contains.condition">
<code class="sig-name descname"><span class="pre">condition</span></code><a class="headerlink" href="#nest_backend.database.tables.Contains.condition" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Contains.tweet">
<code class="sig-name descname"><span class="pre">tweet</span></code><a class="headerlink" href="#nest_backend.database.tables.Contains.tweet" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Contains.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Contains.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Notification">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Notification</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Notification" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Notification.id">
<code class="sig-name descname"><span class="pre">id</span></code><a class="headerlink" href="#nest_backend.database.tables.Notification.id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Notification.ora">
<code class="sig-name descname"><span class="pre">ora</span></code><a class="headerlink" href="#nest_backend.database.tables.Notification.ora" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Notification.alert_id">
<code class="sig-name descname"><span class="pre">alert_id</span></code><a class="headerlink" href="#nest_backend.database.tables.Notification.alert_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Notification.alert">
<code class="sig-name descname"><span class="pre">alert</span></code><a class="headerlink" href="#nest_backend.database.tables.Notification.alert" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Notification.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Notification.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Notification.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Notification.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Repository">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Repository</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Repository" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.id">
<code class="sig-name descname"><span class="pre">id</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.name">
<code class="sig-name descname"><span class="pre">name</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.name" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.start">
<code class="sig-name descname"><span class="pre">start</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.start" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.end">
<code class="sig-name descname"><span class="pre">end</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.end" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.is_active">
<code class="sig-name descname"><span class="pre">is_active</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.is_active" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.evaluation_mode">
<code class="sig-name descname"><span class="pre">evaluation_mode</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.evaluation_mode" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.owner_id">
<code class="sig-name descname"><span class="pre">owner_id</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.owner_id" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.owner">
<code class="sig-name descname"><span class="pre">owner</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.owner" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.authorizations">
<code class="sig-name descname"><span class="pre">authorizations</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.authorizations" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.tweets">
<code class="sig-name descname"><span class="pre">tweets</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.tweets" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.alerts">
<code class="sig-name descname"><span class="pre">alerts</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.alerts" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Repository.conditions">
<code class="sig-name descname"><span class="pre">conditions</span></code><a class="headerlink" href="#nest_backend.database.tables.Repository.conditions" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Repository.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Repository.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Repository.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Repository.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.Tweet">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">Tweet</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Tweet" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.snowflake">
<code class="sig-name descname"><span class="pre">snowflake</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.snowflake" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.content">
<code class="sig-name descname"><span class="pre">content</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.content" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.location">
<code class="sig-name descname"><span class="pre">location</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.location" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.place">
<code class="sig-name descname"><span class="pre">place</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.place" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.poster">
<code class="sig-name descname"><span class="pre">poster</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.poster" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.insert_time">
<code class="sig-name descname"><span class="pre">insert_time</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.insert_time" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.repositories">
<code class="sig-name descname"><span class="pre">repositories</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.repositories" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.Tweet.conditions">
<code class="sig-name descname"><span class="pre">conditions</span></code><a class="headerlink" href="#nest_backend.database.tables.Tweet.conditions" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Tweet.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Tweet.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.Tweet.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.Tweet.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.User">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">User</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.User" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <code class="xref py py-class docutils literal notranslate"><span class="pre">sqlalchemy.orm.decl_api.Model</span></code></p>
</div></blockquote>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.email">
<code class="sig-name descname"><span class="pre">email</span></code><a class="headerlink" href="#nest_backend.database.tables.User.email" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.username">
<code class="sig-name descname"><span class="pre">username</span></code><a class="headerlink" href="#nest_backend.database.tables.User.username" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.password">
<code class="sig-name descname"><span class="pre">password</span></code><a class="headerlink" href="#nest_backend.database.tables.User.password" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.isAdmin">
<code class="sig-name descname"><span class="pre">isAdmin</span></code><a class="headerlink" href="#nest_backend.database.tables.User.isAdmin" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.owner_of">
<code class="sig-name descname"><span class="pre">owner_of</span></code><a class="headerlink" href="#nest_backend.database.tables.User.owner_of" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.User.authorizations">
<code class="sig-name descname"><span class="pre">authorizations</span></code><a class="headerlink" href="#nest_backend.database.tables.User.authorizations" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.User.to_json">
<code class="sig-name descname"><span class="pre">to_json</span></code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.User.to_json" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="nest_backend.database.tables.User.__init__">
<code class="sig-name descname"><span class="pre">__init__</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.User.__init__" title="Link a questa definizione"></a></dt>
<dd><p>A simple constructor that allows initialization from kwargs.</p>
<p>Sets attributes on the constructed instance using the names and
values in <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
<p>Only keys that are present as
attributes of the instances class are allowed. These could be,
for example, any mapped columns or relationships.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.ConditionType">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">ConditionType</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.ConditionType" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <a class="reference external" href="https://docs.python.org/3.8/library/enum.html#enum.Enum" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></a></p>
</div></blockquote>
<p>Vedi <a class="reference external" href="https://gitlab.steffo.eu/nest/g2-progetto/-/wikis/Specifica-delle-Conditions">Specifica delle Conditions su
GitLab</a> .</p>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.hashtag">
<code class="sig-name descname"><span class="pre">hashtag</span></code><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.hashtag" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.location">
<code class="sig-name descname"><span class="pre">location</span></code><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.location" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.time">
<code class="sig-name descname"><span class="pre">time</span></code><em class="property"> <span class="pre">=</span> <span class="pre">2</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.time" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.coordinates">
<code class="sig-name descname"><span class="pre">coordinates</span></code><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.coordinates" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.place">
<code class="sig-name descname"><span class="pre">place</span></code><em class="property"> <span class="pre">=</span> <span class="pre">4</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.place" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionType.user">
<code class="sig-name descname"><span class="pre">user</span></code><em class="property"> <span class="pre">=</span> <span class="pre">5</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionType.user" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.OperationType">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">OperationType</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.OperationType" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <a class="reference external" href="https://docs.python.org/3.8/library/enum.html#enum.Enum" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></a></p>
</div></blockquote>
<p>An enumeration.</p>
<dl class="py attribute">
<dt id="nest_backend.database.tables.OperationType.assign">
<code class="sig-name descname"><span class="pre">assign</span></code><em class="property"> <span class="pre">=</span> <span class="pre">3</span></em><a class="headerlink" href="#nest_backend.database.tables.OperationType.assign" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="nest_backend.database.tables.ConditionMode">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">nest_backend.database.tables.</span></code><code class="sig-name descname"><span class="pre">ConditionMode</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nest_backend.database.tables.ConditionMode" title="Link a questa definizione"></a></dt>
<dd><blockquote>
<div><p>Basi: <a class="reference external" href="https://docs.python.org/3.8/library/enum.html#enum.Enum" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></a></p>
</div></blockquote>
<p>An enumeration.</p>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionMode.all_or">
<code class="sig-name descname"><span class="pre">all_or</span></code><em class="property"> <span class="pre">=</span> <span class="pre">0</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionMode.all_or" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="nest_backend.database.tables.ConditionMode.all_and">
<code class="sig-name descname"><span class="pre">all_and</span></code><em class="property"> <span class="pre">=</span> <span class="pre">1</span></em><a class="headerlink" href="#nest_backend.database.tables.ConditionMode.all_and" title="Link a questa definizione"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
</div>
<div class="section" id="routes-percorsi-api">
<h2><code class="docutils literal notranslate"><span class="pre">.routes</span></code> - Percorsi API<a class="headerlink" href="#routes-percorsi-api" title="Link a questa intestazione"></a></h2>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../crawler/index.html" class="btn btn-neutral float-right" title="nest_crawler - Crawler in Python" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../installation/index.html" class="btn btn-neutral float-left" title="Installazione" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

217
docs/build/html/crawler/index.html vendored Normal file
View file

@ -0,0 +1,217 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>nest_crawler - Crawler in Python &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../genindex.html" />
<link rel="search" title="Cerca" href="../search.html" />
<link rel="next" title="nest_frontend - Interfaccia utente in React" href="../frontend/index.html" />
<link rel="prev" title="nest_backend - Web API in Python" href="../backend/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/crawler/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="nest-crawler-crawler-in-python">
<h1><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python<a class="headerlink" href="#nest-crawler-crawler-in-python" title="Link a questa intestazione"></a></h1>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../frontend/index.html" class="btn btn-neutral float-right" title="nest_frontend - Interfaccia utente in React" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../backend/index.html" class="btn btn-neutral float-left" title="nest_backend - Web API in Python" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

215
docs/build/html/frontend/index.html vendored Normal file
View file

@ -0,0 +1,215 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>nest_frontend - Interfaccia utente in React &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../genindex.html" />
<link rel="search" title="Cerca" href="../search.html" />
<link rel="prev" title="nest_crawler - Crawler in Python" href="../crawler/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/frontend/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="nest-frontend-interfaccia-utente-in-react">
<h1><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React<a class="headerlink" href="#nest-frontend-interfaccia-utente-in-react" title="Link a questa intestazione"></a></h1>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../crawler/index.html" class="btn btn-neutral float-left" title="nest_crawler - Crawler in Python" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

718
docs/build/html/genindex.html vendored Normal file
View file

@ -0,0 +1,718 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Indice &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/translations.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="index" title="Indice" href="#" />
<link rel="search" title="Cerca" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Indice</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Indice</h1>
<div class="genindex-jumpbox">
<a href="#_"><strong>_</strong></a>
| <a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#H"><strong>H</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#J"><strong>J</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#O"><strong>O</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#W"><strong>W</strong></a>
</div>
<h2 id="_">_</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.__init__">__init__() (nest_backend.database.tables.Alert metodo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization.__init__">(nest_backend.database.tables.Authorization metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.__init__">(nest_backend.database.tables.BoolOperation metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Composed.__init__">(nest_backend.database.tables.Composed metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.__init__">(nest_backend.database.tables.Condition metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Contains.__init__">(nest_backend.database.tables.Contains metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.__init__">(nest_backend.database.tables.Notification metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.__init__">(nest_backend.database.tables.Repository metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.__init__">(nest_backend.database.tables.Tweet metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.User.__init__">(nest_backend.database.tables.User metodo)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.admin_or_403">admin_or_403() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert">Alert (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.alert">alert (nest_backend.database.tables.BoolOperation attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.alert">(nest_backend.database.tables.Notification attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.alert_id">alert_id (nest_backend.database.tables.BoolOperation attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.alert_id">(nest_backend.database.tables.Notification attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.alerts">alerts (nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionMode.all_and">all_and (nest_backend.database.tables.ConditionMode attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionMode.all_or">all_or (nest_backend.database.tables.ConditionMode attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.OperationType.assign">assign (nest_backend.database.tables.OperationType attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.gestione.authenticate">authenticate() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization">Authorization (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.authorizations">authorizations (nest_backend.database.tables.Repository attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.User.authorizations">(nest_backend.database.tables.User attributo)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation">BoolOperation (classe in nest_backend.database.tables)</a>
</li>
</ul></td>
</tr></table>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Contains.cid">cid (nest_backend.database.tables.Contains attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Composed">Composed (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition">Condition (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.condition">condition (nest_backend.database.tables.BoolOperation attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Contains.condition">(nest_backend.database.tables.Contains attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.condition_id">condition_id (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionMode">ConditionMode (classe in nest_backend.database.tables)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.conditions">conditions (nest_backend.database.tables.Repository attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.conditions">(nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType">ConditionType (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Contains">Contains (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.content">content (nest_backend.database.tables.Condition attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.content">(nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.coordinates">coordinates (nest_backend.database.tables.ConditionType attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization.email">email (nest_backend.database.tables.Authorization attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.User.email">(nest_backend.database.tables.User attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.end">end (nest_backend.database.tables.Repository attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.gestione.error_handler">error_handler() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.evaluation_mode">evaluation_mode (nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.father_1">father_1 (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.father_2">father_2 (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.gestione.find_user">find_user() (nel modulo nest_backend.gestione)</a>
</li>
</ul></td>
</tr></table>
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.gen_password">gen_password() (nel modulo nest_backend.gestione)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.get_chain_ids">get_chain_ids() (nest_backend.database.tables.BoolOperation metodo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="H">H</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.hashtag">hashtag (nest_backend.database.tables.ConditionType attributo)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.hashtag_validator">hashtag_validator() (nel modulo nest_backend.gestione)</a>
</li>
</ul></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.id">id (nest_backend.database.tables.Alert attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.id">(nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.id">(nest_backend.database.tables.Condition attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.id">(nest_backend.database.tables.Notification attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.id">(nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.identity">identity() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.insert_time">insert_time (nest_backend.database.tables.Tweet attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.is_active">is_active (nest_backend.database.tables.Repository attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.is_root">is_root (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.User.isAdmin">isAdmin (nest_backend.database.tables.User attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="J">J</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.json_error">json_error() (nel modulo nest_backend.gestione)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.json_request_authorizer">json_request_authorizer() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.gestione.json_success">json_success() (nel modulo nest_backend.gestione)</a>
</li>
</ul></td>
</tr></table>
<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.limit">limit (nest_backend.database.tables.Alert attributo)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.location">location (nest_backend.database.tables.ConditionType attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.location">(nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
modulo
<ul>
<li><a href="backend/index.html#module-nest_backend">nest_backend</a>
</li>
<li><a href="backend/index.html#module-nest_backend.database">nest_backend.database</a>
</li>
<li><a href="backend/index.html#module-nest_backend.database.base">nest_backend.database.base</a>
</li>
<li><a href="backend/index.html#module-nest_backend.database.tables">nest_backend.database.tables</a>
</li>
<li><a href="backend/index.html#module-nest_backend.gestione">nest_backend.gestione</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.name">name (nest_backend.database.tables.Alert attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.name">(nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></li>
<li>
nest_backend
<ul>
<li><a href="backend/index.html#module-nest_backend">modulo</a>
</li>
</ul></li>
<li>
nest_backend.database
<ul>
<li><a href="backend/index.html#module-nest_backend.database">modulo</a>
</li>
</ul></li>
<li>
nest_backend.database.base
<ul>
<li><a href="backend/index.html#module-nest_backend.database.base">modulo</a>
</li>
</ul></li>
<li>
nest_backend.database.tables
<ul>
<li><a href="backend/index.html#module-nest_backend.database.tables">modulo</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
nest_backend.gestione
<ul>
<li><a href="backend/index.html#module-nest_backend.gestione">modulo</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.node_1">node_1 (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.node_1_id">node_1_id (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.node_2">node_2 (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.node_2_id">node_2_id (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Notification">Notification (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.notifications">notifications (nest_backend.database.tables.Alert attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="O">O</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.operation">operation (nest_backend.database.tables.BoolOperation attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.operations">operations (nest_backend.database.tables.Alert attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.operations">(nest_backend.database.tables.Condition attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.OperationType">OperationType (classe in nest_backend.database.tables)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.ora">ora (nest_backend.database.tables.Notification attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.owner">owner (nest_backend.database.tables.Repository attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.owner_id">owner_id (nest_backend.database.tables.Repository attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.User.owner_of">owner_of (nest_backend.database.tables.User attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.User.password">password (nest_backend.database.tables.User attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.place">place (nest_backend.database.tables.ConditionType attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.place">(nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.poster">poster (nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.repositories">repositories (nest_backend.database.tables.Tweet attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository">Repository (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.repository">repository (nest_backend.database.tables.Alert attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization.repository">(nest_backend.database.tables.Authorization attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Composed.repository">(nest_backend.database.tables.Composed attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.repository">(nest_backend.database.tables.Condition attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.gestione.repository_auth">repository_auth() (nel modulo nest_backend.gestione)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.repository_id">repository_id (nest_backend.database.tables.Alert attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.repository_id">(nest_backend.database.tables.Condition attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization.rid">rid (nest_backend.database.tables.Authorization attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Composed.rid">(nest_backend.database.tables.Composed attributo)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Composed.snowflake">snowflake (nest_backend.database.tables.Composed attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Contains.snowflake">(nest_backend.database.tables.Contains attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.snowflake">(nest_backend.database.tables.Tweet attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.start">start (nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.time">time (nest_backend.database.tables.ConditionType attributo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.to_json">to_json() (nest_backend.database.tables.Alert metodo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.BoolOperation.to_json">(nest_backend.database.tables.BoolOperation metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.to_json">(nest_backend.database.tables.Condition metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Notification.to_json">(nest_backend.database.tables.Notification metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.to_json">(nest_backend.database.tables.Repository metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet.to_json">(nest_backend.database.tables.Tweet metodo)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.User.to_json">(nest_backend.database.tables.User metodo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Tweet">Tweet (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Composed.tweet">tweet (nest_backend.database.tables.Composed attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Contains.tweet">(nest_backend.database.tables.Contains attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.tweets">tweets (nest_backend.database.tables.Condition attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.Repository.tweets">(nest_backend.database.tables.Repository attributo)</a>
</li>
</ul></li>
<li><a href="backend/index.html#nest_backend.database.tables.Condition.type">type (nest_backend.database.tables.Condition attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="U">U</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.User">User (classe in nest_backend.database.tables)</a>
</li>
<li><a href="backend/index.html#nest_backend.database.tables.Authorization.user">user (nest_backend.database.tables.Authorization attributo)</a>
<ul>
<li><a href="backend/index.html#nest_backend.database.tables.ConditionType.user">(nest_backend.database.tables.ConditionType attributo)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.User.username">username (nest_backend.database.tables.User attributo)</a>
</li>
</ul></td>
</tr></table>
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="backend/index.html#nest_backend.database.tables.Alert.window_size">window_size (nest_backend.database.tables.Alert attributo)</a>
</li>
</ul></td>
</tr></table>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

262
docs/build/html/index.html vendored Normal file
View file

@ -0,0 +1,262 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>N.E.S.T. &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/translations.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="index" title="Indice" href="genindex.html" />
<link rel="search" title="Cerca" href="search.html" />
<link rel="next" title="Il progetto" href="about/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>N.E.S.T.</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="n-e-s-t">
<h1>N.E.S.T.<a class="headerlink" href="#n-e-s-t" title="Link a questa intestazione"></a></h1>
<p>Benvenuto alla documentazione di N.E.S.T.!</p>
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installazione</a><ul>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#prerequisiti">Prerequisiti</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-un-nuovo-utente">Creare un nuovo utente</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#scaricare-il-codice-sorgente">Scaricare il codice sorgente</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-il-database">Creare il database</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-un-file-di-configurazione-per-il-backend">Creare un file di configurazione per il backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#installare-le-dipendenze-python">Installare le dipendenze Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#installare-le-dipendenze-nodejs">Installare le dipendenze NodeJS</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-un-servizio-systemd-per-il-backend">Creare un servizio SystemD per il backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#compilare-il-frontend">Compilare il frontend</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-un-servizio-systemd-per-il-frontend">Creare un servizio SystemD per il frontend</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#creare-un-servizio-systemd-per-il-crawler">Creare un servizio SystemD per il crawler</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation/index.html#configurare-apache-come-reverse-proxy">Configurare Apache come reverse proxy</a></li>
</ul>
</li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a><ul>
<li class="toctree-l2"><a class="reference internal" href="backend/index.html#module-nest_backend.gestione"><code class="docutils literal notranslate"><span class="pre">.gestione</span></code> - Metodi di utility</a></li>
<li class="toctree-l2"><a class="reference internal" href="backend/index.html#module-nest_backend.database"><code class="docutils literal notranslate"><span class="pre">.database</span></code> - Database</a><ul>
<li class="toctree-l3"><a class="reference internal" href="backend/index.html#module-nest_backend.database.base"><code class="docutils literal notranslate"><span class="pre">.base</span></code> - Estensione flask</a></li>
<li class="toctree-l3"><a class="reference internal" href="backend/index.html#module-nest_backend.database.tables"><code class="docutils literal notranslate"><span class="pre">.tables</span></code> - Tabelle</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="backend/index.html#routes-percorsi-api"><code class="docutils literal notranslate"><span class="pre">.routes</span></code> - Percorsi API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
<div class="section" id="collegamenti-utili">
<h1>Collegamenti utili<a class="headerlink" href="#collegamenti-utili" title="Link a questa intestazione"></a></h1>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Indice</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Indice dei moduli</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Cerca</span></a></p></li>
</ul>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="about/index.html" class="btn btn-neutral float-right" title="Il progetto" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

497
docs/build/html/installation/index.html vendored Normal file
View file

@ -0,0 +1,497 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Installazione &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="Indice" href="../genindex.html" />
<link rel="search" title="Cerca" href="../search.html" />
<link rel="next" title="nest_backend - Web API in Python" href="../backend/index.html" />
<link rel="prev" title="Il progetto" href="../about/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">Il progetto</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installazione</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#prerequisiti">Prerequisiti</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-un-nuovo-utente">Creare un nuovo utente</a></li>
<li class="toctree-l2"><a class="reference internal" href="#scaricare-il-codice-sorgente">Scaricare il codice sorgente</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-il-database">Creare il database</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-un-file-di-configurazione-per-il-backend">Creare un file di configurazione per il backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="#installare-le-dipendenze-python">Installare le dipendenze Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="#installare-le-dipendenze-nodejs">Installare le dipendenze NodeJS</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-un-servizio-systemd-per-il-backend">Creare un servizio SystemD per il backend</a></li>
<li class="toctree-l2"><a class="reference internal" href="#compilare-il-frontend">Compilare il frontend</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-un-servizio-systemd-per-il-frontend">Creare un servizio SystemD per il frontend</a></li>
<li class="toctree-l2"><a class="reference internal" href="#creare-un-servizio-systemd-per-il-crawler">Creare un servizio SystemD per il crawler</a></li>
<li class="toctree-l2"><a class="reference internal" href="#configurare-apache-come-reverse-proxy">Configurare Apache come reverse proxy</a></li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li>Installazione</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/installation/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="installazione">
<h1>Installazione<a class="headerlink" href="#installazione" title="Link a questa intestazione"></a></h1>
<p>Questa guida illustra come installare interamente N.E.S.T. su un server Linux.</p>
<div class="section" id="prerequisiti">
<h2>Prerequisiti<a class="headerlink" href="#prerequisiti" title="Link a questa intestazione"></a></h2>
<p>Per installare ed eseguire N.E.S.T., è necessario:</p>
<ul class="simple">
<li><p>Una connessione a Internet</p></li>
<li><p>Un sistema operativo Linux-based (preferibilmente <a class="reference external" href="https://wiki.archlinux.org/title/Main_page">Arch Linux</a>)</p></li>
<li><p><a class="reference external" href="https://www.freedesktop.org/wiki/Software/systemd/">SystemD ^248.2</a></p></li>
<li><p><a class="reference external" href="https://httpd.apache.org/">Apache HTTP Server ^2.4.46</a></p></li>
<li><p><a class="reference external" href="https://www.postgresql.org/download/">PostgreSQL ^13.2</a></p></li>
<li><p><a class="reference external" href="https://git-scm.com/">Git ^2.31.1</a></p></li>
<li><p><a class="reference external" href="https://www.python.org/downloads/">Python ^3.8</a></p></li>
<li><p><a class="reference external" href="https://python-poetry.org/">Poetry ^1.0</a></p></li>
<li><p><a class="reference external" href="https://nodejs.org/">NodeJS ^16.0</a></p></li>
<li><p><a class="reference external" href="https://www.npmjs.com/">npm ^7.13.0</a></p></li>
</ul>
</div>
<div class="section" id="creare-un-nuovo-utente">
<h2>Creare un nuovo utente<a class="headerlink" href="#creare-un-nuovo-utente" title="Link a questa intestazione"></a></h2>
<p>Per motivi di sicurezza, si suggerisce di creare un nuovo utente con il quale eseguire il progetto:</p>
<div class="admonition note">
<p class="admonition-title">Nota</p>
<p>È necessario essere amministratori di sistema per eseguire i seguenti comandi.
Si veda il manuale di <a class="reference external" href="https://linux.die.net/man/8/useradd">useradd</a> per più dettagli.</p>
</div>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>mkdir --parents /srv/nest
<span class="gp">root:~# </span>useradd --home-dir /srv/nest --shell /bin/bash nest
<span class="gp">root:~# </span>chown --recursive nest: /srv/nest
</pre></div>
</div>
</div>
<div class="section" id="scaricare-il-codice-sorgente">
<h2>Scaricare il codice sorgente<a class="headerlink" href="#scaricare-il-codice-sorgente" title="Link a questa intestazione"></a></h2>
<p>Per installare N.E.S.T., è necessario avere il codice sorgente disponibile sul server.</p>
<p>Si consiglia di scaricarlo tramite <em>Git</em>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~$ </span>git clone https://gitlab.steffo.eu/nest/g2-progetto.git
</pre></div>
</div>
<p>Questo creerà una nuova cartella <code class="docutils literal notranslate"><span class="pre">g2-progetto</span></code> nella directory in cui è stato eseguito il comando.</p>
<p>Per proseguire, sarà necessario entrarvi:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~$ </span><span class="nb">cd</span> g2-progetto
</pre></div>
</div>
</div>
<div class="section" id="creare-il-database">
<h2>Creare il database<a class="headerlink" href="#creare-il-database" title="Link a questa intestazione"></a></h2>
<p>N.E.S.T. necessita di un database PostgreSQL in cui salvare i dati.</p>
<p>Per motivi di sicurezza, si suggerisce di creare un ruolo isolato dal resto del DBMS apposta per N.E.S.T.:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">postgres:~$ </span>createuser nest
</pre></div>
</div>
<p>Per creare il database PostgreSQL, si esegua:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">postgres:~$ </span>createdb --owner<span class="o">=</span>nest nest
</pre></div>
</div>
</div>
<div class="section" id="creare-un-file-di-configurazione-per-il-backend">
<h2>Creare un file di configurazione per il backend<a class="headerlink" href="#creare-un-file-di-configurazione-per-il-backend" title="Link a questa intestazione"></a></h2>
<p>Il backend usa un file di configurazione per impostare certe variabili.</p>
<p>Si crei un nuovo file nella working directory del progetto denominato <code class="docutils literal notranslate"><span class="pre">config.py</span></code>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~/g2-progetto$ </span>vim config.py
</pre></div>
</div>
<p>Il file dovrà avere i seguenti contenuti:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Una stringa rappresentante il database da utilizzare</span>
<span class="c1"># Per maggiori informazioni sulla sintassi, si veda https://docs.sqlalchemy.org/en/14/core/engines.html</span>
<span class="n">SQLALCHEMY_DATABASE_URI</span> <span class="o">=</span> <span class="s2">&quot;postgresql://nest@/nest&quot;</span>
<span class="c1"># Una stringa casuale utilizzata per generare i JSON Web Token (JWT)</span>
<span class="c1"># Va mantenuta segreta e costante per tutta l&#39;operazione del backend!</span>
<span class="c1"># Si suggerisce di premere tasti casuali sulla tastiera finchè la riga non è piena.</span>
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="s2">&quot;dsjiofgvinmodfiojvbnio3erfnoiweraqugu43ghjwrevniuwerng43iugnreuwignhritmj43i43nb8i42ug0wevkwovmwigtjj&quot;</span>
</pre></div>
</div>
</div>
<div class="section" id="installare-le-dipendenze-python">
<h2>Installare le dipendenze Python<a class="headerlink" href="#installare-le-dipendenze-python" title="Link a questa intestazione"></a></h2>
<p>Le dipendenze Python sono gestite da <em>Poetry</em>, e possono essere installate con:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~/g2-progetto$ </span>poetry install
</pre></div>
</div>
<p>Poetry creerà automaticamente un <a class="reference external" href="https://docs.python.org/3/library/venv.html">venv</a> e vi installerà allinterno tutti
i pacchetti necessari allesecuzione del backend e del crawler di N.E.S.T. .</p>
<p><strong>Segnatevi il nome</strong> del venv creato da Poetry, in quanto sarà necessario per
<span class="xref std std-ref">Creare un servizio SystemD per il backend</span>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">Creating virtualenv nest-7C2fm2VD-py3.9 in /srv/nest/.cache/pypoetry/virtualenvs</span>
</pre></div>
</div>
</div>
<div class="section" id="installare-le-dipendenze-nodejs">
<h2>Installare le dipendenze NodeJS<a class="headerlink" href="#installare-le-dipendenze-nodejs" title="Link a questa intestazione"></a></h2>
<p>Le dipendenze NodeJS sono gestite da <em>npm</em>, e possono essere installate con:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~/g2-progetto$ </span>npm install
</pre></div>
</div>
<p>npm creerà automaticamente una cartella
<a class="reference external" href="https://docs.npmjs.com/cli/v7/configuring-npm/folders#node-modules">node_modules</a> e vi installerà allinterno tutte
le librerie necessarie allesecuzione del frontend di N.E.S.T. .</p>
</div>
<div class="section" id="creare-un-servizio-systemd-per-il-backend">
<h2>Creare un servizio SystemD per il backend<a class="headerlink" href="#creare-un-servizio-systemd-per-il-backend" title="Link a questa intestazione"></a></h2>
<p>Per fare in modo che il backend rimanga attivo in background, anche dopo un riavvio, si suggerisce di installarlo come
servizio di sistema di <em>SystemD</em>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl edit --force --full nest-backend
</pre></div>
</div>
<p>Inserire allinterno del file le seguenti direttive:</p>
<div class="highlight-systemd notranslate"><div class="highlight"><pre><span></span>[Unit]
Description=N.E.S.T. Backend
Wants=network-online.target postgresql.service
After=network-online.target nss-lookup.target postgresql.service
[Service]
Type=exec
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
# Si sostituisca a questo il percorso del virtualenv creato in precedenza da Poetry
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ExecStart=/srv/nest/.cache/pypoetry/virtualenvs/nest-7C2fm2VD-py3.9/bin/python -m gunicorn -b 127.0.0.1:30040 --env=&quot;FLASK_CONFIG=../config.py&quot; nest_backend.app:rp_app
[Install]
WantedBy=multi-user.target
</pre></div>
</div>
<p>Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl start nest-backend
</pre></div>
</div>
<p>In caso di successo, lAPI dovrebbe essere esposto sulla porta <code class="docutils literal notranslate"><span class="pre">30040</span></code> dellindirizzo di loopback <code class="docutils literal notranslate"><span class="pre">127.0.0.1</span></code>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>curl <span class="m">127</span>.0.0.1:30040/doa
<span class="go">If you see this, the server is fine.</span>
</pre></div>
</div>
<p>Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl <span class="nb">enable</span> nest-backend
</pre></div>
</div>
</div>
<div class="section" id="compilare-il-frontend">
<h2>Compilare il frontend<a class="headerlink" href="#compilare-il-frontend" title="Link a questa intestazione"></a></h2>
<p>Perchè sia possibile servire il frontend agli utenti, è necessario prima crearne una versione compilata ottimizzata.</p>
<p>È possibile farlo con il comando:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">nest:~/g2-progetto$ </span>npm run build
</pre></div>
</div>
<p>Verrà creata una cartella <code class="docutils literal notranslate"><span class="pre">build</span></code> con allinterno la versione compilata.</p>
</div>
<div class="section" id="creare-un-servizio-systemd-per-il-frontend">
<h2>Creare un servizio SystemD per il frontend<a class="headerlink" href="#creare-un-servizio-systemd-per-il-frontend" title="Link a questa intestazione"></a></h2>
<p>Per rendere disponibile alla rete la copia locale del frontend, si suggerisce di avviare lo script npm <code class="docutils literal notranslate"><span class="pre">serve</span></code>
integrato con N.E.S.T. come un servizio di sistema di <em>SystemD</em>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl edit --force --full nest-frontend
</pre></div>
</div>
<p>Inserire allinterno del file le seguenti direttive:</p>
<div class="highlight-systemd notranslate"><div class="highlight"><pre><span></span>[Unit]
Description=N.E.S.T. Frontend
Wants=network-online.target nest-backend.service
After=network-online.target nss-lookup.target nest-backend.service
[Service]
Type=exec
Environment=NODE_ENV=production
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
ExecStart=/usr/bin/npm run serve
[Install]
WantedBy=multi-user.target
</pre></div>
</div>
<div class="admonition-todo admonition" id="id1">
<p class="admonition-title">Da fare</p>
<p>Questo file non è stato testato, in quanto sul server demo è in uso una versione più complessa che usa
<a class="reference external" href="https://github.com/nvm-sh/nvm">nvm</a> per gestire più versioni di NodeJS sullo stesso sistema.</p>
<p>La versione in uso sul server demo è:</p>
<div class="highlight-systemd notranslate"><div class="highlight"><pre><span></span>[Unit]
Description=N.E.S.T. Frontend
Wants=network-online.target nest-backend.service
After=network-online.target nss-lookup.target nest-backend.service
[Service]
Type=exec
Environment=NODE_ENV=production
Environment=NODE_VERSION=16
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2-progetto
ExecStart=/srv/nest/.nvm/nvm-exec npm run serve
[Install]
WantedBy=multi-user.target
</pre></div>
</div>
</div>
<p>Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl start nest-frontend
</pre></div>
</div>
<p>In caso di successo, il frontend dovrebbe essere esposto sulla porta <code class="docutils literal notranslate"><span class="pre">30041</span></code> dellindirizzo di loopback <code class="docutils literal notranslate"><span class="pre">127.0.0.1</span></code>:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>curl <span class="m">127</span>.0.0.1:30041
<span class="go">[...]</span>
</pre></div>
</div>
<p>Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root:~# </span>systemctl <span class="nb">enable</span> nest-frontend
</pre></div>
</div>
</div>
<div class="section" id="creare-un-servizio-systemd-per-il-crawler">
<h2>Creare un servizio SystemD per il crawler<a class="headerlink" href="#creare-un-servizio-systemd-per-il-crawler" title="Link a questa intestazione"></a></h2>
<div class="admonition-todo admonition" id="id2">
<p class="admonition-title">Da fare</p>
<p>Il crawler non è ancora disponibile.</p>
</div>
</div>
<div class="section" id="configurare-apache-come-reverse-proxy">
<h2>Configurare Apache come reverse proxy<a class="headerlink" href="#configurare-apache-come-reverse-proxy" title="Link a questa intestazione"></a></h2>
<p>Per rendere lAPI e il frontend disponibili al pubblico, si suggerisce di configurare Apache HTTP Server
come reverse proxy.</p>
<p>La configurazione di Apache varia molto da distribuzione a distribuzione Linux, e talvolta anche da server a server;
pertanto, si fornisce solamente un file <a class="reference external" href="https://httpd.apache.org/docs/2.4/vhosts/examples.html">VirtualHost</a> di
esempio da adattare al proprio setup:</p>
<div class="highlight-apacheconf notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;VirtualHost</span> <span class="s">*:80</span><span class="nt">&gt;</span>
<span class="nb">ServerName</span> <span class="s2">&quot;api.nest.steffo.eu&quot;</span>
<span class="nb">ServerName</span> <span class="s2">&quot;prod.nest.steffo.eu&quot;</span>
<span class="nb">RewriteEngine</span> <span class="k">On</span>
<span class="nb">RewriteRule</span> ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
<span class="nt">&lt;/VirtualHost&gt;</span>
<span class="nt">&lt;VirtualHost</span> <span class="s">*:443</span><span class="nt">&gt;</span>
<span class="nb">ServerName</span> <span class="s2">&quot;api.nest.steffo.eu&quot;</span>
<span class="nb">SSLEngine</span> <span class="k">on</span>
<span class="nb">SSLCertificateFile</span> <span class="s2">&quot;/root/.acme.sh/*.nest.steffo.eu/fullchain.cer&quot;</span>
<span class="nb">SSLCertificateKeyFile</span> <span class="s2">&quot;/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key&quot;</span>
<span class="nb">ProxyPass</span> <span class="s2">&quot;/&quot;</span> <span class="s2">&quot;http://127.0.0.1:30040/&quot;</span>
<span class="nb">ProxyPassReverse</span> <span class="s2">&quot;/&quot;</span> <span class="s2">&quot;http://127.0.0.1:30040/&quot;</span>
<span class="nb">RequestHeader</span> set <span class="s2">&quot;X-Forwarded-Proto&quot;</span> expr=%{REQUEST_SCHEME}
<span class="nb">Protocols</span> h2 http/1.1
<span class="nb">Header</span> always set Strict-Transport-Security <span class="s2">&quot;max-age=63072000&quot;</span>
<span class="nt">&lt;/VirtualHost&gt;</span>
<span class="nt">&lt;VirtualHost</span> <span class="s">*:443</span><span class="nt">&gt;</span>
<span class="nb">ServerName</span> <span class="s2">&quot;prod.nest.steffo.eu&quot;</span>
<span class="nb">SSLEngine</span> <span class="k">on</span>
<span class="nb">SSLCertificateFile</span> <span class="s2">&quot;/root/.acme.sh/*.nest.steffo.eu/fullchain.cer&quot;</span>
<span class="nb">SSLCertificateKeyFile</span> <span class="s2">&quot;/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key&quot;</span>
<span class="nb">ProxyPass</span> <span class="s2">&quot;/&quot;</span> <span class="s2">&quot;http://127.0.0.1:30041/&quot;</span>
<span class="nb">ProxyPassReverse</span> <span class="s2">&quot;/&quot;</span> <span class="s2">&quot;http://127.0.0.1:30041/&quot;</span>
<span class="nb">RequestHeader</span> set <span class="s2">&quot;X-Forwarded-Proto&quot;</span> expr=%{REQUEST_SCHEME}
<span class="nb">Protocols</span> h2 http/1.1
<span class="nb">Header</span> always set Strict-Transport-Security <span class="s2">&quot;max-age=63072000&quot;</span>
<span class="nt">&lt;/VirtualHost&gt;</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../backend/index.html" class="btn btn-neutral float-right" title="nest_backend - Web API in Python" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../about/index.html" class="btn btn-neutral float-left" title="Il progetto" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

BIN
docs/build/html/objects.inv vendored Normal file

Binary file not shown.

245
docs/build/html/py-modindex.html vendored Normal file
View file

@ -0,0 +1,245 @@
<!DOCTYPE html>
<html class="writer-html5" lang="it" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Indice del modulo Python &mdash; N.E.S.T. 0.1.0 documentazione</title>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/translations.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="index" title="Indice" href="genindex.html" />
<link rel="search" title="Cerca" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> N.E.S.T.
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Manuale</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="about/index.html">Il progetto</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installazione</a></li>
</ul>
<p class="caption"><span class="caption-text">Documentazione autogenerata</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="backend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_backend</span></code> - Web API in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="crawler/index.html"><code class="docutils literal notranslate"><span class="pre">nest_crawler</span></code> - Crawler in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="frontend/index.html"><code class="docutils literal notranslate"><span class="pre">nest_frontend</span></code> - Interfaccia utente in React</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">N.E.S.T.</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Indice del modulo Python</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Indice del modulo Python</h1>
<div class="modindex-jumpbox">
<a href="#cap-n"><strong>n</strong></a>
</div>
<table class="indextable modindextable">
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-n"><td></td><td>
<strong>n</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="backend/index.html#module-nest_backend"><code class="xref">nest_backend</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="backend/index.html#module-nest_backend.database"><code class="xref">nest_backend.database</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="backend/index.html#module-nest_backend.database.base"><code class="xref">nest_backend.database.base</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="backend/index.html#module-nest_backend.database.tables"><code class="xref">nest_backend.database.tables</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="backend/index.html#module-nest_backend.gestione"><code class="xref">nest_backend.gestione</code></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Gruppo 2.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more