Browse Source

Start adding constructor methods for the db objects

Getty Ritter 4 years ago
parent
commit
305293f247
2 changed files with 55 additions and 0 deletions
  1. 38 0
      lc/model.py
  2. 17 0
      lc/requests.py

+ 38 - 0
lc/model.py

@@ -1,6 +1,8 @@
+import datetime
 import peewee
 
 import lc.config
+import lc.requests as r
 
 class Model(peewee.Model):
     class Meta:
@@ -26,6 +28,26 @@ class Link(Model):
     created = peewee.DateTimeField()
     # is the field entirely private?
     private = peewee.BooleanField()
+    # owned by
+    user = peewee.ForeignKeyField(User, backref='all_links')
+
+    @staticmethod
+    def from_request(user: User, link: r.Link) -> 'Link':
+        l = Link.create(
+            url=link.url,
+            name=link.name,
+            description=link.description,
+            private=link.private,
+            created=datetime.datetime.now(),
+            user=user,
+        )
+        for tag_name in link.tags:
+            t = Tag.find_tag(tag_name)
+            HasTag.create(
+                link=l,
+                tag=t,
+            )
+        return l
 
 
 class Tag(Model):
@@ -35,6 +57,22 @@ class Tag(Model):
     name = peewee.TextField()
     parent = peewee.ForeignKeyField('self', null=True, backref='children')
 
+    @staticmethod
+    def find_tag(tag_name: str):
+        if (t := Tag.get_or_none(Tag.name == tag_name)):
+            return t
+
+        parent = None
+        if '/' in tag_name:
+            parent_name = tag_name[:tag_name.rindex('/')]
+            parent = Tag.find_tag(parent_name)
+
+        return Tag.create(
+            name=tag_name,
+            parent=parent,
+        )
+
+
 
 class HasTag(Model):
     '''

+ 17 - 0
lc/requests.py

@@ -0,0 +1,17 @@
+from dataclasses import dataclass
+from dataclasses_json import dataclass_json
+from typing import List
+
+@dataclass_json
+@dataclass
+class User:
+    name: str
+
+@dataclass_json
+@dataclass
+class Link:
+    url: str
+    name: str
+    description: str
+    private: bool
+    tags: List[str]