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

Merge remote-tracking branch 'origin/main'

This commit is contained in:
@uni-chiara 2021-05-29 15:58:56 +02:00
commit 640546f662
6 changed files with 152 additions and 35 deletions

View file

@ -34,12 +34,25 @@ Backlog
.. image:: Chart1.png .. image:: Chart1.png
:width: 600 :width: 600
Definition of done
Definition of Ready
------------------ ------------------
.. todo:: Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
* La User Story è stata compresa ed accettata da tutti i membri
* I tester hanno confermato la possibilità di poterla testare
* Il Product Owner ha la visione necessaria per definirne la priorità
* Il Team è in grado di stimarla
* La User Story è indipendente o dipendente da altre a priorità maggiore
Inserire qui la definition of done dello sprint. Definition of Done
------------------
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
* Sviluppo completo della funzionalità richiesta
* Definizione e superamento dei test
* Bozza della documentazione della funzionalità
* Merge dei sorgenti nel branch Main di GitLab
Registro attività Registro attività

View file

@ -32,12 +32,26 @@ Backlog
.. image:: Chart2.png .. image:: Chart2.png
:width: 600 :width: 600
Definition of done
Definition of Ready
------------------ ------------------
.. todo:: Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
* La User Story è stata compresa ed accettata da tutti i membri
* I tester hanno confermato la possibilità di poterla testare
* Il Product Owner ha la visione necessaria per definirne la priorità
* Il Team è in grado di stimarla
* La User Story è indipendente o dipendente da altre a priorità maggiore
Definition of Done
------------------
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
* Sviluppo completo della funzionalità richiesta
* Definizione e superamento dei test
* Bozza della documentazione della funzionalità
* Merge dei sorgenti nel branch Main di GitLab
Inserire qui la definition of done dello sprint.
Registro attività Registro attività

View file

@ -20,6 +20,15 @@ Tutto ciò è visibile dai task completati:
.. image:: Task3.png .. image:: Task3.png
:width: 400 :width: 400
Grooming session
----------------
Sono state definite le nuove User Stories da inserire nel progetto sulla base delle nuove richieste pervenute dal cliente: analisi statistica più dettagliata, postare su Twitter, traduzione dell'interfaccia in inglese.
La richiesta relativa alle ricerche basate sulla geolocalizzazione, come già comunicato al cliente, non è stata inserita per motivi tecnici legati alle features delle API 1.1 che non permettono di eseguire query sui campi di posizione geografica.
Le nuove User Stories sono state valutate tramite il metodo dello Scrum Poker, durante il quale ogni membro ha espresso la sua valutazione.
Tutte le nuove richieste sono state accettate dal Product Owner e sono pronte ad essere inserite nello sprint di sviluppo in partenza.
Backlog Backlog
------- -------
@ -32,12 +41,24 @@ Backlog
:width: 600 :width: 600
Definition of done Definition of Ready
------------------ ------------------
.. todo:: Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
* La User Story è stata compresa ed accettata da tutti i membri
* I tester hanno confermato la possibilità di poterla testare
* Il Product Owner ha la visione necessaria per definirne la priorità
* Il Team è in grado di stimarla
* La User Story è indipendente o dipendente da altre a priorità maggiore
Inserire qui la definition of done dello sprint. Definition of Done
------------------
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
* Sviluppo completo della funzionalità richiesta
* Definizione e superamento dei test
* Bozza della documentazione della funzionalità
* Merge dei sorgenti nel branch Main di GitLab
Registro attività Registro attività
@ -112,13 +133,44 @@ Flavia Cocca
- Durata - Durata
- Attività - Attività
* - * -
- - 14h
- Totale - Totale
* - * - 20/05
- - 2.0h
- - Trasferimento documenti in nuova documentazione
* - 21/05
- 1.0h
- Studio Sphinx
* - 23/05
- 1.0h
- Studio sintassi rST
* - 24/05
- 1.0h
- Documentazione
* - 25/05
- 1.0h
- Documentazione
* - 26/05
- 1.0h
- Documentazione
* - 27/05
- 1.0h
- Documentazione
* - 28/05
- 3.0h
- Documentazione
* - 29/05
- 3.0h
- Documentazione
Chiara Calzolari Chiara Calzolari
"""""""""""""""" """"""""""""""""
@ -196,12 +248,45 @@ Giovanni Anniballi
- Durata - Durata
- Attività - Attività
* - * -
- - 18h
- Totale - Totale
* - * - 17/05
- - 1h
- - Ricontrollo generale codice, fix piccoli typo
* - 18/05
- 1h
- Aggiornati files di log e refactoring documentazione
* - 21/05
- 2h
- Studio Jest, valutazione di test sul frontend
* - 24/05
- 3h
- Primi test sulle autorizzazioni
* - 26/05
- 2h
- Fix ai test
* - 27/05
- 2h
- Test autorizzazioni completati, fix
* - 28/05
- 4h
- Fix test malfunzionanti, refactoring test
* - 29/05
- 3h
- Aggiornamento documentazione, aggiunti ulteriori test seguendo i suggerimenti di SQ
Giorgio Minoccari Giorgio Minoccari
@ -283,9 +368,7 @@ Retrospettiva finale
Schermata finale di SonarQube Schermata finale di SonarQube
----------------------------- -----------------------------
.. todo:: - :download:`Schermata finale Sonarqube <sonarqube.pdf>`
Inserire qui uno screenshot della schermata finale di SonarQube.
Demo Demo
---- ----

Binary file not shown.

View file

@ -2,6 +2,7 @@ from datetime import datetime, timedelta
from nest_backend.database import * from nest_backend.database import *
from .authentication import authenticate from .authentication import authenticate
import smtplib import smtplib
import tweepy as tw
def is_repo_alert_triggered(repository_id): def is_repo_alert_triggered(repository_id):
@ -36,7 +37,7 @@ def is_repo_alert_triggered(repository_id):
ext.session.commit() ext.session.commit()
print("alert triggered") print("alert triggered")
alerts_triggered.append(alert) alerts_triggered.append(alert)
send_notification_email(alert) #send_notification_email(alert)
send_notification_tweet(alert) send_notification_tweet(alert)
@ -48,14 +49,11 @@ def send_notification_email(alert):
conditions_string = conditions_string[:-1] conditions_string = conditions_string[:-1]
smtpObj = None smtpObj = None
try: try:
smtpObj = smtplib.SMTP('localhost') with smtplib.SMTP(host='localhost') as smtpObj:
smtpObj.sendmail("alert@nest.com", owner_repo.email, "Alert triggered") smtpObj.sendmail("alert@nest.com", owner_repo.email, "Alert triggered")
print("Successfully sent email") print("Successfully sent email")
except smtplib.SMTPException: except smtplib.SMTPException:
print("Error: unable to send email") print("Error: unable to send email")
finally:
if smtpObj is not None:
smtpObj.close()
def send_notification_tweet(alert): def send_notification_tweet(alert):
@ -65,7 +63,10 @@ def send_notification_tweet(alert):
conditions_string += condition.condition.content + ',' conditions_string += condition.condition.content + ','
conditions_string = conditions_string[:-1] conditions_string = conditions_string[:-1]
print(conditions_string) print(conditions_string)
api.update_status(f"L'alert {alert.name} è stato attivato! C'è stato un incremento di popolarità negli argomenti di ricerca {conditions_string}") try:
api.update_status(f"L'alert {alert.name} è stato attivato! C'è stato un incremento di popolarità negli argomenti di ricerca {conditions_string}")
except tw.errors.Forbidden:
print("Il tweet e' gia' stato pubblicato")
__all__ = ( __all__ = (

View file

@ -19,6 +19,12 @@ def search_repo_conditions(repository_id):
print(f"Searching tweets from repo: {repo.name}") print(f"Searching tweets from repo: {repo.name}")
evaluation_mode = repo.evaluation_mode evaluation_mode = repo.evaluation_mode
# tweets_repo = [tweet.tweet for tweet in repo.tweets]
# tweets_repo.sort(key=lambda x: x.snowflake)
#
# latest_tweet_id = int(tweets_repo[-1].snowflake) if len(tweets_repo) > 0 else 0
conditions_type = dict() conditions_type = dict()
# Dividing condition into condition types # Dividing condition into condition types
@ -54,8 +60,8 @@ def search_repo_conditions(repository_id):
for condition_content in conditions_type[ConditionType.coordinates]: for condition_content in conditions_type[ConditionType.coordinates]:
coordinates_tweet = condition_content.content.split() coordinates_tweet = condition_content.content.split()
coordinates_string = coordinates_tweet[2] + "," + coordinates_tweet[3] + "," + str(float(coordinates_tweet[1])/1000) + "km" coordinates_string = coordinates_tweet[2] + "," + coordinates_tweet[3] + "," + str(float(coordinates_tweet[1])/1000) + "km"
print(coordinates_string) print(f"Le coordinate di questa condizione sono: {coordinates_string}")
for tweet in tw.Cursor(method=api.search, q="", geocode=coordinates_string).items(10): for tweet in tw.Cursor(method=api.search, q="", geocode=coordinates_string).items(100):
if not Tweet.query.filter_by(snowflake=str(tweet.id)).all(): if not Tweet.query.filter_by(snowflake=str(tweet.id)).all():
image_url_list = '' image_url_list = ''
if 'media' in tweet.entities.keys(): if 'media' in tweet.entities.keys():
@ -92,17 +98,17 @@ def search_repo_conditions(repository_id):
queryString += ("since:" + condition_content.content[2:] + " " + queryConjunction + " ") queryString += ("since:" + condition_content.content[2:] + " " + queryConjunction + " ")
# End of query string # End of query string
queryString = queryString[:-len(queryConjunction) - 1] queryString = queryString[:-len(queryConjunction) - 1]
print(queryString) print(f"La stringa di query finale e':{queryString}")
if evaluation_mode == ConditionMode.all_or: if evaluation_mode == ConditionMode.all_or:
if queryString != "": if queryString != "":
for tweet in tw.Cursor(method=api.search, q=queryString).items(10): for tweet in tw.Cursor(method=api.search, q=queryString).items(100):
tweetsFound.append(tweet) tweetsFound.append(tweet)
print(tweet.user.name + ' : ' + tweet.text + ' : ' + tweet.geo if tweet.geo is not None else '') print(tweet.user.name + ' : ' + tweet.text + ' : ' + (tweet.geo if tweet.geo is not None else ''))
elif evaluation_mode == ConditionMode.all_and: elif evaluation_mode == ConditionMode.all_and:
for tweet in tw.Cursor(method=api.search, q=queryString, geocode=coordinates_string).items(10): for tweet in tw.Cursor(method=api.search, q=queryString, geocode=coordinates_string).items(100):
tweetsFound.append(tweet) tweetsFound.append(tweet)
print(tweet.user.name + ' : ' + tweet.text + ' : ' + str(tweet.geo)) print(tweet.user.name + ' : ' + tweet.text + ' : ' + (tweet.geo if tweet.geo is not None else ''))
for tweet in tweetsFound: for tweet in tweetsFound:
if not Tweet.query.filter_by(snowflake=str(tweet.id)).all(): if not Tweet.query.filter_by(snowflake=str(tweet.id)).all():
image_url_list = '' image_url_list = ''