Title: Requirements for a new configuration management class · Issue #24585 · matplotlib/matplotlib · GitHub
Open Graph Title: Requirements for a new configuration management class · Issue #24585 · matplotlib/matplotlib
X Title: Requirements for a new configuration management class · Issue #24585 · matplotlib/matplotlib
Description: Starting to think about what it would like to replace rcParams. It has served us well, but reflect what you could do with Python ~20 years ago (looks like it started as just a plain dictionary and picked up validation in 2007). Given the...
Open Graph Description: Starting to think about what it would like to replace rcParams. It has served us well, but reflect what you could do with Python ~20 years ago (looks like it started as just a plain dictionary and ...
X Description: Starting to think about what it would like to replace rcParams. It has served us well, but reflect what you could do with Python ~20 years ago (looks like it started as just a plain dictionary and ...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/24585
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Requirements for a new configuration management class","articleBody":"Starting to think about what it would like to replace rcParams. It has served us well, but reflect what you could do with Python ~20 years ago (looks like it started as just a plain dictionary and picked up validation in 2007). Given the changes to Python, our experiences working with the current rcparams, and an eye towards near-term explosion of the number of things we may want to parameterize after the NASA work, I think it is worth having a discussion about what a green-field implementation of a global configuration signleton class would look like.\r\n\r\nThis line of thinking is triggered by a question via private communications about how to use a style file that _only_ applies to rcParams that have not already been updated. In principle, you could do this by looking at rcParamsDefault (or some other baseline), but you would still have\r\nno way of telling if a value was intentionally set to a value that just happened to be the default value or not.\r\n\r\nI would propose the following set of requirements:\r\n\r\n - provide a bug-for-bug compatible read/write accessor that mimics the current rcParams. The current system is _way_ to widely used to break and very likely too widely used\r\n to really deprecate\r\n - track what values have been set and provide a way to ask if a given key has had its value changed away from the baseline\r\n - a way to tell the object that its current state should be considered the new baseline\r\n - a way to move a key back to the baseline value\r\n - provide a way to access (namespaced) sub-sets of the configuration\r\n - validation on the keys (must be in expected list) and values (must be of expected type)\r\n - bulk update / restore of keys with `setdefault` style filtering (please set this key _only_ if it has never been updated)\r\n - ability to lock keys (both \"soft lock\" that can be unlocked and \"hard-locked\" that can not?)\r\n\r\nOther things we should consider:\r\n - move to `__getattr__` rather than `__getitem__`\r\n - pro: dot access is a bit nicer\r\n - con: conflicts between the key namespace and the method namespace\r\n - runtime extension of known keys\r\n - pro: if we start pushing to more sub-libraries it would be good to have a unified config management scheme\r\n - con: namespace chaos\r\n\r\n I want to keep this discussion independent of _how_ we fabricate the singleton configuration.\r\n\r\n\r\n[edited]","author":{"url":"https://github.com/tacaswell","@type":"Person","name":"tacaswell"},"datePublished":"2022-12-02T21:06:29.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":7},"url":"https://github.com/24585/matplotlib/issues/24585"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:fa6b7e19-3cb3-15f7-419a-df2bf0123ed4 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | E820:372744:4521B0:5D9D2F:6A51C574 |
| html-safe-nonce | 5e2e4638341fd1a29d04017546b2a2c1458097390b9d5c6722594bfb0e0964d9 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFODIwOjM3Mjc0NDo0NTIxQjA6NUQ5RDJGOjZBNTFDNTc0IiwidmlzaXRvcl9pZCI6IjUwNzk2MzAzNTEwMjU5NDQyMCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | a2a7a2e16d462123430358cba8a2489fdf785c40ce32ff73b87221a0a7d97039 |
| hovercard-subject-tag | issue:1473445410 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/24585/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1713b5ffe76f3c0cfa88c706fa53987a910dcb9d1ac55b501beec5ea650ae9e6/matplotlib/matplotlib/issues/24585 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1713b5ffe76f3c0cfa88c706fa53987a910dcb9d1ac55b501beec5ea650ae9e6/matplotlib/matplotlib/issues/24585 |
| og:image:alt | Starting to think about what it would like to replace rcParams. It has served us well, but reflect what you could do with Python ~20 years ago (looks like it started as just a plain dictionary and ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | tacaswell |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width