프로그램 개발/Python

[Notion/python] notion-client rich text

(ㅇㅅㅎ) 2023. 1. 26. 15:28
728x90
반응형

 

3가지 타입

 python으로 Notion에 글을 쓰는 작업을 하던 중 rich text가 많이 쓰이지만 쓸 때마다 번거롭다고 느껴져서 class로 만들어서 정리하였습니다. 필요하신 분들은 가져가셔서 쓰셔도 됩니다.

⭐ rich text의 3가지 타입 중 mention의 경우 잘 쓰이지 않아서 위의 형식처럼 사용할 수 있도록 설정하였습니다. mention data에 대한 자세한 내용은 공식 페이지에서 확인하시고 사용하시길 바랍니다.

 

 

👀 전체 코드

success_txt = "변경 성공"
choose_txt = "에서 골라주세요."

class rich_text:
    def __init__(self, txt):
        self.type = "text"
        
        self.text = {'content': txt, 'link': None}
        self.mention = {}
        self.equation = {}
        

        self.annotations = { "color": "default" }
        self.plain_text = txt
        self.href = None
    
    def output(self):
        output = {"type": self.type , "annotations": self.annotations, "plain_text": self.plain_text, "href" : self.href}
        if self.type == 'text':
            output["text"] = self.text
        elif self.type == 'mention':
            output["mention"] = self.mention
        elif self.type == 'equations':
            output["equation"] = self.equation
        return output
    
    # ------------- 타입 변경 -------------
    def changeTypeToText(self, txt):
        self.type = "text"
        self.text = {'content': txt, 'link': None}
        return success_txt
    
    def changeTypeToMention(self, mention_type, mention_data, txt):
        types = ["database", "date", "link_preview", "page", "template_mention", "user"]
        if not mention_type in types:
            return f"{types}" + choose_txt
        
        self.mention = {"type": mention_type}
        self.mention[mention_type] = mention_data
        self.plain_textain_text = txt
        return success_txt
        
    
    def changeTypeToEquation(self, txt):
        self.type = "equation"
        self.equation = {"expression": txt}
    
    # ------------- 글자 옵션 변경 -------------
    def changeAnnotationsExceptColor(self, value):
        if not value in ["bold", "italic", "strikethrough", "underline", "code"]:
            return "You can change only [bold, italic, strikethrough, underline, code]"
        else:
            self.annotations[value] = !self.annotations[value]
            return success_txt
    
    def changeHref(self, href):
        if self.type == 'text':
            self.text['link'] = {"url": href}
        self.href = href
        return success_txt
    
    def changeColor(self, color):
        colors = ["blue", "blue_background", "brown", "brown_background", "default", "gray", "gray_background", "green", "green_background", "ornage", "orange_background", "pink", "pink_background", "purple", "purple_background", "red", "red_background", "yellow", "yellow_background"]
        if not color in colors:
            return f"{colors}" + choose_txt
        else:
            self.annotations["color"] = color
            return success_txt
    
    def changeText(self, txt):
        self.text = {'content': txt, 'link': None}
        self.plain_text = txt
        return success_txt

 

반응형