https://prefect.io logo
Title
e

Erik

09/22/2022, 7:48 AM
I wanted to post this bug here before I post in Github, maybe I’m missing something easy to fix. I created an email block in the UI. Let’s call it
Email/test
I have tried two different methods to access the block in my code. Method 1:
from prefect.blocks.notifications import NotificationBlock

email = NotificationBlock().load('Email/test')
and I get the following error
File PYTHON/site-packages/prefect/blocks/core.py:836, in Block.__new__(cls, **kwargs)
    834     return m
    835 else:
--> 836     m = super().__new__(cls)
    837     object.__setattr__(m, "__dict__", kwargs)
    838     object.__setattr__(m, "__fields_set__", set(kwargs.keys()))

TypeError: Can't instantiate abstract class NotificationBlock with abstract method notify
It turns out this error comes from any attempt to instantiate
NotificationBlock()
. Can anyone else confirm this error when instantiating? Method 2:
from prefect.blocks.core import Block

email = Block().load('Email/test')
and I get the following error
File PYTHON/site-packages/prefect/blocks/core.py:646, in Block.load(cls, name)
    642         block_document = await client.read_block_document_by_name(
    643             name=block_document_name, block_type_slug=block_type_slug
    644         )
    645     except prefect.exceptions.ObjectNotFound as e:
--> 646         raise ValueError(
    647             f"Unable to find block document named {block_document_name} for block type {block_type_slug}"
    648         ) from e
    649 return cls._from_block_document(block_document)

ValueError: Unable to find block document named test for block type Email
even though the block has def been created in the UI. Have I tried the right things? Is there some other way to access my Email block? Or is this a real bug? PS (I see Mohamed Alaa write about a similar bug in this thread a few hours ago)
1
m

Mohamed Alaa

09/22/2022, 7:59 AM
Hello Erik, I'm actually having the same difficulty too. I posted a question yesterday. You could refer to it in case someone came with a solution on my thread https://prefect-community.slack.com/archives/CL09KU1K7/p1663777217452139
e

Erik

09/22/2022, 8:00 AM
Haha just saw that! I read the replies and will keep an eye on it, but I also wanted to point out that NotificationBlock() is 100% broken as well, apparently. Thanks for staying on it! Hope to get a solution soon.
m

Mohamed Alaa

09/22/2022, 8:02 AM
Yea, I think there is something broken with the Blocks logic. Hope so too!
j

Jeff Hale

09/22/2022, 11:30 AM
@Erik just remove the parentheses in
NotificationBlock().load
and you should be good to go. 🙂
e

Erik

09/22/2022, 9:25 PM
@Jeff Hale Ok I see that, but now I’m still getting this error.
Block.load('Email/test')
ValueError: Unable to find block document named test for block type Email
It also should be noted that when I try
Block.load('email/test')
(lowercase) I get this.
KeyError: "No class found for dispatch key 'email' in registry for type 'Block'."
even though the prefect CLI
prefect block ls
says that is the “slug”
j

Jeff Hale

09/22/2022, 9:33 PM
Hi Erik. Please check out the link to Mohamed’s post above, you need to import the class. I know that’s not super intuitive and I discussed the issue with the team today.
e

Erik

09/22/2022, 9:37 PM
@Jeff Hale glad to hear that it’s being discussed. From
prefect.blocks.system
I can import
JSON
,
String
,
Datetime
, and
Secret
Block types, but how do I import the
Email
block class type, I can’t seem to find it.
I also checked the API ref in the docs and didn’t find it anywhere
j

Jeff Hale

09/22/2022, 10:21 PM
This is interesting. Different issue than what I was looking at earlier, apologies. I’ve send a request to the team to get more insight into the issue and will let you know when I hear back. 🙂
e

Erik

09/22/2022, 10:22 PM
ok great! glad to know I’m not going insane! Thanks for your help. Will use slackwebhook until the email thing gets fixed. 🙏
j

Jeff Hale

09/22/2022, 10:44 PM
Alright, I learned something new: That block is only useable server side in Cloud - we clearly need to communicate that better in the GUI. Solutions: You can use the prefect-email collection with your own SendGrid account if you want to use email in flows. There’s documentation at the README. Alternatively, the solution for state changes for flows is easier, you can just use email notifications from the Notifications tab in the Cloud GUI. Apologies that you were spinning your wheels. 🙂
e

Erik

09/23/2022, 12:15 AM
Gotcha. Sounds like y’all need a SMTP block! but maybe I’ll just make a custom one. Should be easy enough. Thanks for following up.