Skip to content

Commit

Permalink
Deploying to gh-pages from @ 42999fa 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
adhtruong committed Jan 24, 2025
1 parent 451eb30 commit 46fab57
Show file tree
Hide file tree
Showing 8 changed files with 366 additions and 237 deletions.
449 changes: 235 additions & 214 deletions latest/_modules/polyfactory/factories/sqlalchemy_factory.html

Large diffs are not rendered by default.

32 changes: 25 additions & 7 deletions latest/_sources/usage/library_factories/sqlalchemy_factory.rst.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SQLAlchemyFactory
===================
=================

Basic usage is like other factories

Expand All @@ -10,21 +10,39 @@ Basic usage is like other factories
.. note::
The examples here require SQLAlchemy 2 to be installed. The factory itself supports both 1.4 and 2.


Configuration
------------------------------
-------------

SQLAlchemyFactory allows to override some configuration attributes so that a described factory can use a behavior from SQLAlchemy ORM such as `relationship() <https://docs.sqlalchemy.org/en/20/orm/relationship_api.html#sqlalchemy.orm.relationship>`_ or `Association Proxy <https://docs.sqlalchemy.org/en/20/orm/extensions/associationproxy.html#module-sqlalchemy.ext.associationproxy>`_.

Relationship
++++++++++++

By default, relationships will not be set. This can be overridden via ``__set_relationships__``.
By default, ``__set_relationships__`` is set to ``False``. If it is ``True``, all fields with the SQLAlchemy `relationship() <relationship()_>`_ will be included in the result created by ``build`` method.

.. literalinclude:: /examples/library_factories/sqlalchemy_factory/test_example_2.py
:caption: Setting relationships
:language: python

.. note::
In general, foreign keys are not automatically generated by ``.build``. This can be resolved by setting the fields yourself and/or using ``create_sync``/ ``create_async`` so models can be added to a SQLA session so these are set.
If ``__set_relationships__ = True``, ForeignKey fields associated with relationship() will be automatically generated by ``build`` method because :class:`__set_foreign_keys__ <polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_foreign_keys__>` is set to ``True`` by default. But their values will be overwritten by using ``create_sync``/ ``create_async`` methods, so SQLAlchemy ORM creates them.

Association Proxy
+++++++++++++++++

By default, ``__set_association_proxy__`` is set to ``False``. If it is ``True``, all SQLAlchemy fields mapped to ORM `Association Proxy <Association Proxy_>`_ class will be included in the result created by ``build`` method.

.. literalinclude:: /examples/library_factories/sqlalchemy_factory/test_example_association_proxy.py
:caption: Setting association_proxy
:language: python

.. note::
If ``__set_relationships__ = True``, the Polyfactory will create both fields from a particular SQLAlchemy model (association_proxy and its relationship), but eventually a relationship field will be overwritten by using ``create_sync``/ ``create_async`` methods via SQLAlchemy ORM with a proper instance from an Association Proxy relation.


Persistence
------------------------------
-----------

A handler is provided to allow persistence. This can be used by setting ``__session__`` attribute on a factory.

Expand All @@ -38,7 +56,7 @@ Similarly for ``__async_session__`` and ``create_async``.


Adding global overrides
------------------------------
-----------------------

By combining the above and using other settings, a global base factory can be set up for other factories.

Expand All @@ -48,5 +66,5 @@ By combining the above and using other settings, a global base factory can be se


API reference
------------------------------
-------------
Full API docs are available :class:`here <polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory>`.
2 changes: 2 additions & 0 deletions latest/genindex.html
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,8 @@ <h2 id="_">_</h2>
<li><a href="reference/factories/base.html#polyfactory.factories.base.BaseFactory.__randomize_collection_length__">__randomize_collection_length__ (polyfactory.factories.base.BaseFactory attribute)</a>
</li>
<li><a href="reference/factories/base.html#polyfactory.factories.base.BaseFactory.__set_as_default_factory_for_type__">__set_as_default_factory_for_type__ (polyfactory.factories.base.BaseFactory attribute)</a>
</li>
<li><a href="reference/factories/sqlalchemy_factory.html#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_association_proxy__">__set_association_proxy__ (polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory attribute)</a>
</li>
<li><a href="reference/factories/sqlalchemy_factory.html#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_foreign_keys__">__set_foreign_keys__ (polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory attribute)</a>
</li>
Expand Down
Binary file modified latest/objects.inv
Binary file not shown.
9 changes: 8 additions & 1 deletion latest/reference/factories/sqlalchemy_factory.html
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_primary_key__"><code class="docutils literal notranslate">__set_primary_key__</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_foreign_keys__"><code class="docutils literal notranslate">__set_foreign_keys__</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_relationships__"><code class="docutils literal notranslate">__set_relationships__</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_association_proxy__"><code class="docutils literal notranslate">__set_association_proxy__</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__config_keys__"><code class="docutils literal notranslate">__config_keys__</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.get_sqlalchemy_types"><code class="docutils literal notranslate">get_sqlalchemy_types()</span></code></a></li>
<li><a class="reference internal" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.get_sqlalchemy_constraints"><code class="docutils literal notranslate">get_sqlalchemy_constraints()</span></code></a></li>
Expand Down Expand Up @@ -406,9 +407,15 @@
<dd><p>Configuration to consider relationships property as a model field or not.</p>
</dd></dl>

<dl class="py attribute">
<dt class="sig sig-object py" id="polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_association_proxy__">
<span class="sig-name descname"><span class="pre">__set_association_proxy__</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">ClassVar</span><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a><span class="p"><span class="pre">]</span></span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">False</span></em><a class="headerlink" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__set_association_proxy__" title="Permalink to this definition"></a></dt>
<dd><p>Configuration to consider AssociationProxy property as a model field or not.</p>
</dd></dl>

<dl class="py attribute">
<dt class="sig sig-object py" id="polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__config_keys__">
<span class="sig-name descname"><span class="pre">__config_keys__</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#tuple" title="(in Python v3.13)"><span class="pre">tuple</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="p"><span class="pre">]</span></span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">('__check_model__',</span> <span class="pre">'__allow_none_optionals__',</span> <span class="pre">'__set_as_default_factory_for_type__',</span> <span class="pre">'__faker__',</span> <span class="pre">'__random__',</span> <span class="pre">'__randomize_collection_length__',</span> <span class="pre">'__min_collection_length__',</span> <span class="pre">'__max_collection_length__',</span> <span class="pre">'__use_defaults__',</span> <span class="pre">'__set_primary_key__',</span> <span class="pre">'__set_foreign_keys__',</span> <span class="pre">'__set_relationships__')</span></em><a class="headerlink" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__config_keys__" title="Permalink to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">__config_keys__</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#tuple" title="(in Python v3.13)"><span class="pre">tuple</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="p"><span class="pre">]</span></span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">('__check_model__',</span> <span class="pre">'__allow_none_optionals__',</span> <span class="pre">'__set_as_default_factory_for_type__',</span> <span class="pre">'__faker__',</span> <span class="pre">'__random__',</span> <span class="pre">'__randomize_collection_length__',</span> <span class="pre">'__min_collection_length__',</span> <span class="pre">'__max_collection_length__',</span> <span class="pre">'__use_defaults__',</span> <span class="pre">'__set_primary_key__',</span> <span class="pre">'__set_foreign_keys__',</span> <span class="pre">'__set_relationships__',</span> <span class="pre">'__set_association_proxy__')</span></em><a class="headerlink" href="#polyfactory.factories.sqlalchemy_factory.SQLAlchemyFactory.__config_keys__" title="Permalink to this definition"></a></dt>
<dd><p>Keys to be considered as config values to pass on to dynamically created factories.</p>
</dd></dl>

Expand Down
Loading

0 comments on commit 46fab57

Please sign in to comment.