跳转到主要内容

各种开发辅助方法。

项目描述

https://github.com/IMIO/imio.helpers/actions/workflows/main.yml/badge.svg?branch=master https://coveralls.io/repos/IMIO/imio.helpers/badge.png?branch=master PyPI badge

imio.helpers

各种开发辅助方法。

需求

条形码生成方法使用zint工具(https://sourceforge.net/projects/zint/)。

您必须安装zint版本 >= 2.6.0。

缓存

使用cache.get_plone_groups_for_user(the_objects=True)代替portal_groups.getGroupsForPrincipal,避免使用portal_groups.getGroupById,而使用source_groups.get。

变更日志

1.1.0 (2024-10-02)

  • 从imio.pyutils导入batch_delete_files,如果有人在这里使用它。[sgeulette]

  • 如果没有分批处理,则认为批处理已完成。[sgeulette]

1.0.1 (2024-09-18)

  • 生成通用wheel版本。[sgeulette]

1.0.0 (2024-09-16)

  • 改进了emailer.send_email,使用send代替securesend(不使用队列)。[sgeulette]

  • 添加了对应于01/01/1950 at 12:00EMPTY_DATETIME值。[gbastien]

  • 改进了批处理模块[sgeulette]

  • 添加了batching.can_delete_batch_files[sgeulette]

1.0.0rc4 (2024-07-08)

  • 添加了处理空索引搜索的“空”变量。[sgeulette]

1.0.0rc3 (2024-06-07)

  • 添加了将禁用链接2秒并避免双击的JS辅助函数temp_disable_link。[gbastien]

1.0.0rc2 (2024-04-10)

  • 添加了批处理模块。[sgeulette]

  • 修复了JS函数submitFormHelperOnsuccessDefault管理返回结果的错误方式,现在我们有正确的filename。[gbastien]

  • 添加了transmogrifier Expression和Condition类,以记录表达式编译或解释错误。[sgeulette]

  • 删除了content.safe_encode,因为它已在imio.pyutils中定义。在imio.helpers.content中从imio.pyutils导入它以实现临时向后兼容,将予以删除。[gbastien]

  • 覆盖了@@folder_contents,使其与DashboardCollection一起工作。[gbastien]

  • Monkeypatched plone.app.querystring.registryreader.getVocabularyValues以在Plone4中保持词汇顺序,Plone5+中的行为是正确的。管理每个HAS_PLONE_X值。[gbastien]

1.0.0rc1 (2024-02-08)

  • 使其与Plone 4、Plone 5、Plone 6兼容[boulch, laulaz, sgeulette]

  • 在< cite >setup.py中需要pathlib2,为py2.7回退pathlib。[gbastien]

  • 添加了security.setup_app以在运行脚本中使用。[sgeulette]

  • 添加了setup.load_xml_tool_only_from_package以仅加载主工具xml文件。[sgeulette]

  • 添加了setup.test_remove_gs_step以删除通用设置步骤。[sgeulette]

  • 添加了imio.helpers.YesNoForFacetedVocabulary[sgeulette]

  • 修复了不返回默认值的content.base_getattr。[gbastien]

0.80 (2023-12-11)

  • content.get_user_fullname添加了参数with_user_id,这将包括用户id在括号中,如Firstname Lastname (userid)。[gbastien]

  • security.get_user_from_criteria添加了参数userid[sgeulette]

0.79 (2023-11-28)

  • 改进了security.get_user_from_criteria,以在ldap结果中添加电子邮件和描述。[sgeulette]

  • 包含Products.CMFCore权限.zcml[sgeulette]

0.78 (2023-10-27)

  • 添加了将返回给定WF最终状态的workflow.get_final_states。[gbastien]

0.77 (2023-10-19)

  • 添加了将解码HTML文本的HTML实体的xhtml.unescape_html。[gbastien]

0.76 (2023-09-28)

  • 添加了 transmogrifier.get_correct_id,用于生成带有编号或字母后缀的不存在的ID。[sgeulette]

  • transmogrifier.correct_path 重命名为 transmogrifier.get_correct_path。[sgeulette]

0.75 (2023-09-04)

  • 修复了 setup.load_type_from_package 在加载Dexterity FTI时的错误,因为它无法清除旧值。对于 Dexterity FTI,禁用了清除,添加了新参数 purge_actions=False,该参数将移除 Dexterity FTI 的操作,使其以正确顺序重新加载。[gbastien]

  • 改进了 transmogrifier.str_to_date,添加了最小值和最大值限制。[sgeulette]

  • 修复了在 content.sort_on_vocab_order 中出现的 ValueError: ‘value’ is not in list 错误,当给定的 p_values 中的值不在给定的 p_vocab 中时。[gbastien]

0.74 (2023-08-24)

  • 修复了在检查注释时 cache.obj_modified 的问题,注意当存储的注释中的值变化且该注释是 PersistentMapping 时,不要更改 _p_mtime。还删除了参数 asstring=False,当 asdatetime=False 时,返回值是浮点数,便于用作缓存键。[gbastien]

  • content.uuidsToObjectscontent.uuidsToObjectcontent.uuidsToCatalogBrainsuuidsToCatalogBrain 中添加了 catalog 参数,以允许查询其他目录(例如 uid_catalog)[mpeeters]

0.73 (2023-07-20)

  • content.get_user_fullname 中增加了防御性措施,在某些情况下,在 mutable_properties 中找到了用户ID,但没有与之关联的属性。[gbastien]

  • 改进了 transmogrifier.clean_value,提供了替换值。[sgeulette]

0.72 (2023-07-12)

  • submitFormHelperOnsuccessDefault JS函数中,只有当 content-typeapplication/xxx 时才管理 blob。[gbastien]

  • 添加了 content.sort_on_vocab_order,它将根据给定的词汇表术语顺序对值列表进行排序。这依赖于来自 imio.pyutilssort_by_indexes,现在它是一个依赖项。[gbastien]

0.71 (2023-07-07)

  • 修改了 transmogrifier.relative_path,添加了选项以保留前导斜杠(默认为True)。[sgeulette]

  • content.get_user_fullname 中,如果在最后找不到 fullname,最终将回退到 portal_membership.getMemberInfo,这在使用LDAP时有时是必要的。[gbastien]

  • 删除了为 get_state_infosget_transitionsdo_transitions 提供的向后兼容导入,它们已从 content 移动到 workflow。[gbastien]

0.70 (2023-06-21)

  • 添加了 security.check_zope_admin(从 Products.CPUtils 移动而来)。[gbastien]

  • 改进了 transmogrifier.filter_keys。[sgeulette]

  • 添加了 workflow.update_role_mappings_for 辅助程序,用于更新给定对象的WF角色映射。[gbastien]

0.69 (2023-05-31)

  • CatalogTool._listAllowedRolesAndUsers 进行了Monkeypatch,添加了 ram.cache 装饰器。[gbastien]

0.68 (2023-05-12)

  • 在transmogrifier模块中添加了 split_text。[sgeulette]

  • 添加了 workflow.get_leading_transitions,它将返回指向给定 state_id 的所有WF转换。[gbastien]

0.67 (2023-03-29)

  • 在transmogrifier模块中添加了 clean_valuecorrect_pathfilter_keysget_obj_from_path。[sgeulette]

  • 在transmogrifier模块中添加了 key_valpool_tuplesstr_to_date。[sgeulette]

  • text_int_to_bool 重命名为 str_to_bool。[sgeulette]

0.66 (2023-02-13)

  • 添加了 transmogrifier 模块,包含 get_main_pathrelative_pathtext_int_to_bool 函数。[sgeulette]

  • get_user_fullname 函数中添加了 none_if_unfound 参数。[sgeulette]

  • 在JS函数 callViewAndReload 中添加了参数 onsuccess=false,以便在成功后触发自定义JS代码。[gbastien]

  • 添加了 xhtml.is_html,它将返回True或False,表示给定的文本是否为HTML。[gbastien]

  • 当电子邮件姓名中包含重音字符时,引发验证错误。[sgeulette]

0.65 (2022-12-07)

  • 当使用 get_again=True 调用 cache.invalidate_cachekey_volatile_for 时,返回新日期。[gbastien]

  • 使用 dict.items 代替 dict.iteritems 以实现Py2/Py3兼容性。[gbastien]

0.64 (2022-10-28)

  • 添加了 workflow.remove_state_transitions 函数,用于删除状态上的转换并清除重复项。[sgeulette]

  • 对缓存方法添加了更多测试。[sgeulette]

0.63 (2022-09-01)

  • 在调用 GroupAwareRoleManager.assignRolesToPrincipalZODBRoleManager.assignRoleToPrincipalZODBRoleManager.removeRoleFromPrincipal 后,无效化‘_users_groups_value’的易失性。[sgeulette]

  • 移除了重复的分类器。[sgeulette]

0.62 (2022-08-19)

  • 使用 IMIOStorage 添加了 IMIORAMCache 以延长使用的缓存时间并提高显示的统计数据。[gbastien]

  • 根据 decorate_acl_methods 环境变量添加了各种 acl 方法的缓存。[gbastien, sgeulette]

  • 添加了 IIMIOLayer BrowserLayer(需要执行升级步骤到 2)。[gbastien]

  • 覆盖了 caching-controlpanel-ramcache 以计算 HitsMissesSizeEntries 的总数,显示 Older entry,当发生 pickle 错误时不要中断以显示统计数据,但添加一个门户消息。[gbastien]

  • cache.get_cachekey_volatile 添加了参数 ttl=0,这样超过给定 ttl(秒)的日期将被重新计算。

  • content.get_user_fullname 中添加了 'none_if_no_user' 参数。[sgeulette]

  • content.get_user_fullname 中始终返回 unicode。[sgeulette]

  • 添加了基于 iA.delib 的有用方法的 test_helpers.ImioTestHelpers 类。[sgeulette]

  • 添加了 vocabularies.SimplySortedUsers 并修改了 vocabularies.SortedUsers。[sgeulette]

  • 添加了 cache.get_users_in_plone_groups。[sgeulette]

  • 添加了 setup.load_type_from_package 以重新加载单个类型。将 workflow.load_workflow_from_package 移动到 setup.load_workflow_from_package。[gbastien]

0.61 (2022-07-01)

  • 将与工作流相关的函数从内容移动到工作流模块。[sgeulette]

  • 添加了 workflow.load_workflow_from_package 以重新加载单个工作流。[sgeulette]

  • 在 JS 函数 toggleDetails 中,如果标签不可用,请进行防御性处理。[gbastien]

0.60 (2022-06-24)

  • set_site_from_package_config 中处理了未找到的站点。[sgeulette]

0.59 (2022-06-21)

  • xhtml.object_link 上添加了 escaped=True 参数。[sgeulette]

  • 需要足够新的 future 版本,以便可以使用 html.escape。[gbastien]

  • xhtml.storeImagesLocally 添加了参数 replace_not_found_image=True,当 True(默认)且无法检索到图像时,将使用 Not found 图像。这解决了复制/粘贴另一个站点中的私有图像的问题,由于共享身份验证在浏览器中可用,但不能检索。[gbastien]

0.58 (2022-06-14)

  • 添加了 get_zope_root 以获取 zope 应用程序。[sgeulette]

  • set_site_from_package_config 中添加了 zope_app 参数。[sgeulette]

  • 修复了 xhtml.replace_content,确保替换整个内容,包括子标签。[gbastien]

0.57 (2022-06-10)

  • 添加了 NoEscapeLinkColumn 作为用于渲染 html 的链接列的基础。转义必须在继承的列中完成。[sgeulette]

  • content.uuidToObject 现在在未找到 uuid 时将返回 None 而不是空列表。[gbastien]

  • security.set_site_from_package_config 中移除了 zope.app.publication 依赖项,因为它现在已经从 Plone >= 5.2.6 中移除。[aduchene]

0.56 (2022-05-13)

  • 添加了 setup_ram_cache 方法。[sgeulette]

  • 添加了 set_site_from_package_config 方法。[sgeulette]

0.55 (2022-05-06)

  • 改进了 get_relations 以获取可选引用的对象。[sgeulette]

0.54 (2022-03-25)

  • 基于 content.get_vocab 添加了 content.get_vocab_value,但返回值(默认为 attr_name=’token’,也可以是 valuetitle)。

  • 基于 SimpleTerm 添加了 EnhancedTerm,为术语提供 attrs 字典。[sgeulette]

  • 添加了 cache.cleanForeverCache,这将清除使用 @forever.memoize 装饰器的函数的缓存。[gbastien]

0.53 (2022-03-17)

  • 重构了 get_object。[sgeulette]

0.52 (2022-01-12)

  • 添加了 cache.obj_modified 函数,它返回 obj.modified()、obj._p_mtime 和 __anotations__._p_mtime 之间的最大值。[sgeulette]

  • 添加了 cache.extract_wrapped 函数,它返回原始装饰过的函数。这在测试中比较缓存的和非缓存的输出很有用。[sgeulette]

  • 更新了 git 拉取 URL。[sgeulette]

0.51 (2022-01-03)

  • 添加了对端口 465 上的 SSL 邮件发送器的 monkey patch。[sgeulette]

  • 添加了 content.base_getattr 方法,它将无获取地进行 getattr。[gbastien]

0.50 (2021-11-26)

  • 添加了 content.get_transitions 以获取可用的转换 ID(因为 wfTool.getTransitionsFor 返回包含转换信息的字典列表)。[gbastien]

  • 添加了 adapters.MissingTerms,一个基本的 z3c.form 缺失术语适配器,可以被本地包扩展。[gbastien]

  • 当使用 cache.get_cachekey_volatile 时添加了缓存自动失效机制,调用者方法可以传递,它的名字存储在 volatile 注册表中,然后当调用 cache.invalidate_cachekey_volatile_for 并设置 invalidate_cache=True 时,将从 ram.cache 中使每个缓存方法失效。这将使得过时的缓存在日期改变时立即失效,现有的缓存将不再被使用。[gbastien]

0.49 (2021-11-08)

  • 因为我们需要 content._parse_object_provides_query,所以需要 plone.api>1.9.1。这是必要的,因为我们添加了 content.find。[gbastien]

0.48 (2021-10-20)

  • content.ur_find 重命名为 content.find,具有无限制参数。[sgeulette]

  • 修复了 content.find,避免了当相应循环对象被删除时出错。[sgeulette]

0.47 (2021-10-13)

  • 修复了当用户没有全名时会导致错误的 content.get_user_fullname。[gbastien]

  • 添加了 content.ur_find,它与 api.content.find 相同,但不受限制。[sgeulette]

0.46 (2021-09-28)

  • 添加了 xhtml.replace_content 函数,该函数将替换给定 XHTML 标签的内容。这依赖于通过 imio.helpers[lxml] 添加的额外依赖项 cssselect。[gbastien]

0.45 (2021-07-16)

  • 添加了 imio.helpers.SortedUsers,这是一个使用 natsort.humansorted 排序的用户词汇表。我们需要依赖 natsort 来处理这个问题。[gbastien]

  • 修复了在 submitFormHelper 的 onsuccess 调用时被调用的 JS 函数 submitFormHelperOnsuccessDefault 中的错误,使其仅当响应头 content-length 在请求中找到时将响应视为文件返回,这避免了在调用代码返回错误消息时返回错误的 blob 对象。[gbastien]

0.44 (2021-06-15)

  • xhtml.separate_images 中稍微降低了一点防御性,过于复杂的案例仍然被忽略,但当 <p> 只包含非文本元素如 <br> 或空白时,只需忽略这些元素。[gbastien]

0.43 (2021-05-31)

  • 在验证后降低电子邮件地址的大小写。[sgeulette]

  • 修复了 submitFormHelperOnsuccessDefault JS 函数以处理二进制响应,因此可以下载 AJAX 查询的结果。[gbastien]

  • 添加了 xhtml.imagesToData,它将 xhtml 内容中使用的图像的 src 从 http 或等效 URL 转换为数据 base64 值。[gbastien]

0.42 (2021-04-30)

  • barcode.generate_barcode 添加了参数 filetype='PNG',以便可以使用其他受支持的图像文件格式。[gbastien]

  • emailer.send_email 添加了参数 replyto,以便可以在消息中添加 reply-to 头。[sgeulette]

  • 适配了 content.object_valuescontent.object_ids,以便能够传递单个类名或类名列表,就像 objectValues/objectIds 的情况一样。[gbastien]

0.41 (2021-04-21)

  • 修复了电子邮件器中的编码问题。[sgeulette]

0.40 (2021-04-01)

  • object_link 函数中添加了 target 选项。[sgeulette]

  • 添加了 ZPublisher :json 后缀类型转换器。[gbastien]

  • 更改了 MockMailHost 补丁以避免一些问题。[sgeulette]

  • xhtml.storeImagesLocally 处理使用 base64 编码数据(如 data:image/png;base64,…)src 属性的图像。[gbastien]

0.39 (2021-02-25)

  • 添加了 validate_email_address 来检查具有真实姓名部分的电子邮件地址。[sgeulette]

  • 添加了 validate_email_addresses 来检查以逗号分隔的电子邮件地址。[sgeulette]

  • 添加了 content.get_modified_attrs,当在 IObjectModifiedEvent 处理程序中调用时,将返回实际修改的字段名称列表。[gbastien]

  • 返回电子邮件发送错误消息。[sgeulette]

  • 添加了 content.uuidToCatalogBrain,它是 content.uuidsToCatalogBrains 的快捷方式,但将返回单个值。[gbastien]

  • 添加了 content.object_valuescontent.object_ids 方法,相当于 Zope 的 objectValuesobjectIds,但将检查包含的元素类名而不是 meta_type,因此它适用于 meta_type 对每种类型都相同的 DX 内容类型。[gbastien]

  • 添加了 content.uuidToObject,它是 content.uuidsToObjects 的快捷方式,但将返回单个值。[gbastien]

  • 修复了 submitFormHelperOnsuccessDefault js 中的 has_faceted 函数调用。[sgeulette]

  • 当在非分面页面上使用 submitFormHelper 时重新加载页面 [sgeulette]

  • 向 JS 辅助函数 toggleDetails 添加了参数 toggle_type='slide',因此可以使用 slideToggle(默认)或 fadeToggle。当隐藏部分包含粘性元素(表格标题)时,fadeToggle 的表现更好。[gbastien]

0.38 (2021-01-06)

  • 添加了 content.normalize_name,该功能将规范化给定名称,这是在创建新内容时将标题转换为 ID 所使用的代码。[gbastien]

0.37 (2020-12-21)

  • 添加了 JS 函数 submitFormHelper,该函数将提交指定的表单,并在 onsuccess 中调用参数中的函数(默认情况下,当在叠加层中调用时,将关闭叠加层并重新加载分面导航)。[gbastien]

  • 添加了 security.fplog 辅助函数,以简化将 collective.fingerpointing 消息添加到日志中的操作。[gbastien]

  • plone.app.relationfield 添加为直接依赖。[gbastien]

0.36 (2020-12-07)

  • 添加了电子邮件函数(create_html_emailadd_attachmentsend_email),用于创建并发送带有附件的电子邮件。[sgeulette]

  • 优化了 xhtml.separate_images,仅当树包含图像(img 标签)时才遍历树。[gbastien]

  • content.richtextvaloutputMimeType 参数更改为使用 text/x-html-safe 而不是 text/html。[gbastien]

  • 将 JS 函数 loadCollapsibleContent 重命名为 loadContent,因为可以在 collapsible 范围之外使用它。[gbastien]

0.35 (2020-11-18)

  • 添加了 JS 辅助方法 canonical_url,以获取当前的标准 URL,以便在视图时获取上下文的 URL。[gbastien]

  • toggleDetails JS 函数中,将执行异步加载的部分移动到 loadCollapsibleContent 函数中,以便可以从外部调用它。[gbastien]

  • 添加了 get_user_from_criteria 辅助方法,通过电子邮件或全名搜索用户。[sgeulette]

  • transitions 方法中添加了参数,默认情况下不警告。[sgeulette]

  • 完成了 appy_pod 用例,font-size 50%/150%。[gbastien]

  • 添加了 catalog.merge_queries 函数,该函数将兼容 plone.app.querystring 的目录查询合并为一个单一查询。[gbastien]

  • xhtml.storeImagesLocally 中,如果获取内部图像时发生 NotFound,则不会中断。[gbastien]

0.34 (2020-10-16)

  • 将 JS 函数 setoddevenlistings.js 移动到 helpers.js,以便默认情况下可用。[gbastien]

  • 在安全模块中添加了 setup_logger,以更改日志记录器级别(例如,在执行 instance run 时)[sgeulette]

0.33 (2020-10-01)

  • 添加了 content.get_relationscontent.get_back_relations,以便轻松获取对象的关系和反向关系。[gbastien]

  • xhtml.storeImagesLocally 中,如果图像 URL 包含非 ASCII 字符,则不会中断。[gbastien]

  • 添加了 xhtml.separate_images,确保图像在不同的 <p> 中分离,以避免在 LibreOffice 6.0.x 中使用 appy.pod 时中断。[gbastien]

0.32 (2020-09-10)

  • catalog.addOrUpdateIndexescatalog.reindexIndexes 中,每 1000 个元素记录一次,而不是每 100 个元素记录一次。[gbastien]

  • 修复了代码,使其与 Python 3.8 兼容的 except Exception 语法。[gbastien]

0.31 (2020-08-18)

  • 正确翻译了 utf8 状态标题。[sgeulette]

  • 添加了 content.safe_delattr,以避免在之前需要检查 base_hasattr。[gbastien]

  • 添加了 JS 辅助函数 toggleDetails,以便使用可折叠的 <div> 显示/隐藏详细信息。[gbastien]

  • 完成了 appy_pod 用例,固定图像以使用 https://picsum.photos/ 而不是 https://www.imio.be。[gbastien]

0.30 (2020-06-24)

  • content.uuidsToObjects 中,如果参数 unrestricted=True,则使用 brain._unrestrictedGetObject 获取对象。[gbastien]

0.29 (2020-05-28)

  • content.uuidsToCatalogBrainscontent.uuidsToObjects 添加了参数 unrestricted=False,当 True 时,目录搜索不受限制。[gbastien]

0.28 (2020-05-26)

  • richtextval 方法添加了 outputMimeType 参数。[sgeulette]

  • content.uuidsToCatalogBrains 添加了参数 query={},这样就可以在具有 UIDs 的情况下完成目录查询,并且您希望根据其他索引(如 review_state)对其进行过滤。[gbastien]

  • 在方法 catalog.addOrUpdateIndexescatalog.removeIndexescatalog.removeColumnscatalog.reindexIndexes 中添加了新的参数 catalog_id=’portal_catalog’,以便可以使用除 portal_catalog 之外的另一个目录。[gbastien]

  • content.uuidsToCatalogBrainscontent.uuidsToObjects 中添加了参数 check_contained_uids=False,当设置为 True 时,如果对 UID 索引的查询返回空结果,并且 portal_catalog 中存在 contained_uids 索引(这是一个用于索引未索引元素的 UIDs 的特殊索引),则会查询 contained_uids 索引。[gbastien]

  • 添加了标记接口 IContainerOfUnindexedElementsMarker 以标记包含未索引对象的对象。[gbastien]

0.27 (2020-04-20)

  • xhtml.imagesToPath 中,如果 <img> 使用了错误的 resolveuid/unknown_uid,则不要中断。[gbastien]

  • 修复了测试,使其不使用来自 https://www.imio.be/ 网站的图片,而是使用来自 https://i.picsum.photos/ 网站的图片。[gbastien]

0.26 (2020-02-25)

  • 添加了 set_to_annotation 方法。[sgeulette]

  • 在注释函数中始终返回一些内容。[sgeulette]

0.25 (2019-11-26)

  • xhtml.storeImagesLocally 中添加了日志记录,如果无法遍历到 img_path。[gbastien]

  • 修复了 xhtml.storeImagesLocally 中的错误,其中在其他具有以当前元素 absolute_url 开头的 absolute_url 的 Plone 元素中存储的图像没有本地存储。[gbastien]

0.24 (2019-11-25)

  • 删除了 collective.iconifiedcategory 翻译文件的错误覆盖。[gbastien]

  • 在 get_schema_fields 中添加了可选的行为前缀。[sgeulette]

  • 修复了 xhtml.storeImagesLocally._handle_internal_image 中的错误,以确保遍历到图像的路径不以 / 开头,否则将失败并抛出 KeyError。这是当 Plone Site 使用域名时的情况。同时确保遍历的 img_path 元素实际上是一个 Image。[gbastien]

0.23 (2019-09-12)

  • 添加了辅助方法 content.get_vocab,可以轻松获取 IVocabularyFactory 词汇实例或仅获取工厂(当参数 only_factory=True 时)。[gbastien]

  • 添加了辅助方法 catalog.reindexIndexes,使能够使用 ZLogHandler 日志输出重新索引特定的 portal_catalog 索引。[gbastien]

  • 添加了使用 AJAX 调用 callViewAndReload 的 JavaScript 函数。来自 PloneMeeting ;-[sgeulette]

  • 添加了 get_state_infos(用于 PM 和 plonetheme.imioapps)。[sgeulette]

0.22 (2019-08-23)

  • catalog.addOrUpdateColumns 中添加了参数 update_metadata,如果设置为 True(默认值),则新添加的元数据将在每个目录对象上更新。[gbastien]

  • 添加了返回对象 HTML 链接的函数。[sgeulette]

0.21 (2019-08-13)

  • cache.invalidate_cachekey_volatile_for 中添加了参数 get_again=False,当设置为 True 时,这将在缓存失效后立即调用 cache.get_cachekey_volatile,以便我们获取一个新鲜的日期存储。这有助于避免异步请求调用 cache.get_cachekey_volatile 时写入。[gbastien]

0.20 (2019-07-19)

  • xhtml.storeImagesLocally 中,如果找到了 resolveuid 但找不到图像,则不要中断。这可能是从另一个实例复制/粘贴 HTML 代码的情况。[gbastien]

  • xhtml.removeBlanks 中,通过调用 xhtml.xhtmlContentIsEmpty 并将参数 tagWithAttributeIsNotEmpty=False 传递给它来检查内容是否为空,因此带有属性的空标签被认为是空的。[gbastien]

0.19 (2019-07-05)

  • 从 collective.solr 修复了索引方法以解决部分重新索引的问题。[mpeeters]

  • 在 container.pt 和 content.pt 中添加了行字段显示的 CSS id。[sgeulette]

0.18 (2019-05-16)

  • 添加了 appy.pod 示例,展示了错误定义样式(例如 margin-left: opt; 使用 opt 而不是 0pt)的问题。[gbastien]

  • 添加了 appy.pod 示例,展示了在 <li><td> 中未使用类的问题。[gbastien]

  • 添加了方法 content.disable_link_integrity_checkscontent.restore_link_integrity_checks,以能够禁用 enable_link_integrity_checks 属性 并将其恢复到原始值。这适用于 Plone4(属性)和 Plone5(注册表)。[gbastien]

  • 修复了在 Plone5 中导入 IEditingSchema 的问题。[gbastien]

0.17 (2019-02-12)

  • 在容器视图中添加可折叠选项。[sgeulette]

  • 不要在volatile (_v_…)中存储get_cachekey_volatile/invalidate_cachekey_volatile_for的日期,因为它似乎是由线程“存储”的,并且计算次数过多。[gbastien]

  • 添加了JS辅助方法has_faceted,如果当前在faceted中返回true。[gbastien]

0.16 (2019-01-31)

  • 添加了appy.pod用例以显示当<td>有定义大小时的表优化问题。[gbastien]

  • 添加了appy.pod用例以显示当表格有第一个空的<tr></tr>时的问题,这些行不会渲染下一行的第二列。[gbastien]

  • 添加了appy.pod用例以展示line-height样式的问题。[gbastien]

  • 添加了appy.pod用例以展示没有src<img>破坏生成的问题。[gbastien]

  • 如果<img>没有src,不要在xhtml.imagesToPath中中断。[gbastien]

0.15 (2018-12-18)

  • 在跳过验证时,在content.validate_fields中显示更多日志。[gbastien]

  • catalog.addOrUpdateIndexes中,将ZLogHandler传递给reindexIndex,以便在Zope日志中显示进度。[gbastien]

  • content.add_to_annotationcontent.del_from_annotation中,将注释存储在PersistentList而不是set()中,以避免持久性问题。[gbastien]

0.14 (2018-10-22)

  • 改进了内容创建,以避免在定义的id已存在时创建对象。[sgeulette]

  • 添加了content.uuidsToCatalogBrains和content.uuidsToObjects方法。[gbastien]

  • 调整了content.validate_fields,以在field.required=False,值为None且字段类型不是Bool时跳过验证。由于目前失败,因此也跳过使用source属性的字段验证。[gbastien]

  • 向content.validate_fields添加了参数raise_on_errors,当发现错误时引发ValueError,而不是简单地返回它。[gbastien]

0.13 (2018-08-31)

  • 添加了content.get_schema_fields以获取模式字段(默认包含由行为包含的)[sgeulette]

  • 对导入进行了Pep8。[sgeulette]

  • 添加了appy.pod用例,用于包含表格的列表。[bleybaert]

  • setup.py中添加了对Plone的依赖。[gbastien]

  • 如果图像src不是图像路径而是另一个元素(如FolderPlone Site),不要在xhtml.storeImagesLocally._handle_internal_image中中断。[gbastien]

0.12 (2018-05-03)

  • 添加了appy.pod用例以展示rgba()。[gbastien]

  • 改进了注释代码[sgeulette]

0.11 (2018-01-30)

  • 使用html而不是xml作为lxml.html.to_string的渲染方法。这避免了像<p><s></s></p>这样的结果被转换为<p><s/></p>。[gbastien]

0.10 (2017-12-21)

  • 修复了catalog.addOrUpdateIndexes中的错误,其中新索引未重新索引,因为它是在与已存在的索引一起添加时。[gbastien]

  • 修复了xhtml.storeImagesLocally中的错误,当img使用resolveuid并以portal_url开头时(这是在collective.ckeditor中使用uploadimage插件的情况),它引发了NotFound错误。[gbastien]

  • xhtml.storeImagesLocally中,使用resolveuid保留URL末尾的scale(如resolveuid/content_uid/image_preview)。[gbastien]

  • 使用PyPDF2而不是已弃用的pyPdf将条码插入PDF。这解决了ValueError: invalid literal for int() with base 10: ‘’问题。[gbastien]

0.9 (2017-11-27)

  • 添加了appy.pod用例,用于复杂样式开始/结束在同一段落。[gbastien]

  • 如果没有找到<img> src,不要在xhtml.storeImagesLocally中中断。[gbastien]

  • 添加了管理注释的方法(添加和删除)[anuyens, odelaere]

  • 添加了获取注释的方法[sgeulette]

0.8 (2017-10-04)

  • xhtml.storeImagesLocally中,考虑使用resolveuid<img> src。这是在启用collective.ckeditor中的allow_link_byuid选项时的情况。[gbastien]

  • 不要在helpers.js注释或合并的javascripts中使用/* … */https://一起,否则会产生错误格式并引发浏览器中的JS注释未终止错误。[gbastien]

0.7 (2017-09-22)

  • testing.py中添加了testing_logger方法,它启用测试中的日志记录。[gbastien]

0.6 (2017-09-15)

  • 将方法 xhtml.storeExternalImagesLocally 更改为 xhtml.storeImagesLocally,现在它处理外部和内部图像的检索,因此当需要时,门户中存储的图像也将创建在给定上下文中。[gbastien]

0.5 (2017-08-30)

  • 添加了安全编码字符串的方法。[sgeulette]

  • appy.pod 用例:使用宽度为 0px 的表格。[gbastien]

  • content.validate_fields 中,为 Choice 字段添加了特殊绕过,该字段 required=False 并且给定值为 None。验证失败,因为 None 不在词汇表中,但它仍然是一个正确的值,因为它通过 UI 添加时由小部件管理。[gbastien]

  • 添加了 JS 修复,以便在 Firefox 的多个页面上打印 <fieldset>,请参阅 https://bugzilla.mozilla.org/show_bug.cgi?id=471015。这使得必须添加默认配置文件以添加 JS 资源 ++resource++imio.helpers/helpers.js。[gbastien]

0.4.29 (2017-07-25)

  • 获取 intid 值或如果找不到则创建它。[sgeulette]

  • 添加了将 'scale' 值传递给 pdf.BarcodeStamp 的可能性。[gbastien]

  • 更多的 appy.pod 用例:没有父项的子项未渲染。[gbastien]

0.4.28 (2017-07-04)

  • 添加了创建 NamedBlobFile 或 NamedBlobImage 的方法。[sgeulette]

0.4.27 (2017-06-30)

  • 在创建内容时,如果 obj_path 是 /,则返回门户。[bsuttor]

  • 为 appy.pod 添加了用例,以显示在 appy.pod 0.9.7 中失败的复杂 HTML 结构。[gbastien]

  • 在 fancytree 中添加了根属性。[sgeulette]

  • 更改了条形码生成选项,遵循 zint 2.6。[sgeulette]

0.4.26 (2017-03-14)

  • 设置 CLASS_TO_LAST_CHILDREN_NUMBER_OF_CHARS_DEFAULT = 240。[gbastien]

0.4.25 (2017-02-21)

  • 使用与 appy.pod 中的“保留下一页”功能相同的类名。[gbastien]

0.4.24 (2017-02-14)

  • 在 content.validate_fields 中,通过调用 bind(obj) 初始化字段,因此可以访问词汇表等必要事物。[gbastien]

0.4.23 (2017-02-14)

  • 添加了 content 模块测试。[sgeulette]

  • 改进了 get_object、add_image、add_file、create 方法。[sgeulette]

  • 添加了 content.validate_fields,它将验证给定 dexterity 对象的字段。[gbastien]

0.4.22 (2016-12-21)

  • 添加了更多测试 appy.pod 渲染的用例:“text-decoration: none;”,复杂的真实表格示例等……[gbastien]

  • 添加了 xhtml.removeCssClasses 方法,以便能够从给定的 xhtmlContent 中删除一些特定的 CSS 类。[gbastien]

0.4.21 (2016-12-05)

  • 添加了 xhtml.addClassToContent 方法,它允许向给定的 xhtmlContent 的 CONTENT_TAGS(<p>、<strong> 等)添加 CSS 类。[gbastien]

  • 添加 @volatile_cache_without_parameters 和 @volatile_cache_with_parameters 装饰器。[mpeeters]

  • 在门户上存储可变键的字典。[mpeeters]

  • 可以向对象添加文件。[sgeulette]

  • 在 'appy_pod_sample' 中添加了用例,以检查当在 <li> 或包含 <p> 或 <span> 的 <li> 上直接使用样式属性定义斜体/粗体/下划线/删除线时的情况。[gbastien]

0.4.20 (2016-10-05)

  • 添加了 'path' 模块,其中包含 'path_to_package' 方法,它将返回给定包的绝对文件系统路径。可以提供额外的 'filepart' 来完成返回的路径。这对于获取“browser/template”文件夹中的模板非常有用。[gbastien]

0.4.19 (2016-09-26)

  • 不要使用 lxml.html.tostring 返回的 HTML 的 pretty_print,否则可能导致奇怪的行为,例如在嵌套 <span> 标签的情况下出现额外的空白空间。'pretty_print' 现在是相关方法的参数,默认为 False。[gbastien]

  • 添加了从字典创建内容、根据标准获取对象、应用多个转换、创建 RichTextValue 对象的方法。[sgeulette]

  • 为 Dexterity 内容和容器添加了默认视图,这些视图以表格的形式显示字段,其中包含小部件标签和左侧的小部件值,以及右侧的小部件值。容器的视图还包括异步的 folder_listing,它列出包含的元素。取自 imio.project.core。[gbastien]

0.4.18 (2016-06-17)

  • 生成条形码时默认使用 scale=2 而不是 scale=4。[gbastien]

  • 添加了方法 int2word、wordizeDate 和 formatDate,旨在将数字转换为法语翻译,将仅包含数字的日期转换为完整日期,并格式化日期(带有小时、完整月份名称等)。[DieKatze]

0.4.17 (2016-03-22)

  • 添加了常量 CLASS_TO_LAST_CHILDREN_NUMBER_OF_CHARS_DEFAULT,用于在 xhtml.addClassToLastChildren 中标记最后一个标签时定义默认要考虑的字符数。这样它可以在其他包中使用。[gbastien]

  • 修复了 xhtml.imagesToPath,以正确处理使用 'resolveuid' 的图像 src。[gbastien]

0.4.16 (2016-03-14)

  • 修复了 xhtml.storeExternalImagesLocally,如果下载的外部图像没有 'Content-Disposition' 标头。[gbastien]

0.4.15 (2016-03-14)

  • 添加了辅助工具,可以轻松测试 appy.pod 渲染,通过将完整 HTML 内容加载到任何内容(AT 或 DX)中,并通过指定富文本字段名来实现。[gbastien]

  • 添加了 xhtml.imagesToPath 方法,将用于 xhtml 内容的图像 src 从 'http' 或等效路径转换为文件系统上的绝对路径到 .blob 图像文件。[gbastien]

  • 添加了 xhtml.storeExternalImagesLocally 方法,确保外部引用的图像被下载、本地存储,并且 xhtmlContent 被相应地调整。[gbastien]

0.4.14 (2016-02-25)

  • 添加了 cache.get_cachekey_volatile 和 cache.invalidate_cachekey_volatile_for 方法,用于与使用装饰器 @ram.cache 的方法一起使用。这适用于寿命较长的缓存方法,这些方法可以手动失效。get_cachekey_volatile 将用于 cachekey 方法,invalidate_cachekey_volatile_for 将用于使缓存失效。[gbastien]

  • 添加了一个使用 zint 生成条形码的功能:#13100。[mpeeters]

  • 从 __init__ 中移除了 initialize() 调用,不需要将其视为 Zope2 产品。[gbastien]

0.4.13 (2016-01-22)

  • 使用 safe_unicode() 而不是 unicode(),尤其是在 xhtml.markEmptyTags 中,以避免 UnicideDecode 错误。[gbastien]

0.4.12 (2016-01-21)

  • 添加了测试,当 uid(路径)不再在 portal_catalog 中时,它不会使 catalog.addOrUpdateColumns 失效。[gbastien]

  • 在 xhtml.xhtmlContentIsEmpty 中,不再在 _isEmpty 中考虑标签子元素,渲染无内容(text_content().strip() 为空)的标签将被视为空。[gbastien]

0.4.11 (2015-11-12)

  • 添加了 'cache.cleanRamCache' 方法,将使 ram.cache 无效。[gbastien]

0.4.10 (2015-08-21)

  • 添加了 get_environment 方法和测试。[bsuttor]

  • 如果全局环境变量 'ENV' 等于 'dev',则 is_develop_environment 方法为 true。[bsuttor]

  • 添加了 'cache' 模块和辅助方法 'cleanVocabularyCacheFor',该方法将清理在命名词汇上定义的 instance.memoize 缓存,以及 'cleanRamCacheFor',该方法将清理在给定方法上定义的 ram.cache。[gbastien]

0.4.9 (2015-04-21)

  • 在 xhtml.addClassToLastChildren 中,不要定义空类属性。实际上,未管理的标签被装饰为具有 'class=""' 属性,现在不再是这样了。[gbastien]

0.4.8 (2015-04-20)

  • 在 xhtml.addClassToLastChildren 中管理每个文本格式化标签,并且不要在未知标签上中断。[gbastien]

  • 在 xhtml.addClassToLastChildren 中将特殊字符替换为相应的 HTML 实体,以便渲染的内容仍然包含原始 HTML 实体。这避免了 HTML 实体被渲染为 UTF-8 字符,并且一些奇怪的实体被识别(”&nbsp;”)。[gbastien]

0.4.7 (2015-03-06)

  • 调整了 xhtml.addClassToLastChildren 方法,以标记包含未处理标签的父标签。[gbastien]

0.4.6 (2015-02-26)

  • 添加了 markEmptyTags 方法,将标记给定 xhtmlContent 中的空标签。[gbastien]

  • 由于我们将依赖 plone.api.env.adopt_roles 来执行某些方法作为超级用户,因此已移除方法 security.call_as_super_user。[gbastien]

0.4.5 (2015-02-05)

  • 添加了测试构建是否处于开发模式的方法(IS_DEV_ENV=True)。[sgeulette]

  • 添加了生成符合标准的方法来生成密码。[sgeulette]

0.4.4 (2015-01-29)

  • 使 hxtml.addClassToLastChildren 能够通过标签传递特定类,这样就可以根据节点标签设置特定类。[gbastien]

0.4.3 (2015-01-20)

  • 添加了 addClassToLastChildren 方法,将为给定 xhtmlContent 的最后一个标签添加一个特定的类属性。[gbastien]

0.4.2 (2014-09-19)

  • 不考虑 xhtmlContent 容易为空:xhtmlContent 为空,如果它不产生文本,没有属性,并且没有子元素。[gbastien]

  • 在 removeBlanks 方法中使用 xhtmlContentIsEmpty 方法,以避免代码和逻辑的重复。[gbastien]

0.4.1 (2014-09-11)

  • 修复了‘removeBlanks’中的错误,该错误会删除空父标签的子元素,从而导致删除像 <u><li>我的文本</li><li>我的第二段文本</li></ul> 这样的复杂树。[gbastien]

0.3 (2014-09-04)

  • 修复了‘xhtmlContentIsEmpty’中的错误,该错误未能正确处理复杂的HTML树。我们现在使用lxml方法‘text_content’来检查HTML结构是否将渲染内容。[gbastien]

0.2 (2014-08-27)

  • 添加了xhtml.py模块,其中包含用于XHTML内容的辅助方法。
    • ‘removeBlanks’将删除给定xhtmlContent的空白行。

    • ‘xhtmlContentIsEmpty’将检查给定xhtmlContent在渲染时是否会生成内容。

    [gbastien]

0.1 (2014-08-18)

  • 首次发布。[sdelcourt]