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à |
|
| 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
|
# 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 | Testing frontend e segnalazione issues
|
||||||
|03/05 | 1.0h | Modifica mockup UI (Dashboard repository)
|
|03/05 | 1.0h | Modifica mockup UI (Dashboard repository)
|
||||||
|04/05 | 1.0h | Modifica mockup UI (adeguamento al JS)
|
|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
|
Stefano Goldoni - Product Owner & Tester
|
||||||
|
|
||||||
|
@ -27,8 +35,10 @@ Stefano Goldoni - Product Owner & Tester
|
||||||
|11/05 |2.5h |test utenti e repository
|
|11/05 |2.5h |test utenti e repository
|
||||||
|12/05 |2.0h |test repository
|
|12/05 |2.0h |test repository
|
||||||
|13/05 |2.5h |test repository
|
|13/05 |2.5h |test repository
|
||||||
|14/05 |1.0h |test conditions
|
|14/05 |3.0h |test conditions
|
||||||
|15/05 |1.0h |test conditions
|
|15/05 |2.0h |test conditions + sonarqube scanner
|
||||||
|
|-------|--------|
|
||||||
|
|totale| 16.0h |
|
||||||
|
|
||||||
Lorenzo Balugani - DB & Backend Developer
|
Lorenzo Balugani - DB & Backend Developer
|
||||||
|
|
||||||
|
@ -42,3 +52,91 @@ Lorenzo Balugani - DB & Backend Developer
|
||||||
|12/05|3.0h|Risolti issue pubblicati su Taiga
|
|12/05|3.0h|Risolti issue pubblicati su Taiga
|
||||||
|13/05|1.0h|Bugfixing
|
|13/05|1.0h|Bugfixing
|
||||||
|14/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:
|
if not alert:
|
||||||
return json_error("Could not find alert."), 404
|
return json_error("Could not find alert."), 404
|
||||||
if alert.repository not in [a.repository for a in user.authorizations] + user.owner_of:
|
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":
|
if request.method == "GET":
|
||||||
return json_success(alert.to_json()), 200
|
return json_success(alert.to_json()), 200
|
||||||
if alert.repository not in user.owner_of:
|
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 request.method == "PATCH":
|
||||||
if 'name' in request.json:
|
if 'name' in request.json:
|
||||||
alert.name = request.json['name']
|
alert.name = request.json['name']
|
||||||
|
|
|
@ -5,10 +5,9 @@ import nltk
|
||||||
from nltk.corpus import stopwords
|
from nltk.corpus import stopwords
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ext.init_app(app=app)
|
ext.init_app(app=app)
|
||||||
|
|
||||||
|
|
||||||
def authenticate():
|
def authenticate():
|
||||||
c_k = "GEhtSyP9e98mzFeiOCSW0lvQX"
|
c_k = "GEhtSyP9e98mzFeiOCSW0lvQX"
|
||||||
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
||||||
|
@ -20,6 +19,7 @@ def authenticate():
|
||||||
api = tw.API(auth, wait_on_rate_limit=True)
|
api = tw.API(auth, wait_on_rate_limit=True)
|
||||||
return api
|
return api
|
||||||
|
|
||||||
|
|
||||||
def start_exploring():
|
def start_exploring():
|
||||||
api = authenticate()
|
api = authenticate()
|
||||||
most_popular_hashtags = dict()
|
most_popular_hashtags = dict()
|
||||||
|
@ -49,7 +49,7 @@ def start_exploring():
|
||||||
print(dict(sorted(most_popular_words.items(), key=lambda item: item[1])))
|
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()
|
repo = Repository.query.filter_by(id=repository_id).first()
|
||||||
conditions = [use.condition for use in repo.uses]
|
conditions = [use.condition for use in repo.uses]
|
||||||
conditions_type = dict()
|
conditions_type = dict()
|
||||||
|
@ -64,22 +64,6 @@ def search_repo_conditions(repository_id):
|
||||||
print(types, ":", conditions_type[types])
|
print(types, ":", conditions_type[types])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
search_repo_conditions()
|
|
||||||
#print(stopwords.words('italian'))
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
ext.create_all(app=app)
|
ext.create_all(app=app)
|
||||||
#start_exploring()
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
from nest_backend.app import app
|
from nest_backend.app import app
|
||||||
from nest_backend.database import *
|
from nest_backend.database import *
|
||||||
import tweepy as tw
|
import tweepy as tw
|
||||||
import nltk
|
|
||||||
from nltk.corpus import stopwords
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
ext.init_app(app=app)
|
ext.init_app(app=app)
|
||||||
|
@ -13,31 +11,30 @@ def authenticate():
|
||||||
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
c_s = "438cmYrl5xqaX2W7I2Bf5A9nF1pN5VtM9f77WYQnAXg1BwKJ27"
|
||||||
a_t = "1380217745732689921-8gCfr8Zx9YHKvo4OVP3HAr3kfMRkgz"
|
a_t = "1380217745732689921-8gCfr8Zx9YHKvo4OVP3HAr3kfMRkgz"
|
||||||
a_t_s = "jGOlgTs1i1itGMxDxAqFEDnv7QAui772n9hGxeSIKcwzS"
|
a_t_s = "jGOlgTs1i1itGMxDxAqFEDnv7QAui772n9hGxeSIKcwzS"
|
||||||
b_t = "AAAAAAAAAAAAAAAAAAAAANjpOQEAAAAAYFKrqByk6WTMEwIYUJLrVnPeQuo%3DJUJUW2mFq9n20A7BtIRMT24PPFg1NXVtetrfp0tH1NkDFFNGo5"
|
|
||||||
|
|
||||||
auth = tw.OAuthHandler(c_k, c_s)
|
auth = tw.OAuthHandler(c_k, c_s)
|
||||||
auth.set_access_token(a_t, a_t_s)
|
auth.set_access_token(a_t, a_t_s)
|
||||||
api = tw.API(auth, wait_on_rate_limit=True)
|
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
|
return api
|
||||||
|
|
||||||
|
|
||||||
def search_repo_conditions(repository_id):
|
def search_repo_conditions(repository_id):
|
||||||
api = authenticate()
|
api = authenticate()
|
||||||
geocode="44.3591600,11.7132000,20km"
|
geocode = "44.3591600,11.7132000,20km"
|
||||||
|
|
||||||
repo = Repository.query.filter_by(id=repository_id).first()
|
repo = Repository.query.filter_by(id=repository_id).first()
|
||||||
if(repo == None):
|
if repo is None:
|
||||||
print("Non esiste una repository con questo id")
|
print("Non esiste una repository con questo id")
|
||||||
return False
|
return False
|
||||||
conditions = [use for use in repo.conditions]
|
conditions = [use for use in repo.conditions]
|
||||||
evaluation_mode = repo.evaluation_mode
|
evaluation_mode = repo.evaluation_mode
|
||||||
conditions_type = dict()
|
conditions_type = dict()
|
||||||
#Dividing condition into condition types
|
# Dividing condition into condition types
|
||||||
for condition in conditions:
|
for condition in conditions:
|
||||||
# print(condition.id)
|
# print(condition.id)
|
||||||
if condition.type not in conditions_type.keys():
|
if condition.type not in conditions_type.keys():
|
||||||
conditions_type[condition.type]=[condition.content]
|
conditions_type[condition.type] = [condition.content]
|
||||||
else:
|
else:
|
||||||
conditions_type[condition.type].append(condition.content)
|
conditions_type[condition.type].append(condition.content)
|
||||||
|
|
||||||
|
@ -55,15 +52,15 @@ def search_repo_conditions(repository_id):
|
||||||
queryString += ("#" + condition_content + " " + queryConjunction + " ")
|
queryString += ("#" + condition_content + " " + queryConjunction + " ")
|
||||||
if ConditionType.coordinates in conditions_type.keys():
|
if ConditionType.coordinates in conditions_type.keys():
|
||||||
if evaluation_mode == ConditionMode.all_and:
|
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_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:
|
else:
|
||||||
return None
|
return None
|
||||||
elif evaluation_mode == ConditionMode.all_or:
|
elif evaluation_mode == ConditionMode.all_or:
|
||||||
for condition_content in conditions_type[ConditionType.coordinates]:
|
for condition_content in conditions_type[ConditionType.coordinates]:
|
||||||
coordinates_tweet = condition_content.split()
|
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)
|
print(coordinates_string)
|
||||||
for tweet in tw.Cursor(method=api.search, geocode=coordinates_string).items(10):
|
for tweet in tw.Cursor(method=api.search, geocode=coordinates_string).items(10):
|
||||||
tweetsFound.append(tweet)
|
tweetsFound.append(tweet)
|
||||||
|
@ -72,23 +69,25 @@ def search_repo_conditions(repository_id):
|
||||||
queryString += ("from:" + condition_content + " " + queryConjunction + " ")
|
queryString += ("from:" + condition_content + " " + queryConjunction + " ")
|
||||||
if ConditionType.time in conditions_type.keys():
|
if ConditionType.time in conditions_type.keys():
|
||||||
for condition_content in conditions_type[ConditionType.time]:
|
for condition_content in conditions_type[ConditionType.time]:
|
||||||
if condition_content[0]=='<':
|
if condition_content[0] == '<':
|
||||||
queryString += ("until:" + condition_content + " " + queryConjunction + " ")
|
queryString += ("until:" + condition_content + " " + queryConjunction + " ")
|
||||||
elif condition_content[0]=='>':
|
elif condition_content[0] == '>':
|
||||||
queryString += ("since:" + condition_content + " " + queryConjunction + " ")
|
queryString += ("since:" + condition_content + " " + queryConjunction + " ")
|
||||||
queryString = queryString[:-len(queryConjunction)-1]
|
queryString = queryString[:-len(queryConjunction) - 1]
|
||||||
print(queryString)
|
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):
|
for tweet in tw.Cursor(method=api.search, q=queryString).items(10):
|
||||||
tweetsFound.append(tweet)
|
tweetsFound.append(tweet)
|
||||||
print(tweet.user.name + ' : ' + tweet.text)
|
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):
|
for tweet in tw.Cursor(method=api.search, q=queryString, geocode=coordinates_string).items(10):
|
||||||
tweetsFound.append(tweet)
|
tweetsFound.append(tweet)
|
||||||
print(tweet.user.name + ' : ' + tweet.text)
|
print(tweet.user.name + ' : ' + tweet.text)
|
||||||
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():
|
||||||
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)
|
ext.session.add(tweetDB)
|
||||||
if not Composed.query.filter_by(snowflake=str(tweet.id), rid=repository_id).all():
|
if not Composed.query.filter_by(snowflake=str(tweet.id), rid=repository_id).all():
|
||||||
composed = Composed(rid=repository_id, snowflake=tweet.id)
|
composed = Composed(rid=repository_id, snowflake=tweet.id)
|
||||||
|
@ -98,7 +97,5 @@ def search_repo_conditions(repository_id):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
search_repo_conditions(16)
|
search_repo_conditions(16)
|
||||||
#print(stopwords.words('italian'))
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
ext.create_all(app=app)
|
ext.create_all(app=app)
|
||||||
#start_exploring()
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import PageDashboard from "./routes/PageDashboard"
|
||||||
import PageRoot from "./routes/PageRoot"
|
import PageRoot from "./routes/PageRoot"
|
||||||
import PageEdit from "./routes/PageEdit"
|
import PageEdit from "./routes/PageEdit"
|
||||||
import PageUsers from "./routes/PageUsers"
|
import PageUsers from "./routes/PageUsers"
|
||||||
|
import PageRepository from "./routes/PageRepository"
|
||||||
|
|
||||||
|
|
||||||
export default function PageSwitcher({ ...props }) {
|
export default function PageSwitcher({ ...props }) {
|
||||||
|
@ -16,6 +17,9 @@ export default function PageSwitcher({ ...props }) {
|
||||||
<Route path={"/repositories/:id/edit"} exact={true}>
|
<Route path={"/repositories/:id/edit"} exact={true}>
|
||||||
<PageEdit/>
|
<PageEdit/>
|
||||||
</Route>
|
</Route>
|
||||||
|
<Route path={"/repositories/:id"} exact={true}>
|
||||||
|
<PageRepository/>
|
||||||
|
</Route>
|
||||||
<Route path={"/login"} exact={true}>
|
<Route path={"/login"} exact={true}>
|
||||||
<PageLogin/>
|
<PageLogin/>
|
||||||
</Route>
|
</Route>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.Left {
|
.Left {
|
||||||
width: 250px;
|
width: 280px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
|
|
||||||
display: grid;
|
display: grid;
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.Right {
|
.Right {
|
||||||
width: 250px;
|
width: 280px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ export default function BoxRepositoriesActive({
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BoxFullScrollable header={"Le tue repository attive"} {...props}>
|
<BoxFullScrollable header={"Repository attivi"} {...props}>
|
||||||
{contents}
|
{contents}
|
||||||
</BoxFullScrollable>
|
</BoxFullScrollable>
|
||||||
)
|
)
|
||||||
|
|
|
@ -50,7 +50,7 @@ export default function BoxRepositoriesArchived({
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BoxFullScrollable header={"Le tue repository archiviate"} {...props}>
|
<BoxFullScrollable header={"Repository archiviati"} {...props}>
|
||||||
{contents}
|
{contents}
|
||||||
</BoxFullScrollable>
|
</BoxFullScrollable>
|
||||||
)
|
)
|
||||||
|
|
|
@ -41,7 +41,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
||||||
save()
|
save()
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<FormLabel htmlFor={"repo-name"} text={"Nome della repository"}>
|
<FormLabel htmlFor={"repo-name"} text={"Nome repository"}>
|
||||||
<InputWithIcon
|
<InputWithIcon
|
||||||
id={"repo-name"}
|
id={"repo-name"}
|
||||||
icon={faFolder}
|
icon={faFolder}
|
||||||
|
@ -49,14 +49,14 @@ export default function BoxRepositoryCreate({ ...props }) {
|
||||||
onChange={e => setName(e.target.value)}
|
onChange={e => setName(e.target.value)}
|
||||||
/>
|
/>
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
<FormLabel htmlFor={"filter-mode"} text={"Aggiutngi tweet se soddisfano:"}>
|
<FormLabel htmlFor={"filter-mode"} text={"Richiedi"}>
|
||||||
<label>
|
<label>
|
||||||
<Radio
|
<Radio
|
||||||
name={"filter-mode"}
|
name={"filter-mode"}
|
||||||
onChange={() => setEvaluationMode(0)}
|
onChange={() => setEvaluationMode(0)}
|
||||||
checked={evaluationMode === 0}
|
checked={evaluationMode === 0}
|
||||||
/>
|
/>
|
||||||
Un filtro
|
Almeno una cond.
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
|
@ -65,7 +65,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
||||||
onChange={() => setEvaluationMode(1)}
|
onChange={() => setEvaluationMode(1)}
|
||||||
checked={evaluationMode === 1}
|
checked={evaluationMode === 1}
|
||||||
/>
|
/>
|
||||||
Tutti i filtri
|
Tutte le cond.
|
||||||
</label>
|
</label>
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
{error ?
|
{error ?
|
||||||
|
@ -81,7 +81,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
||||||
color={"Red"}
|
color={"Red"}
|
||||||
onClick={() => revert()}
|
onClick={() => revert()}
|
||||||
>
|
>
|
||||||
Rollback edits
|
Annulla modifiche
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
style={{ "gridColumn": "2" }}
|
style={{ "gridColumn": "2" }}
|
||||||
|
@ -89,7 +89,7 @@ export default function BoxRepositoryCreate({ ...props }) {
|
||||||
color={"Green"}
|
color={"Green"}
|
||||||
onClick={_ => goToOnSuccess(save, history, "/repositories")()}
|
onClick={_ => goToOnSuccess(save, history, "/repositories")()}
|
||||||
>
|
>
|
||||||
Save changes
|
Salva modifiche
|
||||||
</Button>
|
</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 {}
|
return {}
|
||||||
},
|
},
|
||||||
[bv.apiRequest, bv.refreshResource],
|
[bv],
|
||||||
)
|
)
|
||||||
|
|
||||||
return (
|
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": "^5.2.0",
|
||||||
"react-router-dom": "^5.2.0",
|
"react-router-dom": "^5.2.0",
|
||||||
"react-scripts": "4.0.3",
|
"react-scripts": "4.0.3",
|
||||||
|
"react-wordcloud": "github:Steffo99/react-wordcloud",
|
||||||
"serve": "^11.3.2",
|
"serve": "^11.3.2",
|
||||||
"web-vitals": "^1.1.1"
|
"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]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.0.0"
|
version = "7.1.2"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorama"
|
name = "colorama"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
description = "Cross-platform colored terminal text."
|
description = "Cross-platform colored terminal text."
|
||||||
category = "main"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
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]]
|
[[package]]
|
||||||
name = "flask"
|
name = "flask"
|
||||||
version = "1.1.2"
|
version = "1.1.4"
|
||||||
description = "A simple framework for building complex web applications."
|
description = "A simple framework for building complex web applications."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
click = ">=5.1"
|
click = ">=5.1,<8.0"
|
||||||
itsdangerous = ">=0.24"
|
itsdangerous = ">=0.24,<2.0"
|
||||||
Jinja2 = ">=2.10.1"
|
Jinja2 = ">=2.10.1,<3.0"
|
||||||
Werkzeug = ">=0.15"
|
Werkzeug = ">=0.15,<2.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
|
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
|
||||||
|
@ -276,25 +273,25 @@ six = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itsdangerous"
|
name = "itsdangerous"
|
||||||
version = "2.0.0"
|
version = "1.1.0"
|
||||||
description = "Safely pass data to untrusted environments and back."
|
description = "Various helpers to pass data to untrusted environments and back."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jinja2"
|
name = "jinja2"
|
||||||
version = "3.0.0"
|
version = "2.11.3"
|
||||||
description = "A very fast and expressive template engine."
|
description = "A very fast and expressive template engine."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
MarkupSafe = ">=2.0.0rc2"
|
MarkupSafe = ">=0.23"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
i18n = ["Babel (>=2.7)"]
|
i18n = ["Babel (>=0.8)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "joblib"
|
name = "joblib"
|
||||||
|
@ -498,14 +495,6 @@ category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
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]]
|
[[package]]
|
||||||
name = "pytest"
|
name = "pytest"
|
||||||
version = "6.2.4"
|
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"
|
certifi = ">=2017.4.17"
|
||||||
chardet = ">=3.0.2,<5"
|
chardet = ">=3.0.2,<5"
|
||||||
idna = ">=2.5,<3"
|
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"
|
urllib3 = ">=1.21.1,<1.27"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
@ -772,21 +760,28 @@ telegram = ["requests"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tweepy"
|
name = "tweepy"
|
||||||
version = "3.10.0"
|
version = "4.0.0a0"
|
||||||
description = "Twitter library for Python"
|
description = "Twitter library for Python"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=3.6"
|
||||||
|
develop = false
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
requests = {version = ">=2.11.1", extras = ["socks"]}
|
requests = ">=2.11.1,<3"
|
||||||
requests-oauthlib = ">=0.7.0"
|
requests-oauthlib = ">=1.0.0,<2"
|
||||||
six = ">=1.10.0"
|
|
||||||
|
|
||||||
[package.extras]
|
[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)"]
|
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]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "1.26.4"
|
version = "1.26.4"
|
||||||
|
@ -802,19 +797,20 @@ brotli = ["brotlipy (>=0.6.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "werkzeug"
|
name = "werkzeug"
|
||||||
version = "2.0.0"
|
version = "1.0.1"
|
||||||
description = "The comprehensive WSGI web application library."
|
description = "The comprehensive WSGI web application library."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"]
|
||||||
watchdog = ["watchdog"]
|
watchdog = ["watchdog"]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.8.5"
|
python-versions = "^3.8.5"
|
||||||
content-hash = "1ac47344a839aae5a929d7ce9914f62c76c1a591bc88dabb819fe15814f40031"
|
content-hash = "ce716a14534bfcf41e82944d3eabf4cbeb743303f2c1a21e8360f802d89598d1"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
alabaster = [
|
alabaster = [
|
||||||
|
@ -898,8 +894,8 @@ chardet = [
|
||||||
{file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
|
{file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
|
||||||
]
|
]
|
||||||
click = [
|
click = [
|
||||||
{file = "click-8.0.0-py3-none-any.whl", hash = "sha256:e90e62ced43dc8105fb9a26d62f0d9340b5c8db053a814e25d95c19873ae87db"},
|
{file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
|
||||||
{file = "click-8.0.0.tar.gz", hash = "sha256:7d8c289ee437bcb0316820ccee14aefcb056e58d31830ecab8e47eda6540e136"},
|
{file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
|
||||||
]
|
]
|
||||||
colorama = [
|
colorama = [
|
||||||
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
|
{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"},
|
{file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
|
||||||
]
|
]
|
||||||
flask = [
|
flask = [
|
||||||
{file = "Flask-1.1.2-py2.py3-none-any.whl", hash = "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"},
|
{file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"},
|
||||||
{file = "Flask-1.1.2.tar.gz", hash = "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"},
|
{file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"},
|
||||||
]
|
]
|
||||||
flask-cors = [
|
flask-cors = [
|
||||||
{file = "Flask-Cors-3.0.10.tar.gz", hash = "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de"},
|
{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"},
|
{file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"},
|
||||||
]
|
]
|
||||||
itsdangerous = [
|
itsdangerous = [
|
||||||
{file = "itsdangerous-2.0.0-py3-none-any.whl", hash = "sha256:e2cb4ae918f07ab2a2f9a91dec2695bd1f25a19d31861a70015ad537ccb5e807"},
|
{file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"},
|
||||||
{file = "itsdangerous-2.0.0.tar.gz", hash = "sha256:99b1053ccce68066dfc0b4465ef8779027e6d577377c8270e21a3d6289cac111"},
|
{file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"},
|
||||||
]
|
]
|
||||||
jinja2 = [
|
jinja2 = [
|
||||||
{file = "Jinja2-3.0.0-py3-none-any.whl", hash = "sha256:2f2de5285cf37f33d33ecd4a9080b75c87cd0c1994d5a9c6df17131ea1f049c6"},
|
{file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
|
||||||
{file = "Jinja2-3.0.0.tar.gz", hash = "sha256:ea8d7dd814ce9df6de6a761ec7f1cac98afe305b8cdc4aaae4e114b8d8ce24c5"},
|
{file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
|
||||||
]
|
]
|
||||||
joblib = [
|
joblib = [
|
||||||
{file = "joblib-1.0.1-py3-none-any.whl", hash = "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5"},
|
{file = "joblib-1.0.1-py3-none-any.whl", hash = "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5"},
|
||||||
|
@ -1141,11 +1137,6 @@ pyparsing = [
|
||||||
pyrsistent = [
|
pyrsistent = [
|
||||||
{file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
|
{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 = [
|
pytest = [
|
||||||
{file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
|
{file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
|
||||||
{file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
|
{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-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"},
|
||||||
{file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"},
|
{file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"},
|
||||||
]
|
]
|
||||||
tweepy = [
|
tweepy = []
|
||||||
{file = "tweepy-3.10.0-py2.py3-none-any.whl", hash = "sha256:5e22003441a11f6f4c2ea4d05ec5532f541e9f5d874c3908270f0c28e649b53a"},
|
|
||||||
{file = "tweepy-3.10.0.tar.gz", hash = "sha256:76e6954b806ca470dda877f57db8792fff06a0beba0ed43efc3805771e39f06a"},
|
|
||||||
]
|
|
||||||
urllib3 = [
|
urllib3 = [
|
||||||
{file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
|
{file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
|
||||||
{file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"},
|
{file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"},
|
||||||
]
|
]
|
||||||
werkzeug = [
|
werkzeug = [
|
||||||
{file = "Werkzeug-2.0.0-py3-none-any.whl", hash = "sha256:64c02f6495ba01eddd6625b3675f357cd358a73f1e38458a56ad86c5baa30b53"},
|
{file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"},
|
||||||
{file = "Werkzeug-2.0.0.tar.gz", hash = "sha256:3389bbfe6d40c6dd25e6d3f974155163c8b3de5bbda6a89342d4ab93fae80ba0"},
|
{file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"},
|
||||||
]
|
]
|
||||||
|
|
|
@ -30,9 +30,9 @@ apispec-webframeworks = "^0.5.2"
|
||||||
marshmallow = "^3.11.1"
|
marshmallow = "^3.11.1"
|
||||||
openapi-spec-validator = "^0.3.0"
|
openapi-spec-validator = "^0.3.0"
|
||||||
flask-swagger-ui = "^3.36.0"
|
flask-swagger-ui = "^3.36.0"
|
||||||
tweepy = "^3.10.0"
|
|
||||||
nltk = "^3.6.2"
|
nltk = "^3.6.2"
|
||||||
gunicorn = "^20.1.0"
|
gunicorn = "^20.1.0"
|
||||||
|
tweepy = {git = "https://github.com/tweepy/tweepy.git"}
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
pytest = "^6.2.3"
|
pytest = "^6.2.3"
|
||||||
|
|
Loading…
Reference in a new issue