diff --git a/mobilizon_bots/event/event.py b/mobilizon_bots/event/event.py new file mode 100644 index 0000000..7848d36 --- /dev/null +++ b/mobilizon_bots/event/event.py @@ -0,0 +1,24 @@ +from dataclasses import dataclass, asdict +from datetime import datetime +from typing import Optional + + +@dataclass +class MobilizonEvent: + """Class representing an event retrieved from Mobilizon.""" + + name: str + description: str + begin_datetime: datetime + end_datetime: datetime + last_accessed: datetime + mobilizon_link: str + mobilizon_id: str + thumbnail_link: Optional[str] = None + location: Optional[str] = None + + def _fill_template(self, pattern: str) -> str: + return pattern.format(**asdict(self)) + + def format(self, pattern: str) -> str: + return self._fill_template(pattern) diff --git a/poetry.lock b/poetry.lock index 576bced..c3bd4b9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,14 @@ +[[package]] +name = "aiosqlite" +version = "0.16.1" +description = "asyncio bridge to the standard sqlite3 module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing_extensions = ">=3.7.2" + [[package]] name = "atomicwrites" version = "1.4.0" @@ -28,6 +39,31 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "dynaconf" +version = "3.1.4" +description = "The dynamic configurator for your Python Project" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +all = ["redis", "ruamel.yaml", "configobj", "hvac"] +configobj = ["configobj"] +ini = ["configobj"] +redis = ["redis"] +toml = ["toml"] +vault = ["hvac"] +yaml = ["ruamel.yaml"] + +[[package]] +name = "iso8601" +version = "0.1.14" +description = "Simple module to parse ISO 8601 dates" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "more-itertools" version = "8.7.0" @@ -74,6 +110,14 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "pypika-tortoise" +version = "0.1.0" +description = "Forked from pypika and streamline just for tortoise-orm" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + [[package]] name = "pytest" version = "5.4.3" @@ -96,6 +140,43 @@ wcwidth = "*" checkqa-mypy = ["mypy (==v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +name = "pytz" +version = "2020.5" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "tortoise-orm" +version = "0.17.2" +description = "Easy async ORM for python, built with relations in mind" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +aiosqlite = ">=0.16.0,<0.17.0" +iso8601 = ">=0.1.13,<0.2.0" +pypika-tortoise = ">=0.1.0,<0.2.0" +pytz = ">=2020.4,<2021.0" + +[package.extras] +docs = ["pygments", "cloud-sptheme", "docutils", "sphinx"] +aiomysql = ["aiomysql"] +asyncmy = ["asyncmy"] +asyncpg = ["asyncpg"] +accel = ["ciso8601 (>=2.1.2,<3.0.0)", "python-rapidjson", "uvloop (>=0.14.0,<0.15.0)"] + +[[package]] +name = "typing-extensions" +version = "3.10.0.0" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "wcwidth" version = "0.2.5" @@ -107,9 +188,13 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "4d1de49710d78bd295469a572576efe3d5b96e6e8760458e870affe880e8d10e" +content-hash = "4df92db212a05183a658f14b958c1bc7baf7a07a3aad59566dce1752ba7ec30a" [metadata.files] +aiosqlite = [ + {file = "aiosqlite-0.16.1-py3-none-any.whl", hash = "sha256:1df802815bb1e08a26c06d5ea9df589bcb8eec56e5f3378103b0f9b223c6703c"}, + {file = "aiosqlite-0.16.1.tar.gz", hash = "sha256:2e915463164efa65b60fd1901aceca829b6090082f03082618afca6fb9c8fdf7"}, +] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -122,6 +207,14 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] +dynaconf = [ + {file = "dynaconf-3.1.4-py2.py3-none-any.whl", hash = "sha256:e6f383b84150b70fc439c8b2757581a38a58d07962aa14517292dcce1a77e160"}, + {file = "dynaconf-3.1.4.tar.gz", hash = "sha256:b2f472d83052f809c5925565b8a2ba76a103d5dc1dbb9748b693ed67212781b9"}, +] +iso8601 = [ + {file = "iso8601-0.1.14-py2.py3-none-any.whl", hash = "sha256:e7e1122f064d626e17d47cd5106bed2c620cb38fe464999e0ddae2b6d2de6004"}, + {file = "iso8601-0.1.14.tar.gz", hash = "sha256:8aafd56fa0290496c5edbb13c311f78fa3a241f0853540da09d9363eae3ebd79"}, +] more-itertools = [ {file = "more-itertools-8.7.0.tar.gz", hash = "sha256:c5d6da9ca3ff65220c3bfd2a8db06d698f05d4d2b9be57e1deb2be5a45019713"}, {file = "more_itertools-8.7.0-py3-none-any.whl", hash = "sha256:5652a9ac72209ed7df8d9c15daf4e1aa0e3d2ccd3c87f8265a0673cd9cbc9ced"}, @@ -142,10 +235,27 @@ pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] +pypika-tortoise = [ + {file = "pypika-tortoise-0.1.0.tar.gz", hash = "sha256:7176e98ff0cf7c311d4ba58f28f1755956265dee2f9781e65e1304a67a3e5aa5"}, + {file = "pypika_tortoise-0.1.0-py3-none-any.whl", hash = "sha256:ec83b0b2964be01ef563f5f019b0332a18177604e841c47ad39d798798c6dfe9"}, +] pytest = [ {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, ] +pytz = [ + {file = "pytz-2020.5-py2.py3-none-any.whl", hash = "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4"}, + {file = "pytz-2020.5.tar.gz", hash = "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5"}, +] +tortoise-orm = [ + {file = "tortoise-orm-0.17.2.tar.gz", hash = "sha256:1a742b2f15a31d47a8dea7706b478cc9a7ce9af268b61d77d0fa22cfbaea271a"}, + {file = "tortoise_orm-0.17.2-py3-none-any.whl", hash = "sha256:b0c02be3800398053058377ddca91fa051eb98eebb704d2db2a3ab1c6a58e347"}, +] +typing-extensions = [ + {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, + {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, + {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, +] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, diff --git a/pyproject.toml b/pyproject.toml index ea9f83c..fa6cda9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,8 +7,8 @@ authors = ["Simone Robutti "] [tool.poetry.dependencies] python = "^3.9" dynaconf = "^3.1.4" -tortoise-orm = "^0.16.21" -aiosqlite = "^0.17.0" +tortoise-orm = "^0.17" +aiosqlite = "^0.16" [tool.poetry.dev-dependencies] pytest = "^5.2" diff --git a/tests/event/__init__.py b/tests/event/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/event/test_event.py b/tests/event/test_event.py new file mode 100644 index 0000000..705fd64 --- /dev/null +++ b/tests/event/test_event.py @@ -0,0 +1,33 @@ +from datetime import timedelta, datetime + +import pytest +from mobilizon_bots.event.event import MobilizonEvent + + +@pytest.fixture() +def event() -> MobilizonEvent: + return MobilizonEvent( + name="test event", + description="description of the event", + begin_datetime=datetime.now() + timedelta(days=1), + end_datetime=datetime.now() + timedelta(days=1, hours=2), + last_accessed=datetime.now(), + mobilizon_link="http://some_link.com/123", + mobilizon_id="12345", + thumbnail_link="http://some_link.com/123.jpg", + location="location", + ) + + +def test_fill_template(event): + assert ( + event._fill_template("{name}|{description}|{location}") + == "test event|description of the event|location" + ) + + +def test_format(event): + assert ( + event.format("{name}|{description}|{location}") + == "test event|description of the event|location" + ) diff --git a/tests/test_models.py b/tests/test_models.py deleted file mode 100644 index c4ddafb..0000000 --- a/tests/test_models.py +++ /dev/null @@ -1,14 +0,0 @@ -from tortoise.contrib import test - - -class TestSomething(test.TestCase): - async def test_something_async(self): - ... - - @test.skip("Skip this") - def test_skip(self): - ... - - @test.expectedFailure - def test_something(self): - ...