{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.V27u8f9l/b1/sqlalchemy_1.4.46+ds1-1_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.V27u8f9l/b2/sqlalchemy_1.4.46+ds1-1_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- 6510aed616b2579bdf1ff11eef830947 3567040 doc optional python-sqlalchemy-doc_1.4.46+ds1-1_all.deb\n+ 74262092a9d928e4570414080bc5d3cd 3566724 doc optional python-sqlalchemy-doc_1.4.46+ds1-1_all.deb\n cc7fdbb308bf20d905d218121ed63cb2 34360 debug optional python3-sqlalchemy-ext-dbgsym_1.4.46+ds1-1_i386.deb\n 30b34629159a93cdaf32c8701ffd3a17 17180 python optional python3-sqlalchemy-ext_1.4.46+ds1-1_i386.deb\n 96e279ec2f1354d84035113d9bc40d65 1007608 python optional python3-sqlalchemy_1.4.46+ds1-1_all.deb\n"}, {"source1": "python-sqlalchemy-doc_1.4.46+ds1-1_all.deb", "source2": "python-sqlalchemy-doc_1.4.46+ds1-1_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-01-09 15:19:05.000000 debian-binary\n--rw-r--r-- 0 0 0 13268 2023-01-09 15:19:05.000000 control.tar.xz\n--rw-r--r-- 0 0 0 3553580 2023-01-09 15:19:05.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13276 2023-01-09 15:19:05.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 3553256 2023-01-09 15:19:05.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "./usr/share/doc/python-sqlalchemy-doc/html/orm/examples.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/orm/examples.html", "comments": ["Ordering differences only"], "unified_diff": "@@ -309,40 +309,40 @@\n \n
\n

Associations\u00b6

\n

Examples illustrating the usage of the \u201cassociation object\u201d pattern,\n where an intermediary class mediates the relationship between two\n classes that are associated in a many-to-many pattern.

\n

Listing of files:

\n

\n
\n
\n

Asyncio Integration\u00b6

\n

Examples illustrating the asyncio engine feature of SQLAlchemy.

\n

Listing of files:

\n@@ -392,29 +392,29 @@\n
  • discriminator_on_association.py - Illustrates a mixin which provides a generic association\n using a single target table and a single association table,\n referred to by all parent tables. The association table\n contains a \u201cdiscriminator\u201d column which determines what type of\n parent object associates to each particular row in the association\n table.

    \n

  • \n-
  • table_per_related.py - Illustrates a generic association which persists association\n-objects within individual tables, each one generated to persist\n-those objects on behalf of a particular parent class.

    \n+
  • table_per_association.py - Illustrates a mixin which provides a generic association\n+via a individually generated association tables for each parent class.\n+The associated objects themselves are persisted in a single table\n+shared among all parents.

    \n

  • \n
  • generic_fk.py - Illustrates a so-called \u201cgeneric foreign key\u201d, in a similar fashion\n to that of popular frameworks such as Django, ROR, etc. This\n approach bypasses standard referential integrity\n practices, in that the \u201cforeign key\u201d column is not actually\n constrained to refer to any particular table; instead,\n in-application logic is used to determine which table is referenced.

    \n

  • \n-
  • table_per_association.py - Illustrates a mixin which provides a generic association\n-via a individually generated association tables for each parent class.\n-The associated objects themselves are persisted in a single table\n-shared among all parents.

    \n+
  • table_per_related.py - Illustrates a generic association which persists association\n+objects within individual tables, each one generated to persist\n+those objects on behalf of a particular parent class.

    \n

  • \n \n

    \n
    \n
    \n

    Large Collections\u00b6

    \n

    Large collection example.

    \n@@ -501,23 +501,23 @@\n
    \n

    See also

    \n

    How can I profile a SQLAlchemy powered application?

    \n
    \n
    \n

    File Listing\u00b6

    \n

    Listing of files:

    \n
    \n

    Relationship Join Conditions\u00b6

    \n

    Examples of various relationship() configurations,\n which make use of the primaryjoin argument to compose special types\n of join conditions.

    \n

    Listing of files:

    \n

    \n
    \n
    \n

    Space Invaders\u00b6

    \n

    A Space Invaders game using SQLite as the state machine.

    \n

    Originally developed in 2012. Adapted to work in Python 3.

    \n@@ -831,31 +831,31 @@\n

    Several examples that illustrate the technique of intercepting changes\n that would be first interpreted as an UPDATE on a row, and instead turning\n it into an INSERT of a new row, leaving the previous row intact as\n a historical version.

    \n

    Compare to the Versioning with a History Table example which writes a\n history row to a separate history table.

    \n

    Listing of files:

    \n

    \n
    \n
    \n
    \n

    Vertical Attribute Mapping\u00b6

    \n

    Illustrates \u201cvertical table\u201d mappings.

    \n@@ -880,54 +880,54 @@\n q = (session.query(Animal).\n filter(Animal.facts.any(\n and_(AnimalFact.key == u'weasel-like',\n AnimalFact.value == True))))\n print('weasel-like animals', q.all())\n \n

    Listing of files:

    \n

    \n
    \n \n
    \n

    Inheritance Mapping Recipes\u00b6

    \n
    \n

    Basic Inheritance Mappings\u00b6

    \n

    Working examples of single-table, joined-table, and concrete-table\n inheritance as described in Mapping Class Inheritance Hierarchies.

    \n

    Listing of files:

    \n

    \n
    \n
    \n
    \n

    Special APIs\u00b6

    \n
    \n

    Attribute Instrumentation\u00b6

    \n

    Examples illustrating modifications to SQLAlchemy\u2019s attribute management\n system.

    \n

    Listing of files:

    \n

    \n
    \n
    \n@@ -959,21 +959,21 @@\n

    The construction of generic sharding routines is an ambitious approach\n to the issue of organizing instances among multiple databases. For a\n more plain-spoken alternative, the \u201cdistinct entity\u201d approach\n is a simple method of assigning objects to different tables (and potentially\n database nodes) in an explicit way - described on the wiki at\n EntityName.

    \n

    Listing of files:

    \n

    \n
    \n
    \n
    \n

    Extending the ORM\u00b6

    \n@@ -985,19 +985,19 @@\n object.

    \n

    Examples include demonstrations of the with_loader_criteria()\n option as well as the SessionEvents.do_orm_execute() hook.

    \n

    As of SQLAlchemy 1.4, the Query construct is unified\n with the Select construct, so that these two objects\n are mostly the same.

    \n

    Listing of files:

    \n

    \n
    \n
    \n

    Dogpile Caching\u00b6

    \n

    Illustrates how to embed\n dogpile.cache\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -123,32 +123,33 @@\n * adjacency_list.py\n \n **** Associations\u00b6 ****\n Examples illustrating the usage of the \u201cassociation object\u201d pattern, where an\n intermediary class mediates the relationship between two classes that are\n associated in a many-to-many pattern.\n Listing of files:\n- * basic_association.py - Illustrate a many-to-many relationship between an\n- \u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price\n- with each via an association object called \u201cOrderItem\u201d\n-dict_of_sets_with_default.py - An advanced association proxy example which\n-illustrates nesting of association proxies to produce multi-level Python\n-collections, in this case a dictionary with string keys and sets of integers as\n-values, which conceal the underlying mapped classes.\n+ * dict_of_sets_with_default.py - An advanced association proxy example\n+ which illustrates nesting of association proxies to produce multi-level\n+ Python collections, in this case a dictionary with string keys and sets\n+ of integers as values, which conceal the underlying mapped classes.\n+basic_association.py - Illustrate a many-to-many relationship between an\n+\u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price with\n+each via an association object called \u201cOrderItem\u201d\n proxied_association.py - Same example as basic_association, adding in usage of\n sqlalchemy.ext.associationproxy to make explicit references to OrderItem\n optional.\n \n **** Asyncio Integration\u00b6 ****\n Examples illustrating the asyncio engine feature of SQLAlchemy.\n Listing of files:\n- * async_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n- object for asynchronous ORM use.\n-greenlet_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n-object for asynchronous ORM use, including the optional run_sync() method.\n+ * greenlet_orm.py - Illustrates use of the\n+ sqlalchemy.ext.asyncio.AsyncSession object for asynchronous ORM use,\n+ including the optional run_sync() method.\n+async_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n+object for asynchronous ORM use.\n basic.py - Illustrates the asyncio engine / connection interface.\n gather_orm_statements.py - Illustrates how to run many statements concurrently\n using asyncio.gather() along many asyncio database connections, merging ORM\n results into a single AsyncSession.\n \n **** Directed Graphs\u00b6 ****\n An example of persistence for a directed graph structure. The graph is stored\n@@ -182,26 +183,26 @@\n with_SQLAlchemy.\n Listing of files:\n * discriminator_on_association.py - Illustrates a mixin which provides a\n generic association using a single target table and a single association\n table, referred to by all parent tables. The association table contains a\n \u201cdiscriminator\u201d column which determines what type of parent object\n associates to each particular row in the association table.\n-table_per_related.py - Illustrates a generic association which persists\n-association objects within individual tables, each one generated to persist\n-those objects on behalf of a particular parent class.\n+table_per_association.py - Illustrates a mixin which provides a generic\n+association via a individually generated association tables for each parent\n+class. The associated objects themselves are persisted in a single table shared\n+among all parents.\n generic_fk.py - Illustrates a so-called \u201cgeneric foreign key\u201d, in a similar\n fashion to that of popular frameworks such as Django, ROR, etc. This approach\n bypasses standard referential integrity practices, in that the \u201cforeign key\u201d\n column is not actually constrained to refer to any particular table; instead,\n in-application logic is used to determine which table is referenced.\n-table_per_association.py - Illustrates a mixin which provides a generic\n-association via a individually generated association tables for each parent\n-class. The associated objects themselves are persisted in a single table shared\n-among all parents.\n+table_per_related.py - Illustrates a generic association which persists\n+association objects within individual tables, each one generated to persist\n+those objects on behalf of a particular parent class.\n \n **** Large Collections\u00b6 ****\n Large collection example.\n Illustrates the options to use with relationship() when the list of related\n objects is very large, including:\n * \u201cdynamic\u201d relationships which query slices of data as accessed\n * how to use ON DELETE CASCADE in conjunction with passive_deletes=True to\n@@ -262,22 +263,22 @@\n $ python -m examples.performance bulk_inserts \\\n --dburl mysql+mysqldb://scott:tiger@localhost/test \\\n --profile --num 1000\n See also\n How_can_I_profile_a_SQLAlchemy_powered_application?\n *** File Listing\u00b6 ***\n Listing of files:\n- * single_inserts.py - In this series of tests, we\u2019re looking at a method\n- that inserts a row within a distinct transaction, and afterwards returns\n- to essentially a \u201cclosed\u201d state. This would be analogous to an API call\n- that starts up a database connection, inserts the row, commits and\n- closes.\n+ * __main__.py - Allows the examples/performance package to be run as a\n+ script.\n short_selects.py - This series of tests illustrates different ways to SELECT a\n single record by primary key\n-__main__.py - Allows the examples/performance package to be run as a script.\n+single_inserts.py - In this series of tests, we\u2019re looking at a method that\n+inserts a row within a distinct transaction, and afterwards returns to\n+essentially a \u201cclosed\u201d state. This would be analogous to an API call that\n+starts up a database connection, inserts the row, commits and closes.\n bulk_inserts.py - This series of tests illustrates different ways to INSERT a\n large number of rows in bulk.\n large_resultsets.py - In this series of tests, we are looking at time to load a\n large number of very small and simple rows.\n bulk_updates.py - This series of tests will illustrate different ways to UPDATE\n a large number of rows in bulk (under construction! there\u2019s just one test at\n the moment)\n@@ -425,20 +426,20 @@\n test_subqueryload : load everything, subquery eager loading. (1000 iterations);\n total time 2.977696 sec\n \n **** Relationship Join Conditions\u00b6 ****\n Examples of various relationship() configurations, which make use of the\n primaryjoin argument to compose special types of join conditions.\n Listing of files:\n- * threeway.py - Illustrate a \u201cthree way join\u201d - where a primary table joins\n- to a remote table via an association table, but then the primary table\n- also needs to refer to some columns in the remote table directly.\n-cast.py - Illustrate a relationship() that joins two columns where those\n-columns are not of the same type, and a CAST must be used on the SQL side in\n-order to match them.\n+ * cast.py - Illustrate a relationship() that joins two columns where those\n+ columns are not of the same type, and a CAST must be used on the SQL side\n+ in order to match them.\n+threeway.py - Illustrate a \u201cthree way join\u201d - where a primary table joins to a\n+remote table via an association table, but then the primary table also needs to\n+refer to some columns in the remote table directly.\n \n **** Space Invaders\u00b6 ****\n A Space Invaders game using SQLite as the state machine.\n Originally developed in 2012. Adapted to work in Python 3.\n Runs in a textual console using ASCII art.\n [orm/space_invaders.jpg]\n To run:\n@@ -556,28 +557,27 @@\n Several examples that illustrate the technique of intercepting changes that\n would be first interpreted as an UPDATE on a row, and instead turning it into\n an INSERT of a new row, leaving the previous row intact as a historical\n version.\n Compare to the Versioning_with_a_History_Table example which writes a history\n row to a separate history table.\n Listing of files:\n- * versioned_update_old_row.py - Illustrates the same UPDATE into INSERT\n- technique of versioned_rows.py, but also emits an UPDATE on the old row\n- to affect a change in timestamp. Also includes a\n- SessionEvents.do_orm_execute() hook to limit queries to only the most\n- recent version.\n-versioned_rows_w_versionid.py - Illustrates a method to intercept changes on\n-objects, turning an UPDATE statement on a single row into an INSERT statement,\n-so that a new row is inserted with the new data, keeping the old row intact.\n+ * versioned_rows.py - Illustrates a method to intercept changes on objects,\n+ turning an UPDATE statement on a single row into an INSERT statement, so\n+ that a new row is inserted with the new data, keeping the old row intact.\n versioned_map.py - A variant of the versioned_rows example built around the\n concept of a \u201cvertical table\u201d structure, like those illustrated in Vertical\n Attribute_Mapping examples.\n-versioned_rows.py - Illustrates a method to intercept changes on objects,\n-turning an UPDATE statement on a single row into an INSERT statement, so that a\n-new row is inserted with the new data, keeping the old row intact.\n+versioned_rows_w_versionid.py - Illustrates a method to intercept changes on\n+objects, turning an UPDATE statement on a single row into an INSERT statement,\n+so that a new row is inserted with the new data, keeping the old row intact.\n+versioned_update_old_row.py - Illustrates the same UPDATE into INSERT technique\n+of versioned_rows.py, but also emits an UPDATE on the old row to affect a\n+change in timestamp. Also includes a SessionEvents.do_orm_execute() hook to\n+limit queries to only the most recent version.\n \n **** Vertical Attribute Mapping\u00b6 ****\n Illustrates \u201cvertical table\u201d mappings.\n A \u201cvertical table\u201d refers to a technique where individual attributes of an\n object are stored as distinct rows in a table. The \u201cvertical table\u201d technique\n is used to persist objects which can have a varied set of attributes, at the\n expense of simple query control and brevity. It is commonly found in content/\n@@ -597,37 +597,38 @@\n \n q = (session.query(Animal).\n filter(Animal.facts.any(\n and_(AnimalFact.key == u'weasel-like',\n AnimalFact.value == True))))\n print('weasel-like animals', q.all())\n Listing of files:\n- * dictlike.py - Mapping a vertical table as a dictionary.\n-dictlike-polymorphic.py - Mapping a polymorphic-valued vertical table as a\n-dictionary.\n+ * dictlike-polymorphic.py - Mapping a polymorphic-valued vertical table as\n+ a dictionary.\n+dictlike.py - Mapping a vertical table as a dictionary.\n \n ***** Inheritance Mapping Recipes\u00b6 *****\n **** Basic Inheritance Mappings\u00b6 ****\n Working examples of single-table, joined-table, and concrete-table inheritance\n as described in Mapping_Class_Inheritance_Hierarchies.\n Listing of files:\n * concrete.py - Concrete-table (table-per-class) inheritance example.\n-joined.py - Joined-table (table-per-subclass) inheritance example.\n single.py - Single-table (table-per-hierarchy) inheritance example.\n+joined.py - Joined-table (table-per-subclass) inheritance example.\n \n ***** Special APIs\u00b6 *****\n **** Attribute Instrumentation\u00b6 ****\n Examples illustrating modifications to SQLAlchemy\u2019s attribute management\n system.\n Listing of files:\n- * listen_for_events.py - Illustrates how to attach events to all\n- instrumented attributes and listen for change events.\n-active_column_defaults.py - Illustrates use of the AttributeEvents.init_scalar\n-() event, in conjunction with Core column defaults to provide ORM objects that\n-automatically produce the default value when an un-set attribute is accessed.\n+ * active_column_defaults.py - Illustrates use of the\n+ AttributeEvents.init_scalar() event, in conjunction with Core column\n+ defaults to provide ORM objects that automatically produce the default\n+ value when an un-set attribute is accessed.\n+listen_for_events.py - Illustrates how to attach events to all instrumented\n+attributes and listen for change events.\n custom_management.py - Illustrates customized class instrumentation, using the\n sqlalchemy.ext.instrumentation extension package.\n \n **** Horizontal Sharding\u00b6 ****\n A basic example of using the SQLAlchemy Sharding API. Sharding refers to\n horizontally scaling data across multiple databases.\n The basic components of a \u201csharded\u201d mapping are:\n@@ -651,35 +652,36 @@\n attempt to determine a single shard being requested.\n The construction of generic sharding routines is an ambitious approach to the\n issue of organizing instances among multiple databases. For a more plain-spoken\n alternative, the \u201cdistinct entity\u201d approach is a simple method of assigning\n objects to different tables (and potentially database nodes) in an explicit way\n - described on the wiki at EntityName.\n Listing of files:\n- * separate_schema_translates.py - Illustrates sharding using a single\n- database with multiple schemas, where a different \u201cschema_translates_map\u201d\n- can be used for each shard.\n+ * separate_databases.py - Illustrates sharding using distinct SQLite\n+ databases.\n separate_tables.py - Illustrates sharding using a single SQLite database, that\n will however have multiple tables using a naming convention.\n-separate_databases.py - Illustrates sharding using distinct SQLite databases.\n+separate_schema_translates.py - Illustrates sharding using a single database\n+with multiple schemas, where a different \u201cschema_translates_map\u201d can be used\n+for each shard.\n \n ***** Extending the ORM\u00b6 *****\n **** ORM Query Events\u00b6 ****\n Recipes which illustrate augmentation of ORM SELECT behavior as used by\n Session.execute() with 2.0_style use of select(), as well as the 1.x_style\n Query object.\n Examples include demonstrations of the with_loader_criteria() option as well as\n the SessionEvents.do_orm_execute() hook.\n As of SQLAlchemy 1.4, the Query construct is unified with the Select construct,\n so that these two objects are mostly the same.\n Listing of files:\n- * temporal_range.py - Illustrates a custom per-query criteria that will be\n- applied to selected entities.\n-filter_public.py - Illustrates a global criteria applied to entities of a\n-particular type.\n+ * filter_public.py - Illustrates a global criteria applied to entities of a\n+ particular type.\n+temporal_range.py - Illustrates a custom per-query criteria that will be\n+applied to selected entities.\n \n **** Dogpile Caching\u00b6 ****\n Illustrates how to embed dogpile.cache functionality with ORM queries, allowing\n full cache control as well as the ability to pull \u201clazy loaded\u201d attributes from\n long term cache.\n In this demo, the following techniques are illustrated:\n * Using the SessionEvents.do_orm_execute() event hook\n"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/searchindex.js", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/searchindex.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -12439,17 +12439,17 @@\n \"n5\": 98,\n \"add_neighbor\": 98,\n \"higher_neighbor\": 98,\n \"directed_graph\": 98,\n \"supplier\": 98,\n \"hasaddress\": 98,\n \"generic_fk\": 98,\n- \"table_per_rel\": 98,\n- \"ror\": 98,\n \"table_per_associ\": 98,\n+ \"ror\": 98,\n+ \"table_per_rel\": 98,\n \"materialized_path\": 98,\n \"nested_set\": 98,\n \"single_insert\": 98,\n \"bulk_upd\": 98,\n \"test_orm_commit\": 98,\n \"test_bulk_insert_dictionari\": 98,\n \"test_cor\": 98,\n@@ -12504,34 +12504,34 @@\n \"sc1\": 98,\n \"sc1modifi\": 98,\n \"someclasshistori\": 98,\n \"__history_mapper__\": 98,\n \"_history_mapp\": 98,\n \"somehistoryclass\": 98,\n \"use_mapper_vers\": 98,\n- \"versioned_update_old_row\": 98,\n- \"versioned_rows_w_versionid\": 98,\n \"versioned_map\": 98,\n+ \"versioned_rows_w_versionid\": 98,\n+ \"versioned_update_old_row\": 98,\n \"breviti\": 98,\n \"shrew\": 98,\n \"anim\": 98,\n \"cute\": 98,\n \"weasel\": 98,\n \"poison\": 98,\n \"animalfact\": 98,\n \"custom_manag\": 98,\n \"weather\": 98,\n \"contin\": 98,\n \"spoken\": 98,\n+ \"separate_databas\": 98,\n+ \"separate_t\": 98,\n \"separate_schema_transl\": 98,\n \"schema_translates_map\": 98,\n- \"separate_t\": 98,\n- \"separate_databas\": 98,\n- \"temporal_rang\": 98,\n \"filter_publ\": 98,\n+ \"temporal_rang\": 98,\n \"demo\": 98,\n \"datafil\": 98,\n \"helloworld\": 98,\n \"local_session_cach\": 98,\n \"datamodel\": 98,\n \"postalcod\": 98,\n \"citi\": [98, 124, 133],\n"}]}]}]}]}]}