Пример #1
0
    def __init__(self, token_v2, notes_collection_url, tags_colleciton_url):

        client = NotionClient(token_v2=token_v2)

        self.notes_collection = client.get_collection_view(
            notes_collection_url)
        self.tags_collection = client.get_collection_view(tags_colleciton_url)
Пример #2
0
def updateCalender(token):
    client = NotionClient(token)
    calender = client.get_collection_view(url_calender)
    impfungen = client.get_collection_view(url_impfungen)
    kalender = client.get_collection_view(url_kalender_sync)
    todo = client.get_collection_view(url_todo)
    freunde = client.get_collection_view(url_freunde)
    for impfung in impfungen.collection.get_rows(search=''):
        if impfung.exportedToCalender == False:
            calenderEntry = calender.collection.add_row()
            calenderEntry.name = impfung.name
            calenderEntry.type = 'Impfungen'
            impfung.calender = calenderEntry
            impfung.exportedToCalender = True
    for to in todo.collection.get_rows(search=''):
        if to.exportedToCalender == False:
            calenderEntry = calender.collection.add_row()
            calenderEntry.name = to.name
            calenderEntry.type = 'ToDo'
            to.calender = calenderEntry
            to.exportedToCalender = True
    for eintrag in calender.collection.get_rows(search=''):
        if eintrag.exportedToCalender == False:
            calenderEntry = calender.collection.add_row()
            calenderEntry.name = eintrag.name
            calenderEntry.type = 'Kalender'
            eintrag.calender = calenderEntry
            eintrag.exportedToCalender = True
    for person in freunde.collection.get_rows(search=''):
        if person.exportedToCalender == False:
            calenderEntry = calender.collection.add_row()
            calenderEntry.name = person.name
            calenderEntry.type = 'Geburtstag'
            person.calender = calenderEntry
            person.exportedToCalender = True
Пример #3
0
def add_visit(token, clients_url, visits_url, telefon, fio, chto_budem_delat,
              stoimost, datetime_start, datetime_end):
    client = NotionClient(token)
    clients_collection = client.get_collection_view(clients_url)
    # filter_params = [{
    #     "property": "telefon",
    #     "comparator": "enum_contains",
    #     "value": telefon
    # }]
    # results = clients_collection.build_query(filter=filter_params).execute()
    # if results:
    #     customer = results[0]
    # else:
    #     customer = clients_collection.collection.add_row()
    #     customer.telefon = telefon
    #     customer.fio = fio

    visits_collection = client.get_collection_view(visits_url)
    visit = visits_collection.collection.add_row()
    # visit.klient = customer
    try:
        visit.stoimost = int(stoimost)
    except:
        pass
    visit.chto_budem_delat = chto_budem_delat
    visit.data = NotionDate(start=datetime_start, end=datetime_end)
Пример #4
0
def hello():
    client = NotionClient(token_v2=os.environ.get("NOTION_TOKEN"))

    cv = client.get_collection_view(
        "https://www.notion.so/larskarbo/7aa8bbb6129241dbb03f9460e6270113?v=5ebb4bee12c34ef09408c8c0cbb0df45"
    )

    rows = cv.collection.get_rows()
    bar = Bar('Processing', max=len(rows))
    for row in rows:
        bar.next()
        # if row.name == "2 brødskiver med kaviar og egg":

        for child in row.children:
            if child.type == "collection_view":
                # child
                cv2 = client.get_collection_view(child.views[0].id,
                                                 collection=child.collection)
                macros = macroCalcTable(cv2, row.name, row.antall_porsjoner)
                row.protein = macros["protein"]
                row.fett = macros["fett"]
                row.karbohydrat = macros["karbohydrat"]
                row.kcal = "🔥 " + str(macros["kcal"]) + " kcal"
                row.kroner = "💰 " + str(macros["kroner"]) + " kr"

    if cv2 is None:
        print("cv2 is none")
        return

    bar.finish()
def is_valid_table():
    """
    Return True if table is valid
    """
    client = NotionClient(token_v2=NOTION_TOKEN)
    try:
        client.get_collection_view(NOTION_TABLE_URL)
        return True
    except AssertionError:
        return False
Пример #6
0
class Notion:
    def __init__(self, token):
        self.client = NotionClient(token_v2=token)
        self.url = None

    def set_url(self, url):
        self.url = url

    def get_table(self, dropna=False):
        table = self.client.get_collection_view(self.url)

        rows = []
        for row in table.collection.get_rows():
            rows.append(self._get_row_item(row))

        table_df = pd.DataFrame(rows,
                                columns=list(row.get_all_properties().keys()))
        if dropna:
            table_df = table_df.dropna().reset_index(drop=True)
        return table_df

    def _get_row_item(self, row):
        items = []
        for col, item in row.get_all_properties().items():
            type_ = type(item)
            item = row.get_property(identifier=col)
            if type_ not in [list, NotionDate]:
                items.append(item)
            elif type_ == list:
                items.append(' '.join(item))
            elif type_ == NotionDate:
                items.append(item.__dict__['start'])
        return items

    def insert_rows(self, item_dict):
        table = self.client.get_collection_view(self.url)
        row = self._create_new_record(table)

        for col_name, value in item_dict.items():
            row.set_property(identifier=col_name, val=value)

    def _create_new_record(self, table):
        row_id = self.client.create_record('block',
                                           parent=table.collection,
                                           type='page')
        row = CollectionRowBlock(self.client, row_id)

        with self.client.as_atomic_transaction():
            for view in self.client.get_block(table.get("parent_id")).views:
                view.set("page_sort", view.get("page_sort", []) + [row_id])

        return row
Пример #7
0
def get_changes_data():
    print("Scraping changes data off Notion stories")
    print()

    client = NotionClient(token_v2=notion_token_v2)
    cv = client.get_collection_view(
        "https://www.notion.so/humanagency/53a3254e681e4eb6ab53e037d0b2f451?v=68afa83bf93f4c57aa38ffd807eb3bf1"
    )
    addedStories = []
    allChanges = pd.DataFrame(columns=('ID', 'Story', 'Status', 'Change Date',
                                       'Name', 'Title', 'Ship Date'))
    changeView = client.get_collection_view(
        "https://www.notion.so/humanagency/a11ad18166f445e694c64037fbfd7d5b?v=67d6efa07c224fdc89603e1d9eb6ad5d"
    )

    #Iterate through the stories on the Product Lineup, check if in column 13
    for row in cv.collection.get_rows():
        if row.status == '13. Complete! (On Live)' and row.story not in addedStories:
            firstIteration = True
            #Run through the changes table to look for changes with the same story as the current story
            for change_row in changeView.collection.get_rows():
                block = client.get_block(change_row.id)
                for item in block.story:
                    if item.title == row.story:
                        if firstIteration:
                            print(f"Scraping changes data from {row.story}")
                            addedStories.append(row.story)
                            firstIteration = False
                        title = block.title
                        if block.time_correction:
                            time = block.time_correction.start
                        else:
                            time = block.time
                            time = time - timedelta(hours=5)
                        status = block.status
                        full_name = block.change_made_by
                        allChanges = allChanges.append(
                            {
                                'ID': row.id,
                                'Story': row.story,
                                'Status': status,
                                'Change Date': time,
                                'Name': full_name,
                                'Title': title,
                                'Ship Date': row.ship_date.start
                            },
                            ignore_index=True)

    return order_by_time(allChanges)
Пример #8
0
class Context:
    settings: Settings
    config: Config
    todo_col: CollectionBlock
    scheduled_col: CollectionBlock
    client: NotionClient

    def __init__(self, config: Config, settings: Settings):
        self.config = config
        self.settings = settings
        self.client = NotionClient(token_v2=config.token_v2)
        self.todo_col = self.client.get_collection_view(
            config.tasks_collection_url, force_refresh=True).collection
        self.scheduled_col = self.client.get_collection_view(
            config.scheduled_collection_url, force_refresh=True).collection
Пример #9
0
def hello():
    client = NotionClient(token_v2=os.environ["NOTION_TOKEN"])

    cv = client.get_collection_view(
        "https://www.notion.so/larskarbo/b7fa0ea238224fa0a0c947e7b81f14de?v=b5bc7261778446dda00869546855fdc0"
    )

    rows = cv.collection.get_rows()

    # bar = Bar('Processing', max=len(rows))

    for row in rows:
        # bar.next()
        print("row.name", row.name)
        print("row.bilde", row.bilde)
        state = "active"
        if len(row.bilde) == 0:
            state = "disabled"

        addTask(n_id=(row.id),
                fields={
                    "question": "wtf",
                    "answer": row.name,
                    "answerLink": row.get_direct_browseable_url(),
                    "path": ["DIV"],
                    "state": state
                })
Пример #10
0
def updateNotionTask(token, collectionURL, externalid):
    # notion
    client = NotionClient(token)
    cv = client.get_collection_view(collectionURL)
    for row in cv.collection.get_rows(search=externalid):
        if row.externalid == externalid:
            row.done = True
Пример #11
0
def createNotionRowGeneric(token, collectionURL, request):
    # notion
    client = NotionClient(token)
    print('notion-url- {}'.format(collectionURL))
    cv = client.get_collection_view(collectionURL)
    request_dict = dict(request.headers)
    request_keys = set(request_dict.keys())
    uid = request.headers.get('uid')
    match_rows = []
    for r in cv.collection.get_rows():
        if uid == r.UID:
            match_rows.append(r)
    dd = cv.collection.query()  ## hack to initialize the view
    if not match_rows:
        row = cv.collection.add_row()
    else:
        ## Ignore all other matched rows
        row = match_rows[0]

    notion_keys = set(
        [i.capitalize() for i in list(row.get_all_properties().keys())])
    for key in (request_keys & notion_keys):
        print('key - {} -'.format(key))
        setattr(row, key, request.headers.get(key))
    data = dict(request.get_json())
    for key in data:
        row.children.add_new(TextBlock, title=data[key])
Пример #12
0
def sync_goal_table(goals, client=None):
    bee_2_notion_props = {
        "runits": "period",
        "rate": "set_rate",
        "name": "slug",
        "buffer_days": "safebuf",
        "goal_type": "goal_type"
    }

    if not client:
        client = NotionClient(token_v2=NOTION_TOKEN)

    collection = client.get_collection_view(NOTION_CV_URL).collection
    for goal in goals:
        notion_row = get_or_create_row(collection, goal.slug)

        #for props in bee_2_notion_props.keys():
        #    notion_row[bee_2_notion_props[]]
        if notion_row:
            safe = (goal.safe_buffer() or goal.entered_data_today()) and bool(
                goal.safebuf)
            notion_row.safe = safe
            notion_row.buffer_days = str(goal.safebuf)
            notion_row.frequency = str(round(goal.cur_rate(), 1)) + "/" + str(
                goal.runits)
            notion_row.rate = str(goal.rate) + "/" + str(goal.runits)
Пример #13
0
def createCalendarEvent(TOKEN, collectionURL, description, event_begins,
                        event_ends, location, summary, duration_mins,
                        event_begins_pretty, id):
    # notion

    print("Entered createCalendarEvent for " + summary)
    client = NotionClient(TOKEN)
    cv = client.get_collection_view(collectionURL)
    row = cv.collection.add_row()

    row.Action_Item = summary
    row.Status = "Active"
    row.Priority = "Scheduled"
    row.Note = (
        ("Location: " + location) if
        (location != None) else "") + "Description: " + str(description)
    #handle start time:
    print("Received event with timestamp of " + str(event_begins) + '\n')
    event_start_params = re.split('[-T:+]', event_begins)
    event_start_params = [int(i) for i in event_start_params]
    esp = event_start_params
    if len(esp) == 8:  #In case a time was given and not only date
        event_start = datetime(
            esp[0], esp[1], esp[2], esp[3], esp[4], esp[5]).replace(
                tzinfo=gettz("Israel"))  #- timedelta(hours = int(esp[6]))
    else:  #In case only a date was provided
        event_start = datetime(esp[0], esp[1], esp[2])

    row.Do_Date = event_start

    print("Finished createCalendarEvent for " + summary)
Пример #14
0
def createNotionTask(token, collectionURL, title, content):
    # notion
    client = NotionClient(token)
    cv = client.get_collection_view(collectionURL)
    row = cv.collection.add_row()
    row.title = title
    row.children.add_new(TextBlock, title=content)
Пример #15
0
def createNotionTask(token, collectionURL, name, email):
    # notion
    client = NotionClient(token)
    cv = client.get_collection_view(collectionURL)
    row = cv.collection.add_row()
    row.title = name
    row.email = email
Пример #16
0
class ExpenseTableClient:
    def __init__(self, token, page_url, table_url):
        self.client = NotionClient(token_v2=token)
        self.page = self.client.get_block(page_url)
        self.table = self.client.get_collection_view(table_url)
        self.categories = EXPENSE_CATEGORIES

    def add_expense(self,
                    categories,
                    amt,
                    payment_type,
                    transaction_date,
                    expense='Default Expense',
                    additional=None):
        row = self.table.collection.add_row()
        row.Expense = expense
        row.Categories = categories
        row.Amount = amt
        row.Date = transaction_date
        row.Type = payment_type
        row.Additional = additional

    # NOT WORKING
    def add_month_view(self, page, table_id):
        collection = self.client.get_collection(
            table_id)  # get an existing collection
        cvb = page.children.add_new(CollectionViewBlock, collection=collection)
        view = cvb.views.add_new(view_type="table")
Пример #17
0
def access_database():
    client = NotionClient(token_v2=args.token)

    # Access a database using the URL of the database page or the inline block
    cv = client.get_collection_view(
        "https://www.notion.so/liguoqinjim/3f253e90fea2424aa1d7224b526b04a5?v=c26bee77d48e4a3fade236ff1ae49498"
    )
    print(cv)

    # List all the records with "Bob" in them
    for row in cv.collection.get_rows():
        print("id={}".format(row.id))
        print("name={}".format(row.title))

        block = client.get_block(row.id)
        print(block)
        props = block.get_all_properties()
        print(props)
        print(type(props))

        break

    # Add a new record
    row = cv.collection.add_row()
    row.title = "Just some data2"
    print(row)
    block = client.get_block(row.id)
    props = block.get_all_properties()
    print("props:{}".format(props))
    # 设置row的值
    block.set_property("fen_lei", "历史")
Пример #18
0
def test_todo_desk():
    TOKEN = '12828fc2a49d4301f495c09c4532089219a1d48db6bcffb301b1b308d895ce70e98197c5b1d4e0da6b2bb5d497da10241140a47f959ffe484941472dfda2719c35a8804fb68e35f2b36689ae47be'
    NOTION = "https://www.notion.so/f8e9e4d17e7d4e7696595a8d56948f3b?v=d938f8f324374cf9a41ae129ebfe0301"
    today = datetime.datetime.now().date()

    client = NotionClient(TOKEN)
    cv = client.get_collection_view(NOTION)

    filter_params = {
        "filters": [{
            "filter": {
                "value": {
                    "type": "exact",
                    "value": "DONE"
                },
                "operator": "enum_is"
            },
            "property": "Status",
        }]
    }

    current_rows = cv.collection.get_rows(filter=filter_params)
    for row in current_rows:
        if row.set_date.start > today:
            continue

        if row.set_date.start < today:
            calculate_due_day(row)
        elif row.set_date.start == today:
            row.status = "TO DO"

    return 'ok'
Пример #19
0
def main(config):
    # Obtain the `token_v2` value by inspecting your browser cookies on a logged-in session on Notion.so
    client = NotionClient(token_v2=config["notion"]["token"])

    # Replace this URL with the URL of the page you want to edit
    page = client.get_block(config["notion"]["database"])

    print("The old title is:", page.title)

    # Access a database using the URL of the database page or the inline block
    cv = client.get_collection_view(config["notion"]["database"])

    for row in cv.collection.get_rows():
        print(row)

    # Add a new record
    row = cv.collection.add_row()
    row.name = "Just some data"
    row.is_confirmed = True
    row.estimated_value = 399
    row.files = [
        "https://www.birdlife.org/sites/default/files/styles/1600/public/slide.jpg"
    ]
    row.person = client.current_user
    row.tags = ["A", "C"]
    row.where_to = "https://learningequality.org"
Пример #20
0
def addTodoEntry(name, dueDate=False, desc=False):
    if "TG2N_NOTION_TOKEN" not in os.environ:
        return
    client = NotionClient(token_v2=os.environ['TG2N_NOTION_TOKEN'],
                          start_monitoring=False)

    if "TG2N_NOTION_CV_LINK" not in os.environ:
        return
    cv = client.get_collection_view(os.environ['TG2N_NOTION_CV_LINK'])

    row = cv.collection.add_row()
    row.todo = name

    if dueDate:
        if " " in dueDate:
            dueDate = datetime.datetime.strptime(dueDate, '%Y%m%d %H%M')
        else:
            dueDate = datetime.datetime.strptime(dueDate, '%Y%m%d')

        tz = "Europe/Berlin"
        if "TG2N_TIMEZONE" in os.environ:
            tz = os.environ['TG2N_TIMEZONE']
        row.reminder = NotionDate(dueDate, None,
                                  timezone(os.environ['TG2N_TIMEZONE']))

    if desc:
        todoEntryPageId = row.id
        todoEntryPage = client.get_block(todoEntryPageId)
        child = todoEntryPage.children.add_new(TextBlock, title=desc)
Пример #21
0
def sync_all():
    site_id = 1
    config = Config.objects.get(site_id=site_id)

    try:
        client = NotionClient(token_v2=config.token or settings.TOKEN_V2,
                              monitor=False)
    except ConnectionError as e:
        lgr.error(e)
        return

    cv = client.get_collection_view(
        "https://www.notion.so/danleyb2/ef408360691a4cd0a62251e4366117d6?v=72472887ddf44307a31b20925faadb4b"
    )

    lgr.info(cv)

    category, created = Category.objects.get_or_create(name='default',
                                                       site_id=1,
                                                       slug='default')

    posts_update_run = timezone.now()
    # List all the records in the collection
    for row in cv.collection.get_rows():
        process_post(row, config, posts_update_run)
Пример #22
0
def insertIntoInbox(token, collectionURL, header, body):
    # notion
    client = NotionClient(token)
    cv = client.get_collection_view(url_inbox)
    newInbox = cv.collection.add_row()
    newInbox.name = header
    newInbox.children.add_new(TextBlock, title=body)
Пример #23
0
def page(pid):
    token = request.headers.get('Authorization').split()[-1]
    page_url = f"https://notion.so/{pid}?v={request.args['v']}"

    # initialize notion db page
    client = NotionClient(token_v2=token)
    page = client.get_collection_view(page_url)

    sort_params = []
    filter_params = {"filters": [], "operator": "and"}

    for arg in request.args.items():
        if arg[1] == 'asc' or 'desc':
            param = {"property": arg[0], "direction": f"{arg[1]}ending"}
            sort_params.append(param)

    result = page.build_query(sort=sort_params, filter=filter_params).execute()

    # handle reponse
    response = []
    for r in result:
        data = {}
        for attr in dir(r):
            if not attr.startswith('_') and attr not in IGNORE_ATTRS:
                data[attr] = getattr(r, attr)

        response.append(data)

    if 'limit' in request.args:
        response = response[:int(request.args['limit'])]

    return jsonify(response)
Пример #24
0
def createNotionTask(token, collectionURL, content):
    # notion
    client = NotionClient(token)
    cv = client.get_collection_view(collectionURL)
    row = cv.collection.add_row()
    row.title = content
    row.categories = "d8b32dac-7d11-4879-813f-5acdb040fd33"
Пример #25
0
def getTags(v2, db):
    from notion.client import NotionClient

    try:
        client = NotionClient(token_v2=v2)
        print("Connected")

    except:
        print("Error v2")

    try:
        cv = client.get_collection_view(db)
        print("Connected")
    except:
        print("Error db")

    try:
        values = []
        a = cv.collection.get_schema_properties()
        s = a[2]['id']
        b = cv.collection.get_schema_property(s)
        for c in b['options']:
            values.append(c['value'])
            print("Added {}".format(c['value']))
        return values
    except:
        return values
Пример #26
0
def hello():
    client = NotionClient(
        token_v2="738991375dbb49e1050ead92da668fb277c43c6df82f1dd49b6e667a3d83a8da738051a0a7d489d04dccaa043b81e6d196beaa11f7e6a4e233a96491391d13337a9fbc7a2911f6a9f9a4452f1192")

    cv = client.get_collection_view(
        "https://www.notion.so/larskarbo/534d0728c32d474c9d23315d8afc82d5?v=f8eed84cbef6437ca18f9506f8469fe4")

    rows = cv.collection.get_rows()

    for i in range(5):
        nums = []

        rand = rows[randint(-1, len(rows)-1)]
        p = rand.person
        nums.append(rand.name)

        rand = rows[randint(-1, len(rows)-1)]
        h = rand.handling
        nums.append(rand.name)

        rand = rows[randint(-1, len(rows)-1)]
        o = rand.objekt
        nums.append(rand.name)


        print("{} {} på {}".format(p, h.lower(), o.lower()))
        val = input("Enter your value: ")
        if val[0:2] == nums[0] and val[2:4] == nums[1] and val[4:6] == nums[2]:
            print("hurray!!")
        else:
            print("wrong")
            print(val)
        print(nums)
Пример #27
0
def create_entry():
    token = request.args.get("token")
    content = request.get_json(silent=True)
    print(content)
    ## [{ value, slug, type }]

    client = NotionClient(token)
    url = request.args.get('url')
    cv = client.get_collection_view(url)
    row = cv.collection.add_row()

    ## Types:
    ##      date => NotionDate ✅
    ##      relation => ????
    ##      title => string ✅
    ##      select => string ✅

    for prop in content:
        val = prop['value']
        if (prop['type'] == 'date'):
            datet = datetime.fromtimestamp(prop['value'])
            val = NotionDate(datet)
        row.set_property(prop['slug'], val)

    response = app.response_class(status=200, mimetype='application/json')
    return response
Пример #28
0
def organize():
    client = NotionClient(token_v2=TOKEN_V2)
    page = client.get_collection_view(TASK_LIST_URL)

    for row in page.collection.get_rows():
        property = row.name.split("@")[-1]
        row.property = property
Пример #29
0
    def _get_table(self, params):
        client = NotionClient(token_v2=params.token_v2)
        cv = client.get_collection_view(params.url)
        rows = cv.default_query().execute()

        cv_id, public_id = self._get_columns_id(rows[0])

        datetime_list, cv_score_list, public_score_list = [], [], []
        for row in rows:
            if 'properties' in row.get():
                v = row.get()['properties']
                if public_id in v:
                    start_date = re.findall(r"'start_date': '(.+)',",
                                            str(v))[0]
                    start_time = re.findall(r"'start_time': '(.+)'}",
                                            str(v))[0]
                    t = datetime.strptime(start_date + ' ' + start_time,
                                          '%Y-%m-%d %H:%M')
                    cv_score = float(v[cv_id][0][0])
                    public_score = float(v[public_id][0][0])

                    datetime_list.append(t)
                    cv_score_list.append(cv_score)
                    public_score_list.append(public_score)

        df = pd.DataFrame({
            'datetime': datetime_list,
            'cv_score': cv_score_list,
            'public_score': public_score_list
        })
        df.sort_values(by='datetime')
        return df
Пример #30
0
def get_existing_row(id_row):
    client = NotionClient(token)
    cv = client.get_collection_view(collectionURL)
    row_to_delete = None
    for row in cv.collection.get_rows():
        if row.ID == id_row:
            return row
    return None