mirror of
https://github.com/pds-nest/nest.git
synced 2024-11-25 06:24:19 +00:00
Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
c13e5fff40
19 changed files with 10540 additions and 3426 deletions
78
.idea/codeStyles/Project.xml
Normal file
78
.idea/codeStyles/Project.xml
Normal file
|
@ -0,0 +1,78 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<HTMLCodeStyleSettings>
|
||||
<option name="HTML_UNIFORM_INDENT" value="true" />
|
||||
<option name="HTML_ATTRIBUTE_WRAP" value="0" />
|
||||
<option name="HTML_TEXT_WRAP" value="0" />
|
||||
<option name="HTML_ALIGN_ATTRIBUTES" value="false" />
|
||||
<option name="HTML_ELEMENTS_TO_INSERT_NEW_LINE_BEFORE" value="address,article,aside,blockquote,details,dialog,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,main,nav,ol,p,pre,section,table,ul" />
|
||||
<option name="HTML_ELEMENTS_TO_REMOVE_NEW_LINE_BEFORE" value="a,abbr,acronym,b,basefont,bdo,big,br,cite,cite,code,dfn,em,font,i,img,input,kbd,label,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var" />
|
||||
<option name="HTML_DO_NOT_INDENT_CHILDREN_OF" value="" />
|
||||
<option name="HTML_DONT_ADD_BREAKS_IF_INLINE_CONTENT" value="" />
|
||||
<option name="HTML_ENFORCE_QUOTES" value="true" />
|
||||
<option name="HTML_NEWLINE_BEFORE_FIRST_ATTRIBUTE" value="When multiline" />
|
||||
<option name="HTML_NEWLINE_AFTER_LAST_ATTRIBUTE" value="When multiline" />
|
||||
</HTMLCodeStyleSettings>
|
||||
<JSCodeStyleSettings version="0">
|
||||
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="REFORMAT_C_STYLE_COMMENTS" value="true" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
|
||||
<option name="VAR_DECLARATION_WRAP" value="5" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
<option name="INDENT_CHAINED_CALLS" value="false" />
|
||||
</JSCodeStyleSettings>
|
||||
<ScalaCodeStyleSettings>
|
||||
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
||||
</ScalaCodeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JSON">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="BLANK_LINES_AFTER_IMPORTS" value="2" />
|
||||
<option name="BLANK_LINES_AROUND_CLASS" value="2" />
|
||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
|
||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
||||
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
|
||||
<option name="METHOD_CALL_CHAIN_WRAP" value="5" />
|
||||
<option name="PARENTHESES_EXPRESSION_LPAREN_WRAP" value="true" />
|
||||
<option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="true" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="5" />
|
||||
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="LESS">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
| Data | Ora | Durata | Attività |
|
||||
|------|-----|--------|----------|
|
||||
|14/05 |10:00 | 1.0h | backlog grooming session |
|
||||
|14/05 |10:00 | 1.0h | Sprint Retrospective session |
|
||||
|
||||
Totale generale di tutti i componenti: 106.5h
|
||||
|
||||
|
||||
# Log attività individuali dello Sprint 2
|
||||
|
@ -17,6 +19,12 @@ Chiara Calzolari - UI Designer
|
|||
|03/05 | 1.0h | Testing frontend e segnalazione issues
|
||||
|03/05 | 1.0h | Modifica mockup UI (Dashboard repository)
|
||||
|04/05 | 1.0h | Modifica mockup UI (adeguamento al JS)
|
||||
|10/05 | 3.0h | Configurazione ambiente di sviluppo
|
||||
|11/05 | 1.5h | Modifica UI (traduzione in Italiano)
|
||||
|12/05 | 0.5h | Modifica UI (traduzione in Italiano)
|
||||
|14/05 | 3.0h | Realizzazione video demo sprint 2
|
||||
|-------|--------|
|
||||
|totale| 11.0h |
|
||||
|
||||
Stefano Goldoni - Product Owner & Tester
|
||||
|
||||
|
@ -27,8 +35,10 @@ Stefano Goldoni - Product Owner & Tester
|
|||
|11/05 |2.5h |test utenti e repository
|
||||
|12/05 |2.0h |test repository
|
||||
|13/05 |2.5h |test repository
|
||||
|14/05 |1.0h |test conditions
|
||||
|15/05 |1.0h |test conditions
|
||||
|14/05 |3.0h |test conditions
|
||||
|15/05 |2.0h |test conditions + sonarqube scanner
|
||||
|-------|--------|
|
||||
|totale| 16.0h |
|
||||
|
||||
Lorenzo Balugani - DB & Backend Developer
|
||||
|
||||
|
@ -42,3 +52,91 @@ Lorenzo Balugani - DB & Backend Developer
|
|||
|12/05|3.0h|Risolti issue pubblicati su Taiga
|
||||
|13/05|1.0h|Bugfixing
|
||||
|14/05|1.0h|Bugfixing
|
||||
|-------|--------|
|
||||
|totale| 19.0h |
|
||||
|
||||
Stefano Pigozzi - Sysadmin & Frontend Developer
|
||||
|
||||
| Data | Durata | Attività |
|
||||
|-------|--------|----------|
|
||||
|05/05|0.40h|Riunione
|
||||
|05/05|0.21h|Documentazione
|
||||
|06/05|0.09h|Sviluppo
|
||||
|06/05|0.03h|Configurazione Taiga
|
||||
|06/05|0.11h|Documentazione
|
||||
|06/05|0.09h|Riunione
|
||||
|06/05|0.20h|Documentazione
|
||||
|06/05|0.39h|Sviluppo
|
||||
|06/05|0.15h|Riunione
|
||||
|06/05|1.04h|Riunione
|
||||
|07/05|1.47h|Sviluppo
|
||||
|07/05|0.17h|Sviluppo
|
||||
|07/05|0.34h|Sviluppo
|
||||
|07/05|0.34h|Project management
|
||||
|07/05|2.44h|Sviluppo
|
||||
|08/05|0.13h|Sviluppo
|
||||
|08/05|0.29h|Sviluppo
|
||||
|08/05|0.18h|Sviluppo
|
||||
|10/05|1.00h|Sviluppo
|
||||
|10/05|1.15h|Configurazione GitLab
|
||||
|10/05|0.25h|Sviluppo
|
||||
|10/05|0.39h|Sviluppo
|
||||
|11/05|0.25h|Bugfixing
|
||||
|11/05|3.57h|Sviluppo
|
||||
|11/05|1.45h|Sviluppo
|
||||
|12/05|0.10h|Sviluppo
|
||||
|12/05|1.51h|Sviluppo
|
||||
|13/05|1.00h|Sviluppo
|
||||
|13/05|1.20h|Sviluppo
|
||||
|14/05|0.20h|Sviluppo
|
||||
|15/05|3.17h|Documentazione
|
||||
|-------|--------|
|
||||
|totale| 27.5h |
|
||||
|
||||
Flavia Cocca - Scrum Master & UI Designer
|
||||
|
||||
| Data | Durata | Attività |
|
||||
|-------|--------|----------|
|
||||
|04/05|0.5h|Riunione per con PO, nuovo backlog
|
||||
|05/05|1.0h|Riunione
|
||||
|07/05|3.0h|Refactoring test
|
||||
|08/05|2.0h|Refactoring test
|
||||
|09/05|3.0h|Nuovi test
|
||||
|11/05|2.5h|Discussione test e risoluzione di alcune issue
|
||||
|13/05|1.0h|Bugfixing
|
||||
|14/05|1.0h|Sprint Retrospective
|
||||
|15/05|2.0h|Documentazione
|
||||
|-------|--------|
|
||||
|totale| 16.0h |
|
||||
|
||||
Giovanni Anniballi - Tester
|
||||
|
||||
| Data | Durata | Attività |
|
||||
|-------|--------|----------|
|
||||
|04/05|0.5h|Incontro con SM e PO per valutare quali US andranno nello sprint2
|
||||
|05/05|1.0h|Incontro con il team
|
||||
|07/05|2.0h|Refactoring tests sugli user e primi utilizzi delle fixtures
|
||||
|08/05|2.0h|Completamento test users
|
||||
|10/05|1.0h|Ulteriori approcci (fallimentari) al coverage di SonarQube
|
||||
|11/05|2.0h|Discussione sui test e correzioni bug
|
||||
|12/05|1.0h|Test repository
|
||||
|13/05|1.0h|Generazione coverage pytest e setting sonarqube (riuscito!)
|
||||
|14/05|4.0h|Sprint review e retrospettiva, conclusione test repository
|
||||
|15/05|2.5h|generazione nuovo coverage e fix a sonarqube 2h, fix piccoli bug segnalati da sonarqube 0.5h
|
||||
|-------|--------|
|
||||
|totale| 17.0h |
|
||||
|
||||
Giorgio Minoccari - Analyst & Backend Developer
|
||||
|
||||
| Data | Durata | Attività |
|
||||
|-------|--------|----------|
|
||||
|04/05 | 0.5h | Aggiunta della condizione sull'utente
|
||||
|10/05 | 2.0h | Tentativo di inserimento delle query con place_id
|
||||
|11/05 | 1.5h | Test per passare alla versione 2.0 delle API
|
||||
|12/05 | 1.0h | Ritorno alla versione 1.1 perche' lascia disponibili le query sulla geolocalizzazione gratuitamente
|
||||
|14/05 | 5.0h | Integrazione e inserimento dei tweet catturati nel database
|
||||
|-------|--------|
|
||||
|totale| 10.0h |
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -118,11 +118,11 @@ def page_alert(aid):
|
|||
if not alert:
|
||||
return json_error("Could not find alert."), 404
|
||||
if alert.repository not in [a.repository for a in user.authorizations] + user.owner_of:
|
||||
json_error("You are not authorized to proceed."), 403
|
||||
return json_error("You are not authorized to proceed."), 403
|
||||
if request.method == "GET":
|
||||
return json_success(alert.to_json()), 200
|
||||
if alert.repository not in user.owner_of:
|
||||
json_error("You are not authorized to proceed."), 403
|
||||
return json_error("You are not authorized to proceed."), 403
|
||||
if request.method == "PATCH":
|
||||
if 'name' in request.json:
|
||||
alert.name = request.json['name']
|
||||
|
|
|
@ -5,10 +5,9 @@ import nltk
|
|||
from nltk.corpus import stopwords
|
||||
|
||||
|
||||
|
||||
|
||||
ext.init_app(app=app)
|
||||
|
||||
|
||||
def authenticate():
|
||||
c_k = "GEhtSyP9e98mzFeiOCSW0lvQX"
|
||||
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
||||
|
@ -20,6 +19,7 @@ def authenticate():
|
|||
api = tw.API(auth, wait_on_rate_limit=True)
|
||||
return api
|
||||
|
||||
|
||||
def start_exploring():
|
||||
api = authenticate()
|
||||
most_popular_hashtags = dict()
|
||||
|
@ -49,7 +49,7 @@ def start_exploring():
|
|||
print(dict(sorted(most_popular_words.items(), key=lambda item: item[1])))
|
||||
|
||||
|
||||
def search_repo_conditions(repository_id):
|
||||
def search_repo_conditions(repository_id, all_or):
|
||||
repo = Repository.query.filter_by(id=repository_id).first()
|
||||
conditions = [use.condition for use in repo.uses]
|
||||
conditions_type = dict()
|
||||
|
@ -64,22 +64,6 @@ def search_repo_conditions(repository_id):
|
|||
print(types, ":", conditions_type[types])
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
search_repo_conditions()
|
||||
#print(stopwords.words('italian'))
|
||||
with app.app_context():
|
||||
ext.create_all(app=app)
|
||||
#start_exploring()
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
from nest_backend.app import app
|
||||
from nest_backend.database import *
|
||||
import tweepy as tw
|
||||
import nltk
|
||||
from nltk.corpus import stopwords
|
||||
from datetime import datetime
|
||||
|
||||
ext.init_app(app=app)
|
||||
|
@ -13,31 +11,30 @@ def authenticate():
|
|||
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
||||
a_t = "1380217745732689921-8gCfr8Zx9YHKvo4OVP3HAr3kfMRkgz"
|
||||
a_t_s = "jGOlgTs1i1itGMxDxAqFEDnv7QAui772n9hGxeSIKcwzS"
|
||||
b_t = "AAAAAAAAAAAAAAAAAAAAANjpOQEAAAAAYFKrqByk6WTMEwIYUJLrVnPeQuo%3DJUJUW2mFq9n20A7BtIRMT24PPFg1NXVtetrfp0tH1NkDFFNGo5"
|
||||
|
||||
auth = tw.OAuthHandler(c_k, c_s)
|
||||
auth.set_access_token(a_t, a_t_s)
|
||||
api = tw.API(auth, wait_on_rate_limit=True)
|
||||
#client = tw.Client(b_t, c_k, c_s, a_t, a_t_s, wait_on_rate_limit=True);
|
||||
# client = tw.Client(b_t, c_k, c_s, a_t, a_t_s, wait_on_rate_limit=True);
|
||||
return api
|
||||
|
||||
|
||||
def search_repo_conditions(repository_id):
|
||||
api = authenticate()
|
||||
geocode="44.3591600,11.7132000,20km"
|
||||
geocode = "44.3591600,11.7132000,20km"
|
||||
|
||||
repo = Repository.query.filter_by(id=repository_id).first()
|
||||
if(repo == None):
|
||||
if repo is None:
|
||||
print("Non esiste una repository con questo id")
|
||||
return False
|
||||
conditions = [use for use in repo.conditions]
|
||||
evaluation_mode = repo.evaluation_mode
|
||||
conditions_type = dict()
|
||||
#Dividing condition into condition types
|
||||
# Dividing condition into condition types
|
||||
for condition in conditions:
|
||||
# print(condition.id)
|
||||
if condition.type not in conditions_type.keys():
|
||||
conditions_type[condition.type]=[condition.content]
|
||||
conditions_type[condition.type] = [condition.content]
|
||||
else:
|
||||
conditions_type[condition.type].append(condition.content)
|
||||
|
||||
|
@ -55,15 +52,15 @@ def search_repo_conditions(repository_id):
|
|||
queryString += ("#" + condition_content + " " + queryConjunction + " ")
|
||||
if ConditionType.coordinates in conditions_type.keys():
|
||||
if evaluation_mode == ConditionMode.all_and:
|
||||
if len(conditions_type[ConditionType.coordinates])==1:
|
||||
if len(conditions_type[ConditionType.coordinates]) == 1:
|
||||
coordinates_tweet = conditions_type[ConditionType.coordinates][0].split()
|
||||
coordinates_string = coordinates_tweet[2]+","+coordinates_tweet[3]+","+coordinates_tweet[1]+"km"
|
||||
coordinates_string = coordinates_tweet[2] + "," + coordinates_tweet[3] + "," + str(float(coordinates_tweet[1])/1000) + "km"
|
||||
else:
|
||||
return None
|
||||
elif evaluation_mode == ConditionMode.all_or:
|
||||
for condition_content in conditions_type[ConditionType.coordinates]:
|
||||
coordinates_tweet = condition_content.split()
|
||||
coordinates_string = coordinates_tweet[2]+","+coordinates_tweet[3]+","+coordinates_tweet[1]+"km"
|
||||
coordinates_string = coordinates_tweet[2] + "," + coordinates_tweet[3] + "," + str(float(coordinates_tweet[1])/1000) + "km"
|
||||
print(coordinates_string)
|
||||
for tweet in tw.Cursor(method=api.search, geocode=coordinates_string).items(10):
|
||||
tweetsFound.append(tweet)
|
||||
|
@ -72,23 +69,25 @@ def search_repo_conditions(repository_id):
|
|||
queryString += ("from:" + condition_content + " " + queryConjunction + " ")
|
||||
if ConditionType.time in conditions_type.keys():
|
||||
for condition_content in conditions_type[ConditionType.time]:
|
||||
if condition_content[0]=='<':
|
||||
if condition_content[0] == '<':
|
||||
queryString += ("until:" + condition_content + " " + queryConjunction + " ")
|
||||
elif condition_content[0]=='>':
|
||||
elif condition_content[0] == '>':
|
||||
queryString += ("since:" + condition_content + " " + queryConjunction + " ")
|
||||
queryString = queryString[:-len(queryConjunction)-1]
|
||||
queryString = queryString[:-len(queryConjunction) - 1]
|
||||
print(queryString)
|
||||
if(evaluation_mode == ConditionMode.all_or):
|
||||
if evaluation_mode == ConditionMode.all_or:
|
||||
for tweet in tw.Cursor(method=api.search, q=queryString).items(10):
|
||||
tweetsFound.append(tweet)
|
||||
print(tweet.user.name + ' : ' + tweet.text)
|
||||
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):
|
||||
tweetsFound.append(tweet)
|
||||
print(tweet.user.name + ' : ' + tweet.text)
|
||||
for tweet in tweetsFound:
|
||||
if not Tweet.query.filter_by(snowflake=str(tweet.id)).all():
|
||||
tweetDB = Tweet(snowflake=tweet.id, content=tweet.text, location=tweet.geo.coordinate.coordinates if tweet.geo is not None else "", insert_time=str(datetime.now()))
|
||||
tweetDB = Tweet(snowflake=tweet.id, content=tweet.text,
|
||||
location=tweet.geo.coordinate.coordinates if tweet.geo is not None else "",
|
||||
insert_time=str(datetime.now()))
|
||||
ext.session.add(tweetDB)
|
||||
if not Composed.query.filter_by(snowflake=str(tweet.id), rid=repository_id).all():
|
||||
composed = Composed(rid=repository_id, snowflake=tweet.id)
|
||||
|
@ -98,7 +97,5 @@ def search_repo_conditions(repository_id):
|
|||
|
||||
if __name__ == "__main__":
|
||||
search_repo_conditions(16)
|
||||
#print(stopwords.words('italian'))
|
||||
with app.app_context():
|
||||
ext.create_all(app=app)
|
||||
#start_exploring()
|
||||
|
|
|
@ -8,6 +8,7 @@ import PageDashboard from "./routes/PageDashboard"
|
|||
import PageRoot from "./routes/PageRoot"
|
||||
import PageEdit from "./routes/PageEdit"
|
||||
import PageUsers from "./routes/PageUsers"
|
||||
import PageRepository from "./routes/PageRepository"
|
||||
|
||||
|
||||
export default function PageSwitcher({ ...props }) {
|
||||
|
@ -16,6 +17,9 @@ export default function PageSwitcher({ ...props }) {
|
|||
<Route path={"/repositories/:id/edit"} exact={true}>
|
||||
<PageEdit/>
|
||||
</Route>
|
||||
<Route path={"/repositories/:id"} exact={true}>
|
||||
<PageRepository/>
|
||||
</Route>
|
||||
<Route path={"/login"} exact={true}>
|
||||
<PageLogin/>
|
||||
</Route>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
}
|
||||
|
||||
.Left {
|
||||
width: 250px;
|
||||
width: 280px;
|
||||
height: 60px;
|
||||
|
||||
display: grid;
|
||||
|
@ -97,7 +97,7 @@
|
|||
}
|
||||
|
||||
.Right {
|
||||
width: 250px;
|
||||
width: 280px;
|
||||
height: 60px;
|
||||
padding: 5px;
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ export default function BoxRepositoriesActive({
|
|||
}
|
||||
|
||||
return (
|
||||
<BoxFullScrollable header={"Le tue repository attive"} {...props}>
|
||||
<BoxFullScrollable header={"Repository attivi"} {...props}>
|
||||
{contents}
|
||||
</BoxFullScrollable>
|
||||
)
|
||||
|
|
|
@ -50,7 +50,7 @@ export default function BoxRepositoriesArchived({
|
|||
}
|
||||
|
||||
return (
|
||||
<BoxFullScrollable header={"Le tue repository archiviate"} {...props}>
|
||||
<BoxFullScrollable header={"Repository archiviati"} {...props}>
|
||||
{contents}
|
||||
</BoxFullScrollable>
|
||||
)
|
||||
|
|
|
@ -41,7 +41,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
|||
save()
|
||||
}}
|
||||
>
|
||||
<FormLabel htmlFor={"repo-name"} text={"Nome della repository"}>
|
||||
<FormLabel htmlFor={"repo-name"} text={"Nome repository"}>
|
||||
<InputWithIcon
|
||||
id={"repo-name"}
|
||||
icon={faFolder}
|
||||
|
@ -49,14 +49,14 @@ export default function BoxRepositoryCreate({ ...props }) {
|
|||
onChange={e => setName(e.target.value)}
|
||||
/>
|
||||
</FormLabel>
|
||||
<FormLabel htmlFor={"filter-mode"} text={"Aggiutngi tweet se soddisfano:"}>
|
||||
<FormLabel htmlFor={"filter-mode"} text={"Richiedi"}>
|
||||
<label>
|
||||
<Radio
|
||||
name={"filter-mode"}
|
||||
onChange={() => setEvaluationMode(0)}
|
||||
checked={evaluationMode === 0}
|
||||
/>
|
||||
Un filtro
|
||||
Almeno una cond.
|
||||
</label>
|
||||
|
||||
<label>
|
||||
|
@ -65,7 +65,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
|||
onChange={() => setEvaluationMode(1)}
|
||||
checked={evaluationMode === 1}
|
||||
/>
|
||||
Tutti i filtri
|
||||
Tutte le cond.
|
||||
</label>
|
||||
</FormLabel>
|
||||
{error ?
|
||||
|
@ -81,7 +81,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
|||
color={"Red"}
|
||||
onClick={() => revert()}
|
||||
>
|
||||
Rollback edits
|
||||
Annulla modifiche
|
||||
</Button>
|
||||
<Button
|
||||
style={{ "gridColumn": "2" }}
|
||||
|
@ -89,7 +89,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
|||
color={"Green"}
|
||||
onClick={_ => goToOnSuccess(save, history, "/repositories")()}
|
||||
>
|
||||
Save changes
|
||||
Salva modifiche
|
||||
</Button>
|
||||
</>
|
||||
:
|
||||
|
|
33
nest_frontend/components/interactive/BoxWordcloud.js
Normal file
33
nest_frontend/components/interactive/BoxWordcloud.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
import React from "react"
|
||||
import BoxFull from "../base/BoxFull"
|
||||
import ReactWordcloud from "react-wordcloud"
|
||||
|
||||
|
||||
/**
|
||||
* A Box which displays a wordcloud.
|
||||
*
|
||||
* @param words - A list of word objects, made of a string "text" and a number "value"
|
||||
* @param props - Additional props to pass to the box.
|
||||
* @returns {JSX.Element}
|
||||
* @constructor
|
||||
*/
|
||||
export default function BoxWordcloud({ words, props }) {
|
||||
return (
|
||||
<BoxFull header={"Wordcloud"} {...props}>
|
||||
<div style={{"width": "100%", "height": "100%"}}>
|
||||
<ReactWordcloud
|
||||
options={{
|
||||
colors: [
|
||||
"var(--fg-primary)",
|
||||
],
|
||||
fontFamily: "Bree Serif",
|
||||
fontSizes: [12, 128],
|
||||
size: undefined,
|
||||
deterministic: true,
|
||||
}}
|
||||
words={words}
|
||||
/>
|
||||
</div>
|
||||
</BoxFull>
|
||||
)
|
||||
}
|
|
@ -22,7 +22,7 @@ export default function PageRepositories({ children, className, ...props }) {
|
|||
}
|
||||
return {}
|
||||
},
|
||||
[bv.apiRequest, bv.refreshResource],
|
||||
[bv],
|
||||
)
|
||||
|
||||
return (
|
||||
|
|
13
nest_frontend/routes/PageRepository.js
Normal file
13
nest_frontend/routes/PageRepository.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
import React from "react"
|
||||
import Style from "./PageRepository.module.css"
|
||||
import classNames from "classnames"
|
||||
import BoxWordcloud from "../components/interactive/BoxWordcloud"
|
||||
|
||||
|
||||
export default function PageRepository({ className, ...props }) {
|
||||
return (
|
||||
<div className={classNames(Style.PageRepository, className)} {...props}>
|
||||
<BoxWordcloud className={Style.Wordcloud}/>
|
||||
</div>
|
||||
)
|
||||
}
|
14
nest_frontend/routes/PageRepository.module.css
Normal file
14
nest_frontend/routes/PageRepository.module.css
Normal file
|
@ -0,0 +1,14 @@
|
|||
.PageRepository {
|
||||
display: grid;
|
||||
|
||||
grid-template-areas: "a";
|
||||
|
||||
grid-gap: 10px;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.Wordcloud {
|
||||
grid-area: a;
|
||||
}
|
13529
package-lock.json
generated
13529
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -20,6 +20,7 @@
|
|||
"react-router": "^5.2.0",
|
||||
"react-router-dom": "^5.2.0",
|
||||
"react-scripts": "4.0.3",
|
||||
"react-wordcloud": "github:Steffo99/react-wordcloud",
|
||||
"serve": "^11.3.2",
|
||||
"web-vitals": "^1.1.1"
|
||||
},
|
||||
|
|
98
poetry.lock
generated
98
poetry.lock
generated
|
@ -119,20 +119,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.0.0"
|
||||
version = "7.1.2"
|
||||
description = "Composable command line interface toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
|
||||
[package.dependencies]
|
||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.4"
|
||||
description = "Cross-platform colored terminal text."
|
||||
category = "main"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
|
@ -146,17 +143,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|||
|
||||
[[package]]
|
||||
name = "flask"
|
||||
version = "1.1.2"
|
||||
version = "1.1.4"
|
||||
description = "A simple framework for building complex web applications."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[package.dependencies]
|
||||
click = ">=5.1"
|
||||
itsdangerous = ">=0.24"
|
||||
Jinja2 = ">=2.10.1"
|
||||
Werkzeug = ">=0.15"
|
||||
click = ">=5.1,<8.0"
|
||||
itsdangerous = ">=0.24,<2.0"
|
||||
Jinja2 = ">=2.10.1,<3.0"
|
||||
Werkzeug = ">=0.15,<2.0"
|
||||
|
||||
[package.extras]
|
||||
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
|
||||
|
@ -276,25 +273,25 @@ six = "*"
|
|||
|
||||
[[package]]
|
||||
name = "itsdangerous"
|
||||
version = "2.0.0"
|
||||
description = "Safely pass data to untrusted environments and back."
|
||||
version = "1.1.0"
|
||||
description = "Various helpers to pass data to untrusted environments and back."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
|
||||
[[package]]
|
||||
name = "jinja2"
|
||||
version = "3.0.0"
|
||||
version = "2.11.3"
|
||||
description = "A very fast and expressive template engine."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[package.dependencies]
|
||||
MarkupSafe = ">=2.0.0rc2"
|
||||
MarkupSafe = ">=0.23"
|
||||
|
||||
[package.extras]
|
||||
i18n = ["Babel (>=2.7)"]
|
||||
i18n = ["Babel (>=0.8)"]
|
||||
|
||||
[[package]]
|
||||
name = "joblib"
|
||||
|
@ -498,14 +495,6 @@ category = "main"
|
|||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
|
||||
[[package]]
|
||||
name = "pysocks"
|
||||
version = "1.7.1"
|
||||
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "6.2.4"
|
||||
|
@ -563,7 +552,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|||
certifi = ">=2017.4.17"
|
||||
chardet = ">=3.0.2,<5"
|
||||
idna = ">=2.5,<3"
|
||||
PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""}
|
||||
urllib3 = ">=1.21.1,<1.27"
|
||||
|
||||
[package.extras]
|
||||
|
@ -772,21 +760,28 @@ telegram = ["requests"]
|
|||
|
||||
[[package]]
|
||||
name = "tweepy"
|
||||
version = "3.10.0"
|
||||
version = "4.0.0a0"
|
||||
description = "Twitter library for Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
python-versions = ">=3.6"
|
||||
develop = false
|
||||
|
||||
[package.dependencies]
|
||||
requests = {version = ">=2.11.1", extras = ["socks"]}
|
||||
requests-oauthlib = ">=0.7.0"
|
||||
six = ">=1.10.0"
|
||||
requests = ">=2.11.1,<3"
|
||||
requests-oauthlib = ">=1.0.0,<2"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coveralls (>=1.8.2)", "tox (>=2.4.0)"]
|
||||
dev = ["coveralls (>=2.1.0)", "tox (>=2.4.0)"]
|
||||
socks = ["requests[socks] (>=2.11.1,<3)"]
|
||||
test = ["mock (>=1.0.1)", "nose (>=1.3.3)", "vcrpy (>=1.10.3)"]
|
||||
|
||||
[package.source]
|
||||
type = "git"
|
||||
url = "https://github.com/tweepy/tweepy.git"
|
||||
reference = "master"
|
||||
resolved_reference = "69f1a58dceb0cd607f124ad25d3cfd879f6d5f39"
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "1.26.4"
|
||||
|
@ -802,19 +797,20 @@ brotli = ["brotlipy (>=0.6.0)"]
|
|||
|
||||
[[package]]
|
||||
name = "werkzeug"
|
||||
version = "2.0.0"
|
||||
version = "1.0.1"
|
||||
description = "The comprehensive WSGI web application library."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[package.extras]
|
||||
dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"]
|
||||
watchdog = ["watchdog"]
|
||||
|
||||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.8.5"
|
||||
content-hash = "1ac47344a839aae5a929d7ce9914f62c76c1a591bc88dabb819fe15814f40031"
|
||||
content-hash = "ce716a14534bfcf41e82944d3eabf4cbeb743303f2c1a21e8360f802d89598d1"
|
||||
|
||||
[metadata.files]
|
||||
alabaster = [
|
||||
|
@ -898,8 +894,8 @@ chardet = [
|
|||
{file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
|
||||
]
|
||||
click = [
|
||||
{file = "click-8.0.0-py3-none-any.whl", hash = "sha256:e90e62ced43dc8105fb9a26d62f0d9340b5c8db053a814e25d95c19873ae87db"},
|
||||
{file = "click-8.0.0.tar.gz", hash = "sha256:7d8c289ee437bcb0316820ccee14aefcb056e58d31830ecab8e47eda6540e136"},
|
||||
{file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
|
||||
{file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
|
||||
]
|
||||
colorama = [
|
||||
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
|
||||
|
@ -910,8 +906,8 @@ docutils = [
|
|||
{file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
|
||||
]
|
||||
flask = [
|
||||
{file = "Flask-1.1.2-py2.py3-none-any.whl", hash = "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"},
|
||||
{file = "Flask-1.1.2.tar.gz", hash = "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"},
|
||||
{file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"},
|
||||
{file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"},
|
||||
]
|
||||
flask-cors = [
|
||||
{file = "Flask-Cors-3.0.10.tar.gz", hash = "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de"},
|
||||
|
@ -1000,12 +996,12 @@ isodate = [
|
|||
{file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"},
|
||||
]
|
||||
itsdangerous = [
|
||||
{file = "itsdangerous-2.0.0-py3-none-any.whl", hash = "sha256:e2cb4ae918f07ab2a2f9a91dec2695bd1f25a19d31861a70015ad537ccb5e807"},
|
||||
{file = "itsdangerous-2.0.0.tar.gz", hash = "sha256:99b1053ccce68066dfc0b4465ef8779027e6d577377c8270e21a3d6289cac111"},
|
||||
{file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"},
|
||||
{file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"},
|
||||
]
|
||||
jinja2 = [
|
||||
{file = "Jinja2-3.0.0-py3-none-any.whl", hash = "sha256:2f2de5285cf37f33d33ecd4a9080b75c87cd0c1994d5a9c6df17131ea1f049c6"},
|
||||
{file = "Jinja2-3.0.0.tar.gz", hash = "sha256:ea8d7dd814ce9df6de6a761ec7f1cac98afe305b8cdc4aaae4e114b8d8ce24c5"},
|
||||
{file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
|
||||
{file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
|
||||
]
|
||||
joblib = [
|
||||
{file = "joblib-1.0.1-py3-none-any.whl", hash = "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5"},
|
||||
|
@ -1141,11 +1137,6 @@ pyparsing = [
|
|||
pyrsistent = [
|
||||
{file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
|
||||
]
|
||||
pysocks = [
|
||||
{file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"},
|
||||
{file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"},
|
||||
{file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
|
||||
]
|
||||
pytest = [
|
||||
{file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
|
||||
{file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
|
||||
|
@ -1317,15 +1308,12 @@ tqdm = [
|
|||
{file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"},
|
||||
{file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"},
|
||||
]
|
||||
tweepy = [
|
||||
{file = "tweepy-3.10.0-py2.py3-none-any.whl", hash = "sha256:5e22003441a11f6f4c2ea4d05ec5532f541e9f5d874c3908270f0c28e649b53a"},
|
||||
{file = "tweepy-3.10.0.tar.gz", hash = "sha256:76e6954b806ca470dda877f57db8792fff06a0beba0ed43efc3805771e39f06a"},
|
||||
]
|
||||
tweepy = []
|
||||
urllib3 = [
|
||||
{file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
|
||||
{file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"},
|
||||
]
|
||||
werkzeug = [
|
||||
{file = "Werkzeug-2.0.0-py3-none-any.whl", hash = "sha256:64c02f6495ba01eddd6625b3675f357cd358a73f1e38458a56ad86c5baa30b53"},
|
||||
{file = "Werkzeug-2.0.0.tar.gz", hash = "sha256:3389bbfe6d40c6dd25e6d3f974155163c8b3de5bbda6a89342d4ab93fae80ba0"},
|
||||
{file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"},
|
||||
{file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"},
|
||||
]
|
||||
|
|
|
@ -30,9 +30,9 @@ apispec-webframeworks = "^0.5.2"
|
|||
marshmallow = "^3.11.1"
|
||||
openapi-spec-validator = "^0.3.0"
|
||||
flask-swagger-ui = "^3.36.0"
|
||||
tweepy = "^3.10.0"
|
||||
nltk = "^3.6.2"
|
||||
gunicorn = "^20.1.0"
|
||||
tweepy = {git = "https://github.com/tweepy/tweepy.git"}
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
pytest = "^6.2.3"
|
||||
|
|
Loading…
Reference in a new issue