name clashes between files and record types can lead to strange behavior on retrieve operations
You can use the following code to reproduce the bug:
import linkahead as db
rt = db.RecordType(name="TestUniquenessRecordType").insert()
# of course "test.file" must exist
f = db.File(file="test.file", path="/testfiles/test.file")
f.insert()
f.name = "TestUniquenessRecordType"
f.update(unique=False)
Now try the following:
ff = db.File("TestUniquenessRecordType").retrieve()
I would expect it to return exactly one file, but:
3232 local_entity.add_message(Message(description=msg, type="Error"))
3234 if raise_exception_on_error:
-> 3235 raise MismatchingEntitiesError(msg)
3237 # add remaining entities to this remote_container
3238 sync_remote_entities = []
MismatchingEntitiesError: Request was not unique. Name TestUniquenessRecordType was found 2 times.
Furthermore:
In [44]: ff = db.File("TestUniquenessRecordType").retrieve(unique=False)
In [45]: ff
Out[45]:
<Entities>
<noscript>
</noscript>
<File id="48845" name="TestUniquenessRecordType" path="/testfiles/test.file" checksum="0E3E75234ABC68F4378A86B3F4B32A198BA301845B0CD6E50106E874345700CC6663A86C1EA125DC5E92BE17C98F9A0F85CA9D5F595DB2012F7CC3571945C123" size="5">
<Version id="7325c3e495b945e27c85f7fb894085f07d3328aa" head="true">
<Predecessor id="fac992b90bd6b66395d6065a936cb1734557ee1a"/>
</Version>
</File>
<RecordType id="48841" name="TestUniquenessRecordType">
<Version id="09d272bb755f3ce069fbf96ba52a02346e8c8d20" head="true"/>
</RecordType>
</Entities>
Shouldn't this return a File only?
Same for RecordTypes:
rt = db.RecordType(name="TestUniquenessRecordType").retrieve()
MismatchingEntitiesError: Request was not unique. Name TestUniquenessRecordType was found 2 times.
However, CQL does it correctly:
In [48]: db.execute_query("FIND RecordType TestUniquenessRecordType")
Out[48]:
<Entities>
<noscript>
</noscript>
<RecordType id="48841" name="TestUniquenessRecordType">
<Version id="09d272bb755f3ce069fbf96ba52a02346e8c8d20" head="true"/>
</RecordType>
</Entities>
In [49]: db.execute_query("FIND File TestUniquenessRecordType")
Out[49]:
<Entities>
<noscript>
</noscript>
<File id="48845" name="TestUniquenessRecordType" path="/testfiles/test.file" checksum="0E3E75234ABC68F4378A86B3F4B32A198BA301845B0CD6E50106E874345700CC6663A86C1EA125DC5E92BE17C98F9A0F85CA9D5F595DB2012F7CC3571945C123" size="5">
<Version id="7325c3e495b945e27c85f7fb894085f07d3328aa" head="true">
<Predecessor id="fac992b90bd6b66395d6065a936cb1734557ee1a"/>
</Version>
</File>
</Entities>
In [50]: db.execute_query("FIND Entity TestUniquenessRecordType")
Out[50]:
<Entities>
<noscript>
</noscript>
<RecordType id="48841" name="TestUniquenessRecordType">
<Version id="09d272bb755f3ce069fbf96ba52a02346e8c8d20" head="true"/>
</RecordType>
<Record id="48843" description="just for testing">
<Version id="16935068e22147025e9ba65baec32dd44700d346" head="true"/>
<Parent id="48841" name="TestUniquenessRecordType"/>
</Record>
<File id="48845" name="TestUniquenessRecordType" path="/testfiles/test.file" checksum="0E3E75234ABC68F4378A86B3F4B32A198BA301845B0CD6E50106E874345700CC6663A86C1EA125DC5E92BE17C98F9A0F85CA9D5F595DB2012F7CC3571945C123" size="5">
<Version id="7325c3e495b945e27c85f7fb894085f07d3328aa" head="true">
<Predecessor id="fac992b90bd6b66395d6065a936cb1734557ee1a"/>
</Version>
</File>
</Entities>