From bd2c8aa83306e1eb190eba831614950ecfc2469c Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sun, 19 May 2024 21:02:29 +1000 Subject: [PATCH 01/15] sys arch --- docs/SystemArchitecture.drawio | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/SystemArchitecture.drawio diff --git a/docs/SystemArchitecture.drawio b/docs/SystemArchitecture.drawio new file mode 100644 index 0000000..ad88e98 --- /dev/null +++ b/docs/SystemArchitecture.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file From ad433f2d4be71b09822544a713d972e38c9f1c7e Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sun, 19 May 2024 21:51:31 +1000 Subject: [PATCH 02/15] bom harvester diagram --- docs/BOMHarvester.drawio | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/BOMHarvester.drawio diff --git a/docs/BOMHarvester.drawio b/docs/BOMHarvester.drawio new file mode 100644 index 0000000..b348b9b --- /dev/null +++ b/docs/BOMHarvester.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file From 5d39f328d61914afef114d2134a4b1f9148a7135 Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sun, 19 May 2024 22:07:19 +1000 Subject: [PATCH 03/15] mastodon harvester diagram --- docs/MastodonHarvester.drawio | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/MastodonHarvester.drawio diff --git a/docs/MastodonHarvester.drawio b/docs/MastodonHarvester.drawio new file mode 100644 index 0000000..f0be185 --- /dev/null +++ b/docs/MastodonHarvester.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file From a3f693b049daac1637e57c3879e7e14c21a04cac Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sun, 19 May 2024 23:34:39 +1000 Subject: [PATCH 04/15] Update MastodonHarvester.drawio --- docs/MastodonHarvester.drawio | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MastodonHarvester.drawio b/docs/MastodonHarvester.drawio index f0be185..4ce18c7 100644 --- a/docs/MastodonHarvester.drawio +++ b/docs/MastodonHarvester.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file From b46e172b8a5fc4db6f747566cbfda0a429d57628 Mon Sep 17 00:00:00 2001 From: Ojaswi Dheer Date: Mon, 20 May 2024 17:15:02 +1000 Subject: [PATCH 05/15] added insights to notebooks --- ...Air Quality vs Lung Disease Analysis.ipynb | 42 ++++++++++++++++++- frontend/Weather vs Sentiment Analysis.ipynb | 38 +++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/frontend/Air Quality vs Lung Disease Analysis.ipynb b/frontend/Air Quality vs Lung Disease Analysis.ipynb index 82c233c..be73ec5 100644 --- a/frontend/Air Quality vs Lung Disease Analysis.ipynb +++ b/frontend/Air Quality vs Lung Disease Analysis.ipynb @@ -1722,6 +1722,28 @@ "map_melbourne\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insights from Spatial Analysis:\n", + "\n", + "Here are some insights into why this could be the case:\n", + "\n", + "- **Urbanization and Population Density:**\n", + "Greater Melbourne tends to have higher population density and more industrial activities compared to other regions of Victoria. These factors contribute to higher levels of PM2.5 emissions.\n", + "Suburbs within Greater Melbourne such as Alphington, Box Hill, Brighton, Campbellfield, Footscray, Melbourne CBD, and Melton consistently show higher PM2.5 levels compared to suburbs in the rest of Victoria.\n", + "\n", + "- **Industrial Activities and Traffic:**\n", + "Areas with more industrial activities and higher traffic tend to have higher levels of PM2.5 due to emissions from vehicles, factories, and other sources.\n", + "Suburbs like Melbourne CBD, Campbellfield, and Footscray, being commercial and industrial centers, exhibit higher PM2.5 levels.\n", + "\n", + "- **Geographical Factors:**\n", + "Geography and weather patterns can also influence PM2.5 levels. Coastal areas might experience lower levels due to cleaner air coming in from the ocean.\n", + "Suburbs like Bendigo, Geelong South, Churchill, Moe, Morwell East, Morwell South, Newborough, and Traralgon, being located outside Greater Melbourne, tend to have lower PM2.5 levels.\n", + "\\end{enumerate}" + ] + }, { "cell_type": "markdown", "metadata": { @@ -3113,6 +3135,24 @@ "\n", "plt.show()" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the correlation analysis conducted between PM2.5 levels and lung diseases, and the comparison of lung disease categories across regions, the following conclusions can be drawn:\n", + "\n", + "1. **Positive Correlation with Lung Cancer, All Cancer, and COPD Mortality:** In both Greater Melbourne and the rest of Victoria, there is a positive correlation between PM2.5 levels and mortality rates related to lung cancer, all cancer, and Chronic Obstructive Pulmonary Disease (COPD). As PM2.5 levels increase, there is a corresponding increase in mortality rates for these diseases.\n", + "\n", + "2. **Higher Risk for Foreigner Populations:** Additionally, the data indicates that foreigner populations are particularly susceptible. PM2.5 levels show a positive correlation with both asthma and COPD mortality rates in foreigners, suggesting a higher risk for this demographic.\n", + "\n", + "3. **Regional Livability:** Given the established link between elevated PM2.5 levels and various lung diseases, it is evident that residing in areas with lower PM2.5 levels may reduce the risk of these health issues. Therefore, from a public health perspective, residing in regions outside of Greater Melbourne, with comparatively better air quality, may be beneficial for reducing the risk of lung diseases associated with elevated PM2.5 levels.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { @@ -3131,7 +3171,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.6" } }, "nbformat": 4, diff --git a/frontend/Weather vs Sentiment Analysis.ipynb b/frontend/Weather vs Sentiment Analysis.ipynb index f2f6da2..cbb7c8d 100644 --- a/frontend/Weather vs Sentiment Analysis.ipynb +++ b/frontend/Weather vs Sentiment Analysis.ipynb @@ -231,6 +231,31 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insights from Historical Analysis:\n", + "\n", + "From the graph, we can make the following conclusions:\n", + "\n", + "1. **General Observations:** The total rainfall ranged from 50.36 mm in September to 102.67 mm in January. Average maximum temperatures varied from 18.02°C in July to 28.61°C in January, while the scaled total sentiment ranged from 117.90 in June to 175.38 in May.\n", + "\n", + "2. **Seasonal Patterns:**\n", + "\n", + " - **Summer (December to February):**\n", + " During the summer months, average temperatures range from 27.25°C to 28.61°C, accompanied by moderate to high rainfall, varying between 83.79 mm and 102.67 mm. This period coincides with the highest sentiment values in January and February. It appears that the combination of warm weather and the holiday season contributes significantly to an elevated public mood, as people engage in outdoor activities and vacations.\n", + "\n", + " - **Autumn (March to May):**\n", + " In autumn, temperatures gradually decrease from 26.61°C in March to 20.88°C in May, with a decrease in average rainfall. Despite this trend, sentiment values remain high, especially in May. This sustained positive sentiment could likely be due to the generally mild and pleasant weather conditions, which encourage social interactions.\n", + "\n", + " - **Winter (June to August):**\n", + " Winter is characterized by the lowest temperatures, ranging from 18.02°C to 19.08°C, and lower rainfall, between 54.29 mm and 56.74 mm. During this season, sentiment values drop to their lowest, particularly in June. This could be due to colder weather and shorter daylight hours, which seem to contribute to reduced outdoor activities and social engagements, leading to a lower overall sentiment during these months.\n", + "\n", + " - **Spring (September to November):**\n", + " Spring marks a period of rising temperatures, from 21.34°C in September to 25.44°C in November, along with increasing levels of rainfall. During this season, sentiment values are moderately high. This implies that improving weather conditions enhance public emotions, positively impacting overall sentiment.\n" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -280,6 +305,19 @@ "plt.show()\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insights from Correlation:\n", + "- A strong positive correlation (0.87) exists between total rainfall and mean maximum temperature, suggesting that higher temperatures are often accompanied by increased rainfall.\n", + "- A moderate positive correlation (0.44) between total sentiment and total rainfall indicates that more rainfall is somewhat associated with more positive sentiments.\n", + "- A positive correlation (0.58) between total sentiment and mean maximum temperature implies that higher temperatures are strongly linked to more positive sentiments.\n", + "\n", + "\n", + "These insights reveal a noticeable positive correlation between warmer temperatures and higher sentiment scores. Warmer weather likely encourages outdoor activities, social interactions, and general well-being, leading to more positive tweets. Additionally, months with major holidays and vacation periods show higher sentiment scores, suggesting the influence of social and cultural factors. Conversely, extreme weather conditions, particularly cold temperatures and high rainfall, tend to lower sentiment scores, indicating that harsh weather might negatively impact public mood and social media expressions." + ] + }, { "cell_type": "code", "execution_count": 6, From 913fe5beda3c420999bba1b7b084f39d3c9dbf55 Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Mon, 20 May 2024 22:20:21 +1000 Subject: [PATCH 06/15] testing process --- docs/TestingProcess.drawio | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/TestingProcess.drawio diff --git a/docs/TestingProcess.drawio b/docs/TestingProcess.drawio new file mode 100644 index 0000000..6a461e5 --- /dev/null +++ b/docs/TestingProcess.drawio @@ -0,0 +1 @@ +7Vlbc9o4FP41zGQfYGzLxvAYCEk7TTrptt2d6UtH2MJWYluuLBPor++RLV+EoYRCkhl2kwfbn46OLuc7ny700DRe3XCchnfMJ1HPMvxVD131LMu0bAseElmXyMiwSyDg1FdGDfCZ/iQKNBSaU59kmqFgLBI01UGPJQnxhIZhztmTbrZgkd5qigPSAT57OOqi/1JfhGoUltvg7wgNwqplczguS2JcGauRZCH22VMLQrMemnLGRPkWr6YkkpNXzUtZ73pHad0xThLxnArLy3+8Tw/4/Zevi48PSf/qm/HjQ3+o+ibW1YCJD+NXn4yLkAUswdGsQSec5YlPpFcDvhqbW8ZSAE0AH4gQaxVMnAsGUCjiSJVmgrPHejolUvZCNr1zcArKWM49ZTVFjjW3P6yseLJI4+9j964/61vDem6BlITFRPA1VOQkwoIu9QawYkdQ29VV7xmFpi1DMdm2VRgVjy1k6C4E5gERqlYTBnhpdaOBiuAcECjFtyWOcjWEC/MvAL5mhBdse4QskQwYRjBhkzmAw0C+3eeF87/Jj5xkolsO/WWFA5oAhGMI4SSZZ2kdlQ1u3OI5pLgWTxzRIIF3D4IFvUGTJeGCQg5dqoKY+n5JHZLRn3he+JPkSeV0FRPoTHrOVd2mdEBWvS0Jrio3adXmyG6Kd/mgvBsDZzRytNAqgTqSMH3daR8h3QNbLDJyLFV+kwEaVzqRzB6J8MJ2FAifLUkZjCJHK7WSBj7OwjrhO4k8ZRGDqF8lLJExjiRB7llGBWVbWXG7YTBnQrB4C22E1JMuuxY0iqo2exZyDPlfdjmVw4tXgVyLBnHmYTKAoeUJGeSQJ98DkK50p7R0SLeTNLaJBuP2n63F2qwWr6dmxXAUFLYWC+TuJpVGikPFwtpPAJL4l3J5bOLWiquu8LpcuwfIdXcC98xIhR2Ze9ZQF2s02hDrchXpiHXHkePscfTCqo86gbwrdNqYcJxA/p6FQFu/zbW+MRibrqUn2ElYYo50p/YLCPTWAZvd/Lxw5GL+fiHbLxx4IfEes2L6MnhM5d6VYJFzsnWVnys+GFTWiQmw0pdf7cX9/LliDCzXGb8AVZC+mCPztahi/6/k2sx3tt3PVfK33r87nUBe1+l8TmJuv5GYVyn56mI+OihDGdg9P0NtQKDyNY2aHTfmYsNZgbVsoIY6epuoKm4D+0/4Xs6XRZcOOZu/lUTYoxNt9v5UIiAceN0yU2m2u8Pu9g7v7Je7vV8NkcsenJTW4+4WxZJblBsq3uVzeLn05PFN7jZ4vuXmYHODkidUDkmQTE6NkWc0CeB5vxbFrcQ5SN9on/QZhuvqkT+N9Gk+6+P/K+xjjS5J0DEkgXo3OeY+xUlrC3yOl1J7ubJxo3ASopgbRHmJG6ntROmeYy9sSZQp80l1aElJcZPJyZKSJ3l62WQHTuSRBqcpZ8ui/L/IC8d09GNr/zTcGB/PBfhsfs0ozZvfhNDsFw== \ No newline at end of file From 733e87eab341a42c1ca410940b10e1e7d2b9fb49 Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Fri, 17 May 2024 23:22:47 +1000 Subject: [PATCH 07/15] pytest cicd --- .github/workflows/python-tests.yml | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/python-tests.yml diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml new file mode 100644 index 0000000..eed0fb3 --- /dev/null +++ b/.github/workflows/python-tests.yml @@ -0,0 +1,34 @@ +name: Python Tests + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + python-version: [3.10] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + + - name: Run tests + run: | + pytest From 66fc540e34c7ade68d9d4d672fa0fd5db4c299fc Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Fri, 17 May 2024 23:24:24 +1000 Subject: [PATCH 08/15] fix number --- .github/workflows/python-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index eed0fb3..731f2cf 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - python-version: [3.10] + python-version: ['3.10'] steps: - name: Checkout repository From cb035ee1af80389235a55c2c4d95c201b6f9b1fb Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Fri, 17 May 2024 23:25:52 +1000 Subject: [PATCH 09/15] file --- .github/workflows/python-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 731f2cf..a797f88 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -31,4 +31,4 @@ jobs: - name: Run tests run: | - pytest + pytest test/fission_tests.py From ba42edacc4fc960ff71bb9a1834dc58304a3b109 Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Fri, 17 May 2024 23:33:17 +1000 Subject: [PATCH 10/15] update pip requirements --- requirements.txt | 163 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) diff --git a/requirements.txt b/requirements.txt index 6e2ab18..c3d2eb0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,3 +27,166 @@ tomli==2.0.1 urllib3==2.2.1 Werkzeug==3.0.3 zipp==3.18.1 +anyio==4.3.0 +argon2-cffi==23.1.0 +argon2-cffi-bindings==21.2.0 +arrow==1.3.0 +asttokens==2.4.1 +async-lru==2.0.4 +attrs==23.2.0 +autopage==0.5.2 +Babel==2.15.0 +beautifulsoup4==4.12.3 +bleach==6.1.0 +blinker==1.8.2 +blurhash==1.1.4 +branca==0.7.2 +certifi==2024.2.2 +cffi==1.16.0 +charset-normalizer==3.3.2 +click==8.1.7 +cliff==4.6.0 +cmd2==2.4.3 +comm==0.2.2 +contourpy==1.2.1 +cryptography==42.0.5 +cycler==0.12.1 +debtcollector==3.0.0 +debugpy==1.8.1 +decorator==5.1.1 +defusedxml==0.7.1 +dogpile.cache==1.3.2 +elastic-transport==8.13.0 +elasticsearch8==8.13.1 +exceptiongroup==1.2.1 +executing==2.0.1 +fastjsonschema==2.19.1 +Flask==3.0.3 +folium==0.16.0 +fonttools==4.51.0 +fqdn==1.5.1 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +idna==3.7 +importlib_metadata==7.1.0 +iniconfig==2.0.0 +ipykernel==6.29.4 +ipython==8.24.0 +ipywidgets==8.1.2 +iso8601==2.1.0 +isoduration==20.11.0 +itsdangerous==2.2.0 +jedi==0.19.1 +Jinja2==3.1.4 +jmespath==1.0.1 +json5==0.9.25 +jsonpatch==1.33 +jsonpointer==2.4 +jsonschema==4.22.0 +jsonschema-specifications==2023.12.1 +jupyter==1.0.0 +jupyter-console==6.6.3 +jupyter-events==0.10.0 +jupyter-lsp==2.2.5 +jupyter_client==8.6.1 +jupyter_core==5.7.2 +jupyter_server==2.14.0 +jupyter_server_terminals==0.5.3 +jupyterlab==4.1.8 +jupyterlab_pygments==0.3.0 +jupyterlab_server==2.27.1 +jupyterlab_widgets==3.0.10 +keystoneauth1==5.6.0 +kiwisolver==1.4.5 +MarkupSafe==2.1.5 +Mastodon.py==1.8.1 +matplotlib==3.8.4 +matplotlib-inline==0.1.7 +mistune==3.0.2 +msgpack==1.0.8 +nbclient==0.10.0 +nbconvert==7.16.4 +nbformat==5.10.4 +nest-asyncio==1.6.0 +netaddr==1.2.1 +netifaces==0.11.0 +notebook==7.1.3 +notebook_shim==0.2.4 +numpy==1.26.4 +openstacksdk==3.1.0 +os-service-types==1.7.0 +osc-lib==3.0.1 +oslo.config==9.4.0 +oslo.i18n==6.3.0 +oslo.serialization==5.4.0 +oslo.utils==7.1.0 +overrides==7.7.0 +packaging==24.0 +pandas==2.2.2 +pandocfilters==1.5.1 +parso==0.8.4 +pbr==6.0.0 +pexpect==4.9.0 +pillow==10.3.0 +platformdirs==4.2.0 +pluggy==1.5.0 +prettytable==3.10.0 +prometheus_client==0.20.0 +prompt-toolkit==3.0.43 +psutil==5.9.8 +ptyprocess==0.7.0 +pure-eval==0.2.2 +pycparser==2.22 +Pygments==2.18.0 +pyparsing==3.1.2 +pyperclip==1.8.2 +pytest==8.2.0 +pytest-mock==3.14.0 +python-cinderclient==9.5.0 +python-dateutil==2.9.0.post0 +python-json-logger==2.0.7 +python-keystoneclient==5.4.0 +python-magic==0.4.27 +python-novaclient==18.6.0 +python-openstackclient==6.6.0 +pytz==2024.1 +PyYAML==6.0.1 +pyzmq==26.0.3 +qtconsole==5.5.2 +QtPy==2.4.1 +referencing==0.35.1 +requests==2.31.0 +requestsexceptions==1.4.0 +rfc3339-validator==0.1.4 +rfc3986==2.0.0 +rfc3986-validator==0.1.1 +rpds-py==0.18.1 +seaborn==0.13.2 +Send2Trash==1.8.3 +simplejson==3.19.2 +six==1.16.0 +sniffio==1.3.1 +soupsieve==2.5 +stack-data==0.6.3 +stevedore==5.2.0 +terminado==0.18.1 +tinycss2==1.3.0 +tomli==2.0.1 +tornado==6.4 +traitlets==5.14.3 +types-python-dateutil==2.9.0.20240316 +typing_extensions==4.11.0 +tzdata==2024.1 +uri-template==1.3.0 +urllib3==2.2.1 +vaderSentiment==3.3.2 +wcwidth==0.2.13 +webcolors==1.13 +webencodings==0.5.1 +websocket-client==1.8.0 +Werkzeug==3.0.3 +widgetsnbextension==4.0.10 +wrapt==1.16.0 +xyzservices==2024.4.0 +zipp==3.18.1 From 5bfde4f8da5ee7c40e2ce77ec7b6fbd74ad7fb59 Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sat, 18 May 2024 00:01:21 +1000 Subject: [PATCH 11/15] fix --- frontend/__pycache__/api.cpython-311.pyc | Bin 2413 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 frontend/__pycache__/api.cpython-311.pyc diff --git a/frontend/__pycache__/api.cpython-311.pyc b/frontend/__pycache__/api.cpython-311.pyc deleted file mode 100644 index a3165a7151a7080a037eb6399f43fef3944c9db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmb`IO-vg{6vtw8+PX>rrELNzDT+u?N-3>G(gU(&Ii3X!X4jb+ zCxF%xt#aVdORGv)LXo(XHi84k9(w4p$91&_v=UOJDpGSp;>M|O);6|jM2Xb#?BDP0 ze7za{-t5n@SOh^C4UNzI7C`7P;na#$H4gj0SVsgAoI}%^P_X<8;BqCCOV3JE+x z(*Y6$4H7(s66#Aacyi^!9OwDr{{EbmN$2J)#)pRnh6e6sYIBQT3Oq7Ahkt{tBMw?C z8^}f*=&4kcxad(W1ly8$yM+bqlwv{Q=6rs|%#uluweY|4~CkQ7Lm^_M)89XzWHD~o1 zYAxz7|9}}ig`|0UrFSfy%^5`JmQD>$v&JJs7Y%*-6i@R4(=!$^h7&0`9o4-h^Ndm%S;5k81zpWOWZKUXfKpyDKWn%i+NxI zmbXl1_*O~`Vd89bQI1A3!^!*1pe(tNeVpaV+Xh?URz69RqhEgU)zHAe)sIuRAgEb$ z(J=Xyt4Y|M2@8>AI-l*!FMDkeRZ47G1YHk;w!ji%8TJjxD%y{AIFUr@3JBEI(S0TC zMD)@}AW+Lnx2tqJO836j{+(SKEo-`~>8p45LYf=uEU`aBJx-|Sc}wT|%^z-lKl0V&IKIO@cn*0RPAAqbQ?#tWPv zJU*z`;O$9J2?k7Y69kftUjtK2WE*Aij?#=vQL?25Tmw~HZ`jgVa3#SyrbU^@#GWc; zK2)=8NaK1h@YK4u6K;+MFh5@#hY*Q0#J*^#Ntl2B-y=&lKQLx?yG zCN?25gT4ud*DCU8Modv*yt2_AX!1M%1V)wZcb$l+r;=SPP5lzuz2Llm9ndXngRVAs z3gerDZp-C0bzeIVDRFo6Yxm;i-ML?v-D{sY+IU$TceQax9e)vTcRKj*9qz6B@Gt6v zdG`UW*yVV^jTaoXKwBZwSMxvc3jV7Xb#n&b*UNxrT27E(yQt4fe!~TQ3i(Q%bs#@b z_jZD(k{>!jzWSf!hbMj7eZFZsoGtATB37ht3+WVc5#(Q}Qt^?llS5>!af_f^RXSsO)cPJD1ULsV<;b1;(k~FKF zh@ao$BSJ;C`MY|Ce2o3fJW_8gTBMLOKBXT(ySUj|2IN4-81Er%)&K3G7N=I9$9q?! c2T}yL9-wCF2;)ci05xb^gWdSvxBVdg0oe~0B>(^b From 8aa36f13c538ce1dfa02604678b506097c22277e Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Sat, 18 May 2024 00:01:21 +1000 Subject: [PATCH 12/15] fix --- backend/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 118 bytes .../elastic_client_provider.cpython-310.pyc | Bin 0 -> 567 bytes .../BOM/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 133 bytes .../addobservations.cpython-310.pyc | Bin 0 -> 2055 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 138 bytes .../__pycache__/mharvester.cpython-310.pyc | Bin 0 -> 2256 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 129 bytes test/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 115 bytes ...fission_tests.cpython-310-pytest-8.2.0.pyc | Bin 0 -> 5674 bytes test/fission_tests.py | 125 ++++++++++-------- 10 files changed, 70 insertions(+), 55 deletions(-) create mode 100644 backend/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/__pycache__/elastic_client_provider.cpython-310.pyc create mode 100644 backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc create mode 100644 backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/harvesters/Mastodon/__pycache__/mharvester.cpython-310.pyc create mode 100644 backend/harvesters/__pycache__/__init__.cpython-310.pyc create mode 100644 test/__pycache__/__init__.cpython-310.pyc create mode 100644 test/__pycache__/fission_tests.cpython-310-pytest-8.2.0.pyc diff --git a/backend/__pycache__/__init__.cpython-310.pyc b/backend/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44252e007e466ebd7568268d4a415daef46e479a GIT binary patch literal 118 zcmd1j<>g`kf|op2X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2B!zbHSyL_aAp nIXg8kML#}1GcU6wK3=b&@)n0pZhlH>PO2S9OED9WU||3N17#J& literal 0 HcmV?d00001 diff --git a/backend/__pycache__/elastic_client_provider.cpython-310.pyc b/backend/__pycache__/elastic_client_provider.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaa41d983a69473f41d826a1d5e26aa33bc1de1e GIT binary patch literal 567 zcmZuuu};G<5VeyuDW!#e0TTlmXeuTs2vtJB)`bD7OO)DI64hyf?Nn-KRz8GZ%8G>4 zUqB3;lU5YLMLzq^mv_(avQDQ(&^{jTr$b7}y9sv9!eEF?9i!ufQ$bQXrl~cyDB%{j zU&z?z4sYP@aQA`u-Wn^3ZBS&&kcye>U2`$G!KJ$BG`29X2J+QG zICr$VjJ3|yAP8U=@H9nqkiAW^rxvWoL{a5L#v(DeIP3TCkchV_kq$OkAEEQ@vb_MA zOqU@8sa4sUL@HrnROq-ol<-`D(xFaL$O`RKX;gS4au2u4eVzm|%XBb_*bL@;ODtp} zfw>NInJp5I-124FdIG)4+xWX`qqFGtbHC(1CjMxGqo_48lr=#e=m>cjgdZ05$;_|r yGAYCiq=}Uw>`-Z%jr>M=@JqS#>OD1>>0Xun3){R(GhPU|Hhh#BRF^cZw)YKb{eI5? literal 0 HcmV?d00001 diff --git a/backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc b/backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2d39d0401860f85a773eb5a483769250081df84 GIT binary patch literal 133 zcmd1j<>g`k0wFG|G!Xq5L?8o3AjbiSi&=m~3PUi1CZpd2KczG$)edArF%ytrVE_O^ Cv>JT? literal 0 HcmV?d00001 diff --git a/backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc b/backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c31a420613f950dcd152578f2ef8773ae8b3500 GIT binary patch literal 2055 zcmZVZ1E)b@C1XJrb%cZ6?-6umD=5Y2t-3wRnSr)L8xdEbfs!E8GEyn%*V#| zB+Y6TA*B*Q6y8+Uj6k4>BQmqC9^z0_=MzmiYFu|yA~s$aV1ANIiXWDAooxX zwwtwMZE5TC&pv+oJ6!KnbY&#ML}^Fx{ftW`wY9^Qu1n>sOnO1exTd=@O*)ot7-E-9vMs@}FA?D2&4hQ2refn3Pm`=5T&^BGIGB^L*U2-zJS zX(#Zb$lFfis(Frym}|M%#SQEbu?T2@VLBbg4+e_2FT)02gx4T80M;6sfFIy>bW1np z^=Qg`Zpj zhsk&78#KVI!J3bqoZLdkcw!Z&c5Y4aE%cC0Xl~^cZdb;)a(YsoqKU1X-P(!ETDi>@ z*3i%BS28tH>m?2{sxywof?jf;F?+DH!IttWJ8SN-W!SA05-ixQg1ye{=4*hTd&#p_ z@K7V+3$%ZgBGo+l38M*A#ki#idp)n@wENua1i`lnNK!8L=x5f^HCH1uaS;zc#O3 zxpe76hnKATvwo6#1T|QB}^E9q-`09G>SCcPT7&B!%)fpr7yH1bk-!w1(-r``opCO{uZ4; z@j^NvNC!yh*$&crYUTJxvR@Rfu6i=f1Xx>#yJOmh>H}MBnQh0RDyjug(!Hdu13!9# zwZk9rAXBNBPwVR}3{;TDqZ_7qNK;N1(D+>Jhe`K(;V*fk`-*A2au@0#Om^CHCAHap zYN~0xa3@vs^zoUynH+{mTczz&Uz_65)?u7#d{HkH3OuMs?x`^59ZQ@y=Okp}O(Svn zBjZWV=B2iEZ5ED@>6*C)XgnI9-w^E`o^S!uSldt9{87M1raNu6Hz0E9UZ*8YQG$z# zJ}PX3xIvoCx~;AbGUx+b>ZSWb!F_f&O{3d0r|E`onqNGMILOyFuw{`F#$noy(w!YH zG!2tMT6Bc+9ktu1CUjignz_IWq7YiUrXzocYX_p{MWIxBu~hD<)GK9cyQGM>K}XS) zbbZe2qG?oPUPg1n@D!bjn%J!ZDz{)F7QyDT|Dg`7Flh#UU|7YbF#Q>m`}Y@hUDEcKqQq#{+6!1Y4|{=`Nw!(`CRjRnM-5m hdYrN>;x|klO7r+Of`5kjZ@{0!ah;0uj*IDw{{SAW7@+_F literal 0 HcmV?d00001 diff --git a/backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc b/backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..707547de39585900c7c3a6c6efd89efa9d60c471 GIT binary patch literal 138 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 literal 0 HcmV?d00001 diff --git a/test/fission_tests.py b/test/fission_tests.py index 630d165..e417d28 100644 --- a/test/fission_tests.py +++ b/test/fission_tests.py @@ -4,71 +4,86 @@ from backend.harvesters.BOM.addobservations import call_bom from backend.harvesters.Mastodon.mharvester import parse_json, generate_docs +from flask import Flask +@pytest.fixture +def app(): + app = Flask(__name__) + return app -def test_call_bom_success(mocker): - # Setting up the mock for requests.get to return a successful response - mock_response = mocker.MagicMock(status_code=200) - mock_response.json.return_value = {"data": "example"} - mocker.patch('requests.get', return_value=mock_response) +def test_call_bom_success(app,mocker): + with app.app_context(): + # Setting up the mock for requests.get to return a successful response + mock_response = mocker.MagicMock(status_code=200) + mock_response.json.return_value = {"data": "example"} + mocker.patch('requests.get', return_value=mock_response) + mocker.patch('flask.current_app.logger.info', return_value=None) + # Calling the function + station_name, result = call_bom("TestStation", "http://example.com") - # Calling the function - station_name, result = call_bom("TestStation", "http://example.com") + # Assertions to check the expected output + assert station_name == "TestStation" + assert result == {"data": "example"}, "JSON response should be returned on success" - # Assertions to check the expected output - assert station_name == "TestStation" - assert result == {"data": "example"}, "JSON response should be returned on success" +def test_call_bom_failure(app, mocker): + with app.app_context(): + # Setting up the mock for requests.get to return a non-successful response + mock_response = mocker.MagicMock(status_code=404) # Example of a failed status code + mocker.patch('requests.get', return_value=mock_response) + mocker.patch('flask.current_app.logger.info', return_value=None) + # Calling the function + station_name, result = call_bom("TestStation", "http://example.com") -def test_call_bom_failure(mocker): - # Setting up the mock for requests.get to return a non-successful response - mock_response = mocker.MagicMock(status_code=404) # Example of a failed status code - mocker.patch('requests.get', return_value=mock_response) - - # Calling the function - station_name, result = call_bom("TestStation", "http://example.com") - - # Assertions to check the expected output - assert station_name == "TestStation" - assert result is None, "None should be returned if the response is not 200" + # Assertions to check the expected output + assert station_name == "TestStation" + assert result is None, "None should be returned if the response is not 200" # test elastic search client -def test_get_client(): - assert str(type(get_client())) == "" +def test_get_client(app, mocker): + with app.app_context(): + mocker.patch('flask.current_app.logger.info', return_value=None) + assert str(type(get_client())) == "" -def test_parse_json_normal_input(): - # Input with a typical list of message dictionaries - msgs = [ - {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00.123456Z', 'id': 1}, - {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00.123456Z', 'id': 2} - ] - # Expected output should trim the datetime and include all keys - expected = [ - {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00', 'id': 1}, - {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00', 'id': 2} - ] - assert parse_json(msgs) == expected +def test_parse_json_normal_input(app, mocker): + with app.app_context(): + # Input with a typical list of message dictionaries + msgs = [ + {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00.123456Z', 'id': 1, 'sentiment':0}, + {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00.123456Z', 'id': 2, 'sentiment':0} + ] + # Expected output should trim the datetime and include all keys + expected = [ + {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00', 'id': 1, 'sentiment':0}, + {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00', 'id': 2, 'sentiment':0} + ] + mocker.patch('flask.current_app.logger.info', return_value=None) + assert parse_json(msgs) == expected -def test_parse_json_empty_input(): - # Testing the function with an empty list - assert parse_json([]) == [] +def test_parse_json_empty_input(app, mocker): + with app.app_context(): + mocker.patch('flask.current_app.logger.info', return_value=None) + # Testing the function with an empty list + assert parse_json([]) == [] -def test_parse_json_missing_keys(): - # Input where some messages are missing one or more keys - msgs = [ - {'content': 'Incomplete', 'id': 3}, # missing 'created_at' - {'created_at': '2021-07-07T14:00:00.123456Z', 'id': 4} # missing 'content' - ] - # Expected output handles missing keys gracefully - expected = [ - {'content': 'Incomplete', 'created_at': None, 'id': 3}, - {'content': None, 'created_at': '2021-07-07T14:00:00', 'id': 4} - ] - result = parse_json(msgs) - # Custom assertion to handle possible None values in dictionary - for res, exp in zip(result, expected): - for key in ['content', 'created_at', 'id']: - assert res.get(key) == exp.get(key) +def test_parse_json_missing_keys(app, mocker): + with app.app_context(): + mocker.patch('flask.current_app.logger.info', return_value=None) + # Input where some messages are missing one or more keys + msgs = [ + {'content': 'Incomplete', 'id': 3}, # missing 'created_at' + {'created_at': '2021-07-07T14:00:00.123456Z', 'id': 4} # missing 'content' + ] + # Expected output handles missing keys gracefully + expected = [ + {'content': 'Incomplete', 'created_at': None, 'id': 3}, + {'content': None, 'created_at': '2021-07-07T14:00:00', 'id': 4} + ] + result = parse_json(msgs) + # Custom assertion to handle possible None values in dictionary + for res, exp in zip(result, expected): + for key in ['content', 'created_at', 'id']: + assert res.get(key) == exp.get(key) -# You can also include additional test cases for malformed input, etc. + # You can also include additional test cases for malformed input, etc. From fcdd930870f70246d159a526d4641a076515f7fa Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Mon, 20 May 2024 22:40:47 +1000 Subject: [PATCH 13/15] remove pycache --- backend/__pycache__/__init__.cpython-310.pyc | Bin 118 -> 0 bytes .../elastic_client_provider.cpython-310.pyc | Bin 567 -> 0 bytes .../BOM/__pycache__/__init__.cpython-310.pyc | Bin 133 -> 0 bytes .../__pycache__/addobservations.cpython-310.pyc | Bin 2055 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 138 -> 0 bytes .../__pycache__/mharvester.cpython-310.pyc | Bin 2256 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 129 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 backend/__pycache__/__init__.cpython-310.pyc delete mode 100644 backend/__pycache__/elastic_client_provider.cpython-310.pyc delete mode 100644 backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc delete mode 100644 backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc delete mode 100644 backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc delete mode 100644 backend/harvesters/Mastodon/__pycache__/mharvester.cpython-310.pyc delete mode 100644 backend/harvesters/__pycache__/__init__.cpython-310.pyc diff --git a/backend/__pycache__/__init__.cpython-310.pyc b/backend/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 44252e007e466ebd7568268d4a415daef46e479a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmd1j<>g`kf|op2X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2B!zbHSyL_aAp nIXg8kML#}1GcU6wK3=b&@)n0pZhlH>PO2S9OED9WU||3N17#J& diff --git a/backend/__pycache__/elastic_client_provider.cpython-310.pyc b/backend/__pycache__/elastic_client_provider.cpython-310.pyc deleted file mode 100644 index eaa41d983a69473f41d826a1d5e26aa33bc1de1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmZuuu};G<5VeyuDW!#e0TTlmXeuTs2vtJB)`bD7OO)DI64hyf?Nn-KRz8GZ%8G>4 zUqB3;lU5YLMLzq^mv_(avQDQ(&^{jTr$b7}y9sv9!eEF?9i!ufQ$bQXrl~cyDB%{j zU&z?z4sYP@aQA`u-Wn^3ZBS&&kcye>U2`$G!KJ$BG`29X2J+QG zICr$VjJ3|yAP8U=@H9nqkiAW^rxvWoL{a5L#v(DeIP3TCkchV_kq$OkAEEQ@vb_MA zOqU@8sa4sUL@HrnROq-ol<-`D(xFaL$O`RKX;gS4au2u4eVzm|%XBb_*bL@;ODtp} zfw>NInJp5I-124FdIG)4+xWX`qqFGtbHC(1CjMxGqo_48lr=#e=m>cjgdZ05$;_|r yGAYCiq=}Uw>`-Z%jr>M=@JqS#>OD1>>0Xun3){R(GhPU|Hhh#BRF^cZw)YKb{eI5? diff --git a/backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc b/backend/harvesters/BOM/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index a2d39d0401860f85a773eb5a483769250081df84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmd1j<>g`k0wFG|G!Xq5L?8o3AjbiSi&=m~3PUi1CZpd2KczG$)edArF%ytrVE_O^ Cv>JT? diff --git a/backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc b/backend/harvesters/BOM/__pycache__/addobservations.cpython-310.pyc deleted file mode 100644 index 6c31a420613f950dcd152578f2ef8773ae8b3500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2055 zcmZVZ1E)b@C1XJrb%cZ6?-6umD=5Y2t-3wRnSr)L8xdEbfs!E8GEyn%*V#| zB+Y6TA*B*Q6y8+Uj6k4>BQmqC9^z0_=MzmiYFu|yA~s$aV1ANIiXWDAooxX zwwtwMZE5TC&pv+oJ6!KnbY&#ML}^Fx{ftW`wY9^Qu1n>sOnO1exTd=@O*)ot7-E-9vMs@}FA?D2&4hQ2refn3Pm`=5T&^BGIGB^L*U2-zJS zX(#Zb$lFfis(Frym}|M%#SQEbu?T2@VLBbg4+e_2FT)02gx4T80M;6sfFIy>bW1np z^=Qg`Zpj zhsk&78#KVI!J3bqoZLdkcw!Z&c5Y4aE%cC0Xl~^cZdb;)a(YsoqKU1X-P(!ETDi>@ z*3i%BS28tH>m?2{sxywof?jf;F?+DH!IttWJ8SN-W!SA05-ixQg1ye{=4*hTd&#p_ z@K7V+3$%ZgBGo+l38M*A#ki#idp)n@wENua1i`lnNK!8L=x5f^HCH1uaS;zc#O3 zxpe76hnKATvwo6#1T|QB}^E9q-`09G>SCcPT7&B!%)fpr7yH1bk-!w1(-r``opCO{uZ4; z@j^NvNC!yh*$&crYUTJxvR@Rfu6i=f1Xx>#yJOmh>H}MBnQh0RDyjug(!Hdu13!9# zwZk9rAXBNBPwVR}3{;TDqZ_7qNK;N1(D+>Jhe`K(;V*fk`-*A2au@0#Om^CHCAHap zYN~0xa3@vs^zoUynH+{mTczz&Uz_65)?u7#d{HkH3OuMs?x`^59ZQ@y=Okp}O(Svn zBjZWV=B2iEZ5ED@>6*C)XgnI9-w^E`o^S!uSldt9{87M1raNu6Hz0E9UZ*8YQG$z# zJ}PX3xIvoCx~;AbGUx+b>ZSWb!F_f&O{3d0r|E`onqNGMILOyFuw{`F#$noy(w!YH zG!2tMT6Bc+9ktu1CUjignz_IWq7YiUrXzocYX_p{MWIxBu~hD<)GK9cyQGM>K}XS) zbbZe2qG?oPUPg1n@D!bjn%J!ZDz{)F7QyDT|Dg`7Flh#UU|7YbF#Q>m`}Y@hUDEcKqQq#{+6!1Y4|{=`Nw!(`CRjRnM-5m hdYrN>;x|klO7r+Of`5kjZ@{0!ah;0uj*IDw{{SAW7@+_F diff --git a/backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc b/backend/harvesters/Mastodon/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 707547de39585900c7c3a6c6efd89efa9d60c471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmd1j<>g`k0wFG|G!Xq5L?8o3AjbiSi&=m~3PUi1CZpdl5Z~R~`(wvWoV2t_NvSD+BqNAh1QL`$sVI~_Gy;M^Sc22#X5(CPf1KTQ zN~|*i1tebj2}-4eH@*xXU|)I42jB&%l-aW#wcKgvW@cx1XJ%)9S2UY-g3qtt-Pu-i zg#2ZNryqvGhd9&^NPqxMNk)4#V?9Q#%u*-gJznun>h@gJIjPt4@XJ#_3wl8{=OSP0 z)hgag>)Bjy4tXDfpGmI)HK^ma33JfE@4Q%m<{p#pi}@phR?cQMI`gOK1L-g`7Z0Tr zxelYj!1z+^4~5blYJz)_(ghUx1`5rOQ^MN)Jau#?&4%eQNmiaeRbB{fVSc#1{AJDMg(+Js1(q0@6nOl>lOCNi*c5Et2?80KJV zYL?;A!giFT0?sz+_|jID@zSE-7t-(~-!7z0vvK-Dn}tDuz>cgWYAh6c8neE z?DAt57E9+Lc{FJpuXK(mEbVdmY3aZcTJfpXxst>A6*9A&NMko&p3Xm4wF2Gs;R1q9 z6E4E?18#SK72L(u!Ep^PSsPtHp40W+Mp@ZnGdw@B)lFD^fL@F}Jzsi9*qYOwFKe&# zkLW`JFFbOpQ+#aZCN?wKT>u|j8c%pg@OuR#4EB$pjra57#^}8rtq1Bxw=15;o;U2R z3Ar{^uBn4~El!7(E-m6Hz47jw*RFknz~)a)cUXo$ephz3cBW+EKQRJL&!!>(thmPI<=38OTvI@q{{1lxHaRD5dN8DYRh z6qSdDt3qm|$w*jbRb|Fgu`JTm@T~&SWGB&TwAlVa=%LK9vp=^hZ?r357`3p6wFQm4 zx7*vY$lAsU5lmJGsI%%6i&5#e6xiI*#?EgiV7$R_D^21rJKO{onA0Q|CQwNp3tVj6 zG|3WeJSnmQGifXM)U^bx?+EQ6wxeOHNBmBq+oM`L6G}yWp*oK2qDi$vUPsQbVz1MZ zcCob0hoM#fhYFJ9f>pPy+DSz&-?kjL{uo!KLJSPI{g3Vx5h&xrFdHc2C@rh*u8u;K znxEcc7^jKFRhk(-KyQqLJ!qVRC`IhE|0bwf*34DV0uxAc5b^%s#5{|V{55n&eTIY~ zw%FHu%siw|I8sKr!=5mgQ>6Cw`QP5-#?lgNuz+5$7{o5II=zb0GDEz=Jpx=6Jm#Lf zXTuD_(4G>8otAO8(Y?J%N*tW53aLt$yk*6kcEK#lN&eoMq|~!Bmk%PWuCrh4+OuMX z^pkv9=s7z*k1`R4Pla9~Sp{OjdRD+N6(87ARTk!2q`_Kg`kf_nm1X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2BnzbHSyL_aAp yIXg8kML#34s4TU(B( Date: Mon, 20 May 2024 22:41:32 +1000 Subject: [PATCH 14/15] remove pycache --- test/__pycache__/__init__.cpython-310.pyc | Bin 115 -> 0 bytes .../fission_tests.cpython-310-pytest-8.2.0.pyc | Bin 5674 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test/__pycache__/__init__.cpython-310.pyc delete mode 100644 test/__pycache__/fission_tests.cpython-310-pytest-8.2.0.pyc diff --git a/test/__pycache__/__init__.cpython-310.pyc b/test/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d89fb03331e8136cf6ed6073c879b853dd7efe43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 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 From c180f787f0a58f4e6094118d250d10046447e26b Mon Sep 17 00:00:00 2001 From: Petr Andreev Date: Mon, 20 May 2024 23:25:59 +1000 Subject: [PATCH 15/15] fix tests --- backend/harvesters/Mastodon/mharvester.py | 6 +-- test/fission_tests.py | 61 +++++++++++++++-------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/backend/harvesters/Mastodon/mharvester.py b/backend/harvesters/Mastodon/mharvester.py index 38fa6b7..c62c3f7 100644 --- a/backend/harvesters/Mastodon/mharvester.py +++ b/backend/harvesters/Mastodon/mharvester.py @@ -8,7 +8,7 @@ def parse_json(msg, analyzer): new_msg = {} - new_msg['id'] = msg['id'] + new_msg['id'] = msg.get('id') raw_date = msg.get('created_at') if raw_date: @@ -20,10 +20,10 @@ def parse_json(msg, analyzer): else: new_msg['created_at'] = None - new_msg['content'] = msg['content'] + new_msg['content'] = msg.get('content') try: - new_msg['sentiment'] = analyzer.polarity_scores(new_msg['content']).get('compound') + new_msg['sentiment'] = analyzer.polarity_scores(new_msg.get('content')).get('compound') except: new_msg['sentiment'] = 0 diff --git a/test/fission_tests.py b/test/fission_tests.py index e417d28..63cec2f 100644 --- a/test/fission_tests.py +++ b/test/fission_tests.py @@ -1,5 +1,7 @@ import pytest import requests +from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer + from backend.elastic_client_provider import get_client from backend.harvesters.BOM.addobservations import call_bom from backend.harvesters.Mastodon.mharvester import parse_json, generate_docs @@ -31,6 +33,7 @@ def test_call_bom_failure(app, mocker): mock_response = mocker.MagicMock(status_code=404) # Example of a failed status code mocker.patch('requests.get', return_value=mock_response) mocker.patch('flask.current_app.logger.info', return_value=None) + # Calling the function station_name, result = call_bom("TestStation", "http://example.com") @@ -49,41 +52,55 @@ def test_get_client(app, mocker): def test_parse_json_normal_input(app, mocker): with app.app_context(): # Input with a typical list of message dictionaries - msgs = [ - {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00.123456Z', 'id': 1, 'sentiment':0}, - {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00.123456Z', 'id': 2, 'sentiment':0} - ] + msgs = {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00.123456Z', 'id': 1, 'sentiment':None} # Expected output should trim the datetime and include all keys - expected = [ - {'content': 'Hello World', 'created_at': '2021-07-07T12:00:00', 'id': 1, 'sentiment':0}, - {'content': 'Test Message', 'created_at': '2021-07-07T13:00:00', 'id': 2, 'sentiment':0} - ] + expected = {'id': 1, 'created_at': '2021-07-07T12:00:00', 'date': '07/07/21', 'content': 'Hello World', 'sentiment': 1.0} mocker.patch('flask.current_app.logger.info', return_value=None) - assert parse_json(msgs) == expected + + mock_analyzer = mocker.Mock(spec=SentimentIntensityAnalyzer) + + # Define the return value of the polarity_scores method + mock_analyzer.polarity_scores.return_value = { + 'neg': 0.0, + 'neu': 0.0, + 'pos': 1.0, + 'compound': 1.0 + } + assert parse_json(msgs, mock_analyzer) == expected def test_parse_json_empty_input(app, mocker): with app.app_context(): mocker.patch('flask.current_app.logger.info', return_value=None) + # Define the return value of the polarity_scores method + mock_analyzer = mocker.Mock(spec=SentimentIntensityAnalyzer) + + mock_analyzer.polarity_scores.return_value = { + None + } # Testing the function with an empty list - assert parse_json([]) == [] + + assert parse_json({}, mock_analyzer) == {'id': None, 'created_at': None, 'content': None, 'sentiment': 0} def test_parse_json_missing_keys(app, mocker): with app.app_context(): mocker.patch('flask.current_app.logger.info', return_value=None) # Input where some messages are missing one or more keys - msgs = [ - {'content': 'Incomplete', 'id': 3}, # missing 'created_at' - {'created_at': '2021-07-07T14:00:00.123456Z', 'id': 4} # missing 'content' - ] + msgs = {'content': 'Incomplete', 'id': 3} # missing 'created_at' + # Expected output handles missing keys gracefully - expected = [ - {'content': 'Incomplete', 'created_at': None, 'id': 3}, - {'content': None, 'created_at': '2021-07-07T14:00:00', 'id': 4} - ] - result = parse_json(msgs) + expected = {'content': 'Incomplete', 'created_at': None, 'id': 3} + + + mock_analyzer = mocker.Mock(spec=SentimentIntensityAnalyzer) + + # Define the return value of the polarity_scores method + mock_analyzer.polarity_scores.return_value = { + 'neg': 0.0, + 'neu': 0.0, + 'pos': 1.0, + 'compound': 1.0 + } # Custom assertion to handle possible None values in dictionary - for res, exp in zip(result, expected): - for key in ['content', 'created_at', 'id']: - assert res.get(key) == exp.get(key) + assert parse_json(msgs, mock_analyzer) == {'id': 3, 'created_at': None, 'content': 'Incomplete', 'sentiment': 1.0} # You can also include additional test cases for malformed input, etc.