用于分离业务应用程序中的数据输入、输出和处理的库。
super-mario的Python项目详细描述
马里奥
用于分离业务应用程序中的数据输入、输出和处理的库。在
免责声明:该库是sooo pre-alpha。在
动机和主旨
你有大量的商业逻辑。 你喜欢干净的建筑,但你是理智的。 您喜欢Python的动态结构,但您与运行时错误联系在一起。 你想少打破常规,继续快速前进。 你是对的地方。在
Mario是一个业务逻辑框架。 像Django或Flask for web服务。在
它让你把逻辑放到管道上:一组组管道, 每个管道只做一件事,并且只处理非复杂类型 可以从一个管道转移到另一个管道。在
每个管道是三种类型之一:输入、输出、处理。 输入和输出应该是非复杂的(比如真正的非复杂, 圈复杂度~3),处理管道应该是纯的。在
安装
pip install super-mario
文件
使用示例
这里有一个简单的管道,在Jira中发送新评论的通知 要松懈的罚单。在
classJiraCommentsNotificationPipeline(BasePipeline):pipeline=['fetch_new_comments','fetch_users_mapping','generate_slack_message','send_slack_message',]@input_pipedeffetch_new_comments(jira_ticket_id:str)->ImmutableContext:return{'new_comments':fetch_jira_comments(ticket_id=jira_ticket_id,date_from=datetime.datetime.now().replace(hours=0,minutes=0,seconds=0,milliseconds=0),),}@input_pipedeffetch_users_mapping(new_comments:List[IssueComment])->ImmutableContext:return{'jira_to_slack_id_mapping':dict(User.objects.filter(jira_id__in=[c['user_id']forcinnew_comments],).values_list('jira_id','slack_id'))}@process_pipedefgenerate_slack_message(jira_ticket_id:str,new_comments:List[IssueComment],jira_to_slack_id_mapping:Mapping[str,str],)->ImmutableContext:message='\n'.join([f'@{jira_to_slack_id_mapping[c["user_id"]]} wrote comment for {jira_ticket_id}: "{c["text"]}"'forcinnew_comments])return{'message':message}@output_pipedefsend_slack_message(message:str)->None:send_message(destination='slack',channel=COMMENTS_SLACK_CHANNEL_ID,text=message,)# run pipeline for specific ticketJiraCommentsNotificationPipeline().run(jira_ticket_id='TST-12')
- 项目
标签: