Skip to content

Deprecated Code Patterns in Pinjected Repository #98

Description

@proboscis

---\nMigrated from CyberAgentAILab/pinjected#187\nOriginally created by @app/devin-ai-integration on null\n\n---\n\n# Deprecated Code Patterns in Pinjected Repository

This issue documents all remaining instances of deprecated code patterns in the pinjected repository that need to be updated. The goal is to provide a comprehensive roadmap for future migration work.

Background

The pinjected framework is migrating from older API patterns to newer, more consistent ones:

  • instances(), providers(), and classes() → unified design() function
  • __meta_design____design__ in __pinjected__.py files
  • Design.bind_instancedesign()

Deprecated Code Patterns Found

The following table lists all instances of deprecated code patterns found in the repository:

1. __meta_design__ Usage

File Path Line Number Deprecated Pattern Suggested Replacement
pinjected/test_helper/test_runner.py 473 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/run_config_utils.py 614 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/demo.py 7 __meta_design__: Design = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/exporter/llm_exporter.py 801 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/_dev_tools/init.py 14 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/test_package/child/example_experiments.py 96 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/test_package/child/module_with.py 13 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/test_package/child/module1.py 94 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/test_package/init.py 30 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/helper_structure.py 263 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
pinjected/di/tools/add_overload.py 122 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/injected_utils/src/injected_utils/injected_cache_utils.py 704 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/niji_voice/src/pinjected_niji_voice/api.py 284 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/injected_utils/src/injected_utils/async_caching/async_cache.py 74 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/injected_utils/src/injected_utils/async_caching/decorators.py 132 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/injected_utils/src/injected_utils/batched_cache.py 149 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/openai_support/src/pinjected_openai/openrouter/util.py 945 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/openai_support/src/pinjected_openai/openrouter/instances.py 104 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/anthropic/src/pinjected_anthropic/llm.py 546 __meta_design__ = instances(...) Create a __pinjected__.py file with __design__ = design(...)
packages/reviewer/src/pinjected_reviewer/init.py 14 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/reviewer/src/pinjected_reviewer/entrypoint.py 35 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/reviewer/src/pinjected_reviewer/pytest_reviewer/inspect_code.py 551 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
packages/reviewer/src/pinjected_reviewer/pytest_reviewer/coding_rule_plugin_impl.py 285 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
test/test_args_pure.py 31 __meta_design__ = design() Create a __pinjected__.py file with __design__ = design()
test/s/test_env.py 8 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
test/test_package/child/pinjected.py 3 __meta_design__ = design(...) Replace with __design__ = design(...) in the same file
test/test_package/child/config.py 3 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
test/test_package/child/module1.py 8 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)
test/test_package/pinjected.py 5 __meta_design__ = design(...) Replace with __design__ = design(...) in the same file
test/test_visualization.py 18 __meta_design__ = design(...) Create a __pinjected__.py file with __design__ = design(...)

2. instances() Usage

File Path Line Number Deprecated Pattern Suggested Replacement
.reviewers/injected_pytest_rule.md 53 async_test_design += instances(...) async_test_design = design(...)
pinjected/di/util.py 208-271 def instances(**kwargs): Use design(**kwargs) directly
packages/anthropic/src/pinjected_anthropic/llm.py 546 __meta_design__ = instances(...) Create a __pinjected__.py file with __design__ = design(...)
packages/reviewer/src/pinjected_reviewer/commands/list_reviewers.py 24 d = d + instances(repo_root=repo_path) d = d + design(repo_root=repo_path)
docs_ja/zenn.md 1051 たとえば、base_urlをinstances()で定義し... たとえば、base_urlをdesign()で定義し...
docs_ja/zenn.md 1088 base_design = instances(...) base_design = design(...)
docs_ja/zenn.md 1095-1097 conf_lr_001 = base_design + instances(...) conf_lr_001 = base_design + design(...)
docs_ja/zenn.md 1113-1114 model_resnet = instances(...) model_resnet = design(...)
docs_ja/zenn.md 1138 loss_crossentropy = instances(...) loss_crossentropy = design(...)
docs_ja/zenn.md 1164 学習率やモデル、データセット、ロス関数など、あらゆるパラメトリックな選択肢をinstances()やproviders()で記述し... 学習率やモデル、データセット、ロス関数など、あらゆるパラメトリックな選択肢をdesign()で記述し...
docs_ja/migration/migration_to_design.md 22-35 design += instances(...) design = design(...)
docs_ja/migration/migration_to_design.md 103-106 design = instances(...) design = design(...)
docs_ja/migration/migration_to_design.md 128-131 design = instances(...) design = design(...)

3. providers() Usage

File Path Line Number Deprecated Pattern Suggested Replacement
CODING_GUIDELINES.md 57 Use providers() context manager for testing specific implementations Use design() for testing specific implementations
pinjected/di/util.py 274-344 def providers(**kwargs): Use design(**kwargs) with Injected.bind() for functions
docs_ja/zenn.md 1164 学習率やモデル、データセット、ロス関数など、あらゆるパラメトリックな選択肢をinstances()やproviders()で記述し... 学習率やモデル、データセット、ロス関数など、あらゆるパラメトリックな選択肢をdesign()で記述し...
docs_ja/migration/migration_to_design.md 59-62 design += providers(...) design = design(...) with Injected.bind() for functions
docs_ja/migration/migration_to_design.md 106-108 design = instances(...) + providers(...) design = design(...) with Injected.bind() for functions
docs_ja/migration/migration_to_design.md 144-146 design += providers(...) design = design(...) with Injected.bind() for functions
docs_ja/migration/migration_to_design.md 160-161 design = instances(...) + providers(...) design = design(...) with Injected.bind() for functions

4. Design.bind_instance Usage

File Path Line Number Deprecated Pattern Suggested Replacement
pinjected/di/design.py 148 d = EmptyDesign.bind_instance(...) d = design(...)
pinjected/di/design.py 174 d1 = EmptyDesign.bind_instance(...) d1 = design(...)
pinjected/di/design.py 177 d2 = EmptyDesign.bind_instance(...) d2 = design(...)
pinjected/di/design.py 180 d3 = EmptyDesign.bind_instance(...) d3 = design(...)
pinjected/di/test_injected.py 16 d = EmptyDesign.bind_instance(...) d = design(...)
pinjected/di/test_dynamic_proxy.py 27 d = EmptyDesign.bind_instance(x=0) (commented out) d = design(x=0)

Migration Strategy

1. Migrating from __meta_design__ to __design__

  1. Create a __pinjected__.py file in the same directory as the file containing __meta_design__
  2. Move the content from __meta_design__ to __design__ in the new file
  3. If __meta_design__ uses overrides, flatten the content directly into __design__
  4. Update any references to __meta_design__ in the codebase

Example:

# Before (in module.py)
__meta_design__ = design(
    overrides=design(
        key1="value1",
        key2="value2"
    )
)

# After (in __pinjected__.py)
__design__ = design(
    key1="value1",
    key2="value2"
)

2. Migrating from instances() to design()

Direct replacement:

# Before
design += instances(
    x=0,
    y="string"
)

# After
design = design(
    x=0,
    y="string"
)

3. Migrating from providers() to design() with Injected.bind()

For functions that need to be wrapped:

# Before
design += providers(
    calc=lambda x, y: x + y,
    factory=create_something
)

# After
design = design(
    calc=Injected.bind(lambda x, y: x + y),
    factory=Injected.bind(create_something)
)

For @injected or @instance decorated functions:

# Before
design += providers(
    func1=injected_func
)

# After
design = design(
    func1=injected_func  # Already returns IProxy, no need for Injected.bind()
)

4. Migrating from Design.bind_instance to design()

Direct replacement:

# Before
d = EmptyDesign.bind_instance(
    a=0,
    b=1
)

# After
d = design(
    a=0,
    b=1
)

Priority Areas

  1. Core library code in pinjected/di/ directory
  2. Public-facing documentation
  3. Example code that users might reference
  4. Test files (lower priority but should be updated for consistency)

Next Steps

  1. Create a migration plan with prioritized tasks
  2. Update core library code first
  3. Update documentation to reflect current best practices
  4. Add deprecation warnings to help users identify deprecated patterns in their own code
  5. Create additional migration guides if needed

Related PRs and Issues

  • PR #179: Updated docstrings in injected.py to use design() function
  • PR #180: Updated deprecated API references in documentation
  • PR #181: Updated deprecated API references in docs/03_decorators.md
  • PR #183: Updated deprecated meta_design references to design in documentation

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions