FireService是一个创建Python服务的简单库

fireservice的Python项目详细描述


消防服务

FireService是一个创建Python服务的简单库。在

  • 声明性输入字段。在
  • 输入验证。在
  • 不可变字段。在
  • 执行回调。在
  • 少用生化武器。在
  • 尽可能使用本机Python对象。在
  • 可通过自定义字段类型和验证器进行扩展。在
  • 为处理任何输入的类提供优雅的上层结构。在

安装

要使用pip安装FireService,请运行:pip install fireservice

要使用pipenv安装FireService,请运行:pipenv install fireservice

基本用途

fromfireserviceimportIntegerField,StringField,FireServicefromfireservice.exceptionsimportSkipError,ValidationErrorCRAWLED_DB=[]defpage_name_validator(name,value):ifnotvalue.endswith('.html'):raiseValidationError(name,'I only know html pages!')classCrawler(FireService):# All fields are required by defaultuser_id=IntegerField(min_value=1)page_name=StringField(validators=[page_name_validator])defurl(self):# Fields are directly accessible using instance __dict__return'http://example.com/{}/{}'.format(self.user_id,self.page_name)defpre_fire(self):ifself.url()inCRAWLED_DB:# Control directly goes to post_fire methodraiseSkipError('Page already crawled!')deffire(self,**kwargs):CRAWLED_DB.append(self.url())defpost_fire(self,fired,exc):iffired:print('I crawled!')else:print('I skipped crawling because: ',exc)crawler=Crawler()crawler.call({'user_id':1,'page_name':'about.html'})# Values are stored in native python types wherever possible:print(type(crawler.user_id),type(crawler.page_name))# <class 'int'> <class 'str'># Raises ModificationError as all Fields are immutablecrawler.user_id=2

显示嵌套字段类型的稍微复杂的示例:

^{pr2}$

什么是服务?在

服务是执行某些业务逻辑的域模型的一部分。通常,它们处理一组输入并更改某些状态或返回计算值。在Python这样的非类型安全语言中,输入验证和处理动态输入的程序的通用接口可能是一个问题。在

一些阅读资源:

文件

查看文档:https://kpchand.github.io/fireservice/。 如果重定向失败,则直接转到here。在

扩大消防服务

我们也可以创建自定义字段。假设我们的应用程序采用模式xxx yyy zzz的用户ID。我们可以创建一个StringField,并使用一个自定义的validator。但是,如果我们有一个Field类型在默认情况下进行验证,那么它将更加方便和声明性。下面是这样一个实现的例子:

classIDField(StringField):"""A Field which takes input in the pattern xxx-yyy-zzz.    """defdefault_validator(self,value):# Use StringField validator to validate strsuper().default_validator(value)value=value.split('-')iflen(value)!=3ornotall([len(v)==3forvinvalue]):raiseValidationError(self.name,'Improper format')classService(FireService):user_id=IDField()deffire(self,**kwargs):print('user_id: ',self.user_id)s=Service()s.call({'user_id':'foo-bar-baz'})

灵感

FireService的灵感来源于django-service-objects,但其设计目的是与任何框架一起工作,并且尽可能接近原始Python。在

为什么叫消防队?在

当您调用call()时,它将启动fire(),而{}又会启动FireService。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从IBM MQ的JMSException检测可恢复错误   java Lucene6。4.2:找不到类,尝试添加查询。   Java Pdf差异库   在Java中多线程处理我的线程   java将字符串传递给Uri。下载中的parse()   java在列表中查找原语位置   java JPA条件从另一个查询中选择   java中的强制转换和转换   java如何在没有上下文的情况下获取SOAP Web服务(Apache Axis 1.4)的调用客户端的IP地址   java Android IllegalBlockSizeException:解密中最后一个块未完成   java Jersey是否要自定义无效资源路径的错误处理?   如何将JavaCVS web项目转换为基于maven的web项目?   java如何检查通用列表是否与jUnit相等?   arraylist java。util。尝试使用迭代器时发生ConcurrentModificationException错误   使用springsecurity,jsp上的java${u csrf.token}始终为空   sql使用java从临时表中选择数据   spring验证中的java@Notnull和@Pattern无效   java如何使用jQuery将包含对象数组的对象数组传递给Spring MVC控制器?