aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyapd/objects.py29
-rw-r--r--tests/test_objects.py22
2 files changed, 51 insertions, 0 deletions
diff --git a/pyapd/objects.py b/pyapd/objects.py
new file mode 100644
index 0000000..19aa65f
--- /dev/null
+++ b/pyapd/objects.py
@@ -0,0 +1,29 @@
+import json
+
+
+class ActivityObject():
+ PROPERTIES = [
+ 'id',
+ 'type',
+ ]
+
+ def __init__(self, *args, **kw):
+ self.context = "https://www.w3.org/ns/activitystreams"
+ for p in self.PROPERTIES:
+ if p in kw:
+ setattr(self, p, kw[p])
+
+ @classmethod
+ def from_jsons(cls, data: str):
+ return cls(**json.loads(data))
+
+ def to_jsonable(self):
+ data = {}
+ for p in self.PROPERTIES:
+ v = getattr(self, p, None)
+ if v is not None:
+ data[p] = v
+ return data
+
+ def to_jsons(self):
+ return json.dumps(self.to_jsonable())
diff --git a/tests/test_objects.py b/tests/test_objects.py
new file mode 100644
index 0000000..9646269
--- /dev/null
+++ b/tests/test_objects.py
@@ -0,0 +1,22 @@
+import unittest
+
+from pyapd import objects
+
+
+class TestObjects(unittest.TestCase):
+
+ def test_activity_from_json(self):
+ act = objects.ActivityObject.from_jsons('''{
+ "id": "http://example.org/123456"
+ }''')
+ self.assertIsInstance(act, objects.ActivityObject)
+ self.assertEqual(act.id, 'http://example.org/123456')
+
+ def test_activity_to_json(self):
+ act = objects.ActivityObject(
+ id="http://example.org/123456"
+ )
+ data = act.to_jsons()
+ self.assertIsInstance(data, str)
+ self.assertIn('"id": "http://example.org/123456"', data)
+