Skip to main content

Sorteia

Goal: allow arbitrary sorting instead of attribute-based sorting.

  • 1 document per user per resource = CustomSorting.
    • Allow multiple users to sort the same documents differently.
    • Allow for a large number of items to be sorted.

You can use it as a route dependency to use it on your API or use it directly on your code using the raw methods from the slass Sortings.

class CustomSorting(BaseModel):
    id: PyObjectId = Field(alias="_id")
    created_at: datetime
    updated_at: datetime
    created_by: Infostar
    position: int
    resource_collection: str 
    resource_id: PyObjectId

Installation:

From repo:

pip install -e ./

From pypi:

pip install sorteia

Class Sortings

Contains the core operations used to sort the elements. Elements always filtered by the infostar user_handle and authprovider_org.

When initializing the class, pass as arguments collection_name, alias and db_name.

reorder_one

Reorders a resource in the custom order by upserting a CustomSorting object. If you send -1 the position will be set as the max_position (as the last document in the collection)

Returns: ReorderOneUpsertedOut | ReorderOneUpdatedOut

reorder_many

Reorders many resources in the custom order sent as body.

Returns: BulkWriteResult

read_many

Returns the CustomSorting objects in the positions order.

Returns: list[CustomSorting]

read_many_whole_object

Returns the CustomSorting object with the whole object as an attribute named resource ($lookup), in the order they were sorted.

Returns: list[CustomSortingWithResource[T]]

read_many_entire_collection

Returns all of the objects (the ordered and not ordered as well) in the order they were sorted. The objects that have not been ordered yet (don't have a custom-sorting document associated with) will be inserted at the end of the list (sorted by the created_at date, in descending order).

Returns: CommandCursor[Any]

delete_one

Delete a resource from the custom order using the resource_id as reference.

Returns: DeleteResult

read_all_ordered_objects

Reads the objects in order - reads the objects that do not have the custom order and the ones who has it. It loads all of the objects into memory (not recommended).

Returns: list[T]

Example of raw use:

# can initiate Sortings with or without alias and db_name
Sortings(
        collection_name=resource, alias=org, db_name=org
    ).reorder_one(
        creator=creator,
        resource_id=body.resource_id,
        position=position,
        background_task=background_task,
    )

Sortings(collection_name=resource).delete_one(
        resource_id, creator, background_task
      )

All of the Sortings class methods work the same way, by initiating a Sortings object and calling any available method.

How to use the route dependencies on an API:

1. Create the indexes that are required to perform search operations later.

from sorteia.operations import Sortings

# create search index
Sortings.create_search_indexes(
    mongo_uri=DB.get_client(alias=alias).HOST,
    db_name=DB.get(alias=alias).name,
)

2. Initialize the routes dependencies using the method add_sorting_resources_dependency() as seen below.

from sorteia.dependencies import sorting_resources

# include route dependencies
router = APIRouter(prefix="/api")
sorting_resources.add_sorting_resources_dependency(app)

3. Adapt your desired /GET operations to return the custom sorted documents.

from sortings.operations import Sortings

sortings = Sortings(
    collection_name="collection_name", alias=org, db_name=org
)

filtering = { 
    "name": "testing"
}
result = sortings.read_many_entire_collection(
    infostar=infostar,
    offset=offset,
    limit=limit,
    projection=projection,
    **filtering,
)

Metadata

Release files for sorteia 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sorteia 1.0.5
File Size Uploaded Provenance Actions
sorteia-1.0.5.tar.gz 12.8 kB Without provenance Details for sorteia-1.0.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sorteia 1.0.5
File Interpreter ABI Platform Actions
sorteia-1.0.5-py3-none-any.whl Python 3 none any Details for sorteia-1.0.5-py3-none-any.whl

Total release size: 26.9 kB

Release files / sorteia-1.0.5.tar.gz

Download URL sorteia-1.0.5.tar.gz
Size 12.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7ddc98cd62bc9cf7c19caad2eaf68598f91b7069c6ad0e4668ee9a712df578f4
BLAKE2b-256 checksum
How to use checksums
29e0596334f68447f01638df9f0dd5667733f082b64dd4c837145f34fd5f501d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Release files / sorteia-1.0.5-py3-none-any.whl

Download URL sorteia-1.0.5-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8167d036318176ced8e7d86ea2a3d59ae8a0cf00e6d84e3a8a1d92cd3891743d
BLAKE2b-256 checksum
How to use checksums
fad208685199b3830471e6e1919b1f220b215b423b005ad94103d7f762ffd6e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Security for sorteia 1.0.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page