Urb 3488 fix vocabularies values#555
Conversation
📝 WalkthroughWalkthroughThis PR adds missing vocabulary definitions for the RoadDecree procedure. The changes include defining vocabulary structure in configuration defaults, creating a migration function to populate those vocabularies, registering the migration step, incrementing the version, and adding a changelog entry. ChangesRoadDecree Vocabulary Setup Migration
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Review rate limit: 4/5 reviews remaining, refill in 12 minutes. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/Products/urban/migration/update_290.py`:
- Around line 375-459: The add_missing_roaddecree_vocabularies migration omits
creating the "roadmissingparts" vocabulary; add provisioning for it by reading
default_values["RoadDecree"]["roadmissingparts"] (e.g. roadmissingparts_config =
default_values["RoadDecree"]["roadmissingparts"]), extract portal_type =
roadmissingparts_config[0] and terms = roadmissingparts_config[1:], then call
createVocabularyFolder(roaddecree_folder, "roadmissingparts", site,
allowedtypes=portal_type) to create roadmissingparts_folder and finally call
createFolderDefaultValues(roadmissingparts_folder, terms, portal_type) just like
the existing missingparts block.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 3ada03a6-095b-454a-88fb-2810ac0ce334
📒 Files selected for processing (5)
news/URB-3488.featuresrc/Products/urban/migration/update_290.pysrc/Products/urban/migration/upgrades_290.zcmlsrc/Products/urban/profiles/default/metadata.xmlsrc/Products/urban/profiles/extra/config_default_values.py
| def add_missing_roaddecree_vocabularies(context): | ||
| logger = logging.getLogger("urban: Add RoadDecree buildworktypes vocabulary") | ||
| logger.info("starting upgrade steps") | ||
| portal_urban = api.portal.get_tool("portal_urban") | ||
| roaddecree_folder = getattr(portal_urban, "roaddecree", None) | ||
|
|
||
| if roaddecree_folder is None: | ||
| logger.warning("RoadDecree config folder not found, skipping") | ||
| return | ||
|
|
||
| site = api.portal.get() | ||
|
|
||
| buildworktypes_config = default_values["shared_vocabularies"][ | ||
| "folderbuildworktypes" | ||
| ] | ||
| portal_type = buildworktypes_config[0] | ||
| terms = buildworktypes_config[2:] | ||
| buildworktypes_folder = createVocabularyFolder( | ||
| roaddecree_folder, "folderbuildworktypes", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(buildworktypes_folder, terms, portal_type) | ||
|
|
||
| divergences_config = default_values["RoadDecree"]["divergences"] | ||
| portal_type = divergences_config[0] | ||
| terms = divergences_config[1:] | ||
| divergences_folder = createVocabularyFolder( | ||
| roaddecree_folder, "divergences", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(divergences_folder, terms, portal_type) | ||
|
|
||
| derogations_config = default_values["RoadDecree"]["derogations"] | ||
| portal_type = derogations_config[0] | ||
| terms = derogations_config[1:] | ||
| derogations_folder = createVocabularyFolder( | ||
| roaddecree_folder, "derogations", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(derogations_folder, terms, portal_type) | ||
|
|
||
| investigationarticles_config = default_values["RoadDecree"]["investigationarticles"] | ||
| portal_type = investigationarticles_config[0] | ||
| terms = investigationarticles_config[1:] | ||
| investigationarticles_folder = createVocabularyFolder( | ||
| roaddecree_folder, "investigationarticles", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(investigationarticles_folder, terms, portal_type) | ||
|
|
||
| townships_config = default_values["RoadDecree"]["townships"] | ||
| portal_type = townships_config[0] | ||
| terms = townships_config[1:] | ||
| createVocabularyFolder( | ||
| roaddecree_folder, "townships", site, allowedtypes=portal_type | ||
| ) | ||
| exemptfdarticle_config = default_values["RoadDecree"]["exemptfdarticle"] | ||
| portal_type = exemptfdarticle_config[0] | ||
| terms = exemptfdarticle_config[1:] | ||
| exemptfdarticle_folder = createVocabularyFolder( | ||
| roaddecree_folder, "exemptfdarticle", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(exemptfdarticle_folder, terms, portal_type) | ||
|
|
||
| pebcategories_config = default_values["shared_vocabularies"]["pebcategories"] | ||
| portal_type = pebcategories_config[0] | ||
| terms = pebcategories_config[2:] | ||
| pebcategories_folder = createVocabularyFolder( | ||
| roaddecree_folder, "pebcategories", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(pebcategories_folder, terms, portal_type) | ||
|
|
||
| foldercategories_config = default_values["RoadDecree"]["foldercategories"] | ||
| portal_type = foldercategories_config[0] | ||
| terms = foldercategories_config[1:] | ||
| foldercategories_folder = createVocabularyFolder( | ||
| roaddecree_folder, "foldercategories", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(foldercategories_folder, terms, portal_type) | ||
|
|
||
| missingparts_config = default_values["RoadDecree"]["missingparts"] | ||
| portal_type = missingparts_config[0] | ||
| terms = missingparts_config[1:] | ||
| missingparts_folder = createVocabularyFolder( | ||
| roaddecree_folder, "missingparts", site, allowedtypes=portal_type | ||
| ) | ||
| createFolderDefaultValues(missingparts_folder, terms, portal_type) | ||
|
|
||
| logger.info("migration step done!") |
There was a problem hiding this comment.
Provision roadmissingparts in this upgrade step too.
This migration creates missingparts, but it never creates roadmissingparts, even though default_values["RoadDecree"]["roadmissingparts"] was added in src/Products/urban/profiles/extra/config_default_values.py:3958-3990. Upgraded sites will therefore still miss the road-specific vocabulary and its seeded terms after 2911.
Suggested patch
def add_missing_roaddecree_vocabularies(context):
logger = logging.getLogger("urban: Add RoadDecree buildworktypes vocabulary")
logger.info("starting upgrade steps")
portal_urban = api.portal.get_tool("portal_urban")
roaddecree_folder = getattr(portal_urban, "roaddecree", None)
@@
foldercategories_folder = createVocabularyFolder(
roaddecree_folder, "foldercategories", site, allowedtypes=portal_type
)
createFolderDefaultValues(foldercategories_folder, terms, portal_type)
+ roadmissingparts_config = default_values["RoadDecree"]["roadmissingparts"]
+ portal_type = roadmissingparts_config[0]
+ terms = roadmissingparts_config[1:]
+ roadmissingparts_folder = createVocabularyFolder(
+ roaddecree_folder, "roadmissingparts", site, allowedtypes=portal_type
+ )
+ createFolderDefaultValues(roadmissingparts_folder, terms, portal_type)
+
missingparts_config = default_values["RoadDecree"]["missingparts"]
portal_type = missingparts_config[0]
terms = missingparts_config[1:]
missingparts_folder = createVocabularyFolder(
roaddecree_folder, "missingparts", site, allowedtypes=portal_type🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/Products/urban/migration/update_290.py` around lines 375 - 459, The
add_missing_roaddecree_vocabularies migration omits creating the
"roadmissingparts" vocabulary; add provisioning for it by reading
default_values["RoadDecree"]["roadmissingparts"] (e.g. roadmissingparts_config =
default_values["RoadDecree"]["roadmissingparts"]), extract portal_type =
roadmissingparts_config[0] and terms = roadmissingparts_config[1:], then call
createVocabularyFolder(roaddecree_folder, "roadmissingparts", site,
allowedtypes=portal_type) to create roadmissingparts_folder and finally call
createFolderDefaultValues(roadmissingparts_folder, terms, portal_type) just like
the existing missingparts block.
This PR adds the missing vocabulary terms for the road decree procedure and applies the upgrade step.
Summary by CodeRabbit
New Features
Chores