Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
}
schema = blockDescriptor['schema']
rows = blockDescriptor['rows']
notionBlock = Mock()
newBlock = Mock(spec=blockDescriptor['type'])
notionBlock.children.add_new = Mock(return_value=newBlock)
collection = Mock()
notionBlock._client.create_record = Mock(return_value=collection)
notionBlock._client.get_collection = Mock(return_value=collection)
#act
uploadBlock(blockDescriptor, notionBlock, '')
#assert
notionBlock.children.add_new.assert_called_with(CollectionViewBlock)
notionBlock._client.create_record.assert_called_with("collection", parent=newBlock, schema=schema)
notionBlock._client.get_collection.assert_called_with(collection)
#TODO: This is incomplete...
def test_table():
'''it should render a table'''
#arrange/act
output = mistletoe.markdown(\
"""
| Awoo | Awooo | Awoooo |
|---------|---------|---------|
| Test100 | Test200 | Test300 |
| | Test400 | |
""", NotionPyRenderer)
#assert
assert len(output) == 1
output = output[0]
assert isinstance(output, dict)
assert output['type'] == notion.block.CollectionViewBlock
assert isinstance(output['schema'], dict)
assert len(output['schema']) == 3 #3 properties
assert list(output['schema'].keys())[2] == 'title' #Last one is 'title'
assert list(output['schema'].values())[0] == {
'type': 'text',
'name': 'Awoo'
}
assert list(output['schema'].values())[1] == {
'type': 'text',
'name': 'Awooo'
}
assert list(output['schema'].values())[2] == {
'type': 'title',
'name': 'Awoooo'
}
def test_uploadBlock_collection():
#arrange
blockDescriptor = {
'type': CollectionViewBlock,
'schema': {
'J=}2': {
'type': 'text',
'name': 'Awoooo'
},
'J=}x': {
'type': 'text',
'name': 'Awooo'
},
'title': {
'type': 'text',
'name': 'Awoo'
}
},
'rows': [
['Test100', 'Test200', 'Test300'],
def test_imageBlockText():
'''it should render an image in bold text'''
#arrange/act
output = mistletoe.markdown("**texttext![](https://via.placeholder.com/500)texttext**", NotionPyRenderer)
#assert
assert len(output) == 2
assert isinstance(output[0], dict)
assert output[0]['type'] == notion.block.TextBlock
assert output[0]['title'] == "**texttexttexttext**" #Should extract the image
assert isinstance(output[1], dict) #The ImageBlock can't be inline with anything else so it comes out
assert output[1]['type'] == notion.block.ImageBlock
def test_uploadBlock():
'''uploads a simple block to Notion using add_new'''
#arrange
blockDescriptor = {
'type': TextBlock,
'title': 'This is a test of the test system'
}
notionBlock = Mock()
notionBlock.children.add_new = Mock()
#act
uploadBlock(blockDescriptor, notionBlock, '')
#assert
notionBlock.children.add_new.assert_called_with(TextBlock, title='This is a test of the test system')
def test_uploadBlock():
'''uploads a simple block to Notion using add_new'''
#arrange
blockDescriptor = {
'type': TextBlock,
'title': 'This is a test of the test system'
}
notionBlock = Mock()
notionBlock.children.add_new = Mock()
#act
uploadBlock(blockDescriptor, notionBlock, '')
#assert
notionBlock.children.add_new.assert_called_with(TextBlock, title='This is a test of the test system')
height = field_map("format.block_height")
full_width = field_map("format.block_full_width")
page_width = field_map("format.block_page_width")
width = field_map("format.block_width")
def set_source_url(self, url):
self.source = remove_signed_prefix_as_needed(url)
self.display_source = get_embed_link(self.source)
def _str_fields(self):
return super()._str_fields() + ["source"]
class EmbedOrUploadBlock(EmbedBlock):
file_id = field_map(["file_ids", 0])
def upload_file(self, path):
mimetype = mimetypes.guess_type(path)[0] or "text/plain"
filename = os.path.split(path)[-1]
data = self._client.post(
"getUploadFileUrl",
{"bucket": "secure", "name": filename, "contentType": mimetype},
).json()
with open(path, "rb") as f:
response = requests.put(
data["signedPutUrl"], data=f, headers={"Content-type": mimetype}
)
response.raise_for_status()
)
response.raise_for_status()
self.display_source = data["url"]
self.source = data["url"]
self.file_id = data["url"][len(S3_URL_PREFIX) :].split("/")[0]
class VideoBlock(EmbedOrUploadBlock):
_type = "video"
class FileBlock(EmbedOrUploadBlock):
size = property_map("size")
title = property_map("title")
_type = "file"
class AudioBlock(EmbedOrUploadBlock):
_type = "audio"
class PDFBlock(EmbedOrUploadBlock):
_type = "pdf"
class ImageBlock(EmbedOrUploadBlock):
def _convert_notion_to_python(self, val, prop):
if prop["type"] in ["title", "text"]:
val = notion_to_markdown(val) if val else ""
if prop["type"] in ["number"]:
if val is not None:
val = val[0][0]
if "." in val:
val = float(val)
else:
val = int(val)
if prop["type"] in ["select"]:
val = val[0][0] if val else None
if prop["type"] in ["multi_select"]:
val = [v.strip() for v in val[0][0].split(",")] if val else []
if prop["type"] in ["person"]:
val = (
[self._client.get_user(item[1][0][1]) for item in val if item[0] == "‣"]
if val
else []
from contextlib import redirect_stdout
from contextlib import contextmanager
from io import StringIO
@contextmanager
def captureStdOut(output):
stdout = sys.stdout
sys.stdout = output
try:
yield
finally:
sys.stdout = stdout
try:
client = NotionClient(token_v2=os.environ['NOTION_TOKEN'], monitor=False)
except:
cprint('NOTION_TOKEN / NOTION_PAGE environment variables not set or token expired.\n', 'red')
try:
page = client.get_block(os.environ['NOTION_PAGE'])
except:
cprint('NOTION_PAGE environment variables not set.\n', 'red')
def parse_task(string):
taskn = string
if isinstance(string, int):
taskn = str(taskn)
else:
if ',' in string:
taskn = string.split(',')
value = taskn