From 57302482839b4e4b4bf4f2efd5bdf6d8eba3eccf Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Sat, 24 Aug 2024 14:41:22 +0800 Subject: [PATCH 1/2] Update some async functions definition --- sqlalchemy_crud_plus/crud.py | 12 ++++++------ sqlalchemy_crud_plus/utils.py | 22 +++++++++++----------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/sqlalchemy_crud_plus/crud.py b/sqlalchemy_crud_plus/crud.py index 34bee70..6f541ad 100644 --- a/sqlalchemy_crud_plus/crud.py +++ b/sqlalchemy_crud_plus/crud.py @@ -74,7 +74,7 @@ async def select_model_by_column(self, session: AsyncSession, **kwargs) -> Model :param kwargs: Query expressions. :return: """ - filters = await parse_filters(self.model, **kwargs) + filters = parse_filters(self.model, **kwargs) stmt = select(self.model).where(*filters) query = await session.execute(stmt) return query.scalars().first() @@ -87,7 +87,7 @@ async def select_models(self, session: AsyncSession, **kwargs) -> Sequence[Row[A :param kwargs: Query expressions. :return: """ - filters = await parse_filters(self.model, **kwargs) + filters = parse_filters(self.model, **kwargs) stmt = select(self.model).where(*filters) query = await session.execute(stmt) return query.scalars().all() @@ -103,9 +103,9 @@ async def select_models_order( :param sort_orders: more details see apply_sorting :return: """ - filters = await parse_filters(self.model, **kwargs) + filters = parse_filters(self.model, **kwargs) stmt = select(self.model).where(*filters) - stmt_sort = await apply_sorting(self.model, stmt, sort_columns, sort_orders) + stmt_sort = apply_sorting(self.model, stmt, sort_columns, sort_orders) query = await session.execute(stmt_sort) return query.scalars().all() @@ -149,7 +149,7 @@ async def update_model_by_column( :param kwargs: Query expressions. :return: """ - filters = await parse_filters(self.model, **kwargs) + filters = parse_filters(self.model, **kwargs) total_count = await count(session, self.model, filters) if not allow_multiple and total_count > 1: raise MultipleResultsError(f'Only one record is expected to be update, found {total_count} records.') @@ -198,7 +198,7 @@ async def delete_model_by_column( :param deleted_flag_column: Specify the flag column for logical deletion :return: """ - filters = await parse_filters(self.model, **kwargs) + filters = parse_filters(self.model, **kwargs) total_count = await count(session, self.model, filters) if not allow_multiple and total_count > 1: raise MultipleResultsError(f'Only one record is expected to be delete, found {total_count} records.') diff --git a/sqlalchemy_crud_plus/utils.py b/sqlalchemy_crud_plus/utils.py index a95d1af..4471ddd 100644 --- a/sqlalchemy_crud_plus/utils.py +++ b/sqlalchemy_crud_plus/utils.py @@ -57,7 +57,7 @@ } -async def get_sqlalchemy_filter( +def get_sqlalchemy_filter( operator: str, value: Any, allow_arithmetic: bool = True ) -> Callable[[str], Callable] | None: if operator in ['in', 'not_in', 'between']: @@ -82,35 +82,35 @@ async def get_sqlalchemy_filter( return sqlalchemy_filter -async def get_column(model: Type[Model] | AliasedClass, field_name: str): +def get_column(model: Type[Model] | AliasedClass, field_name: str): column = getattr(model, field_name, None) if column is None: raise ModelColumnError(f'Column {field_name} is not found in {model}') return column -async def parse_filters(model: Type[Model] | AliasedClass, **kwargs) -> list[ColumnElement]: +def parse_filters(model: Type[Model] | AliasedClass, **kwargs) -> list[ColumnElement]: filters = [] for key, value in kwargs.items(): if '__' in key: field_name, op = key.rsplit('__', 1) - column = await get_column(model, field_name) + column = get_column(model, field_name) if op == 'or': or_filters = [ sqlalchemy_filter(column)(or_value) for or_op, or_value in value.items() - if (sqlalchemy_filter := await get_sqlalchemy_filter(or_op, or_value)) is not None + if (sqlalchemy_filter := get_sqlalchemy_filter(or_op, or_value)) is not None ] filters.append(or_(*or_filters)) elif isinstance(value, dict) and {'value', 'condition'}.issubset(value): advanced_value = value['value'] condition = value['condition'] - sqlalchemy_filter = await get_sqlalchemy_filter(op, advanced_value) + sqlalchemy_filter = get_sqlalchemy_filter(op, advanced_value) if sqlalchemy_filter is not None: condition_filters = [] for cond_op, cond_value in condition.items(): - condition_filter = await get_sqlalchemy_filter(cond_op, cond_value, allow_arithmetic=False) + condition_filter = get_sqlalchemy_filter(cond_op, cond_value, allow_arithmetic=False) condition_filters.append( condition_filter(sqlalchemy_filter(column)(advanced_value))(cond_value) if cond_op != 'between' @@ -118,19 +118,19 @@ async def parse_filters(model: Type[Model] | AliasedClass, **kwargs) -> list[Col ) filters.append(and_(*condition_filters)) else: - sqlalchemy_filter = await get_sqlalchemy_filter(op, value) + sqlalchemy_filter = get_sqlalchemy_filter(op, value) if sqlalchemy_filter is not None: filters.append( sqlalchemy_filter(column)(value) if op != 'between' else sqlalchemy_filter(column)(*value) ) else: - column = await get_column(model, key) + column = get_column(model, key) filters.append(column == value) return filters -async def apply_sorting( +def apply_sorting( model: Type[Model] | AliasedClass, stmt: Select, sort_columns: str | list[str], @@ -170,7 +170,7 @@ async def apply_sorting( validated_sort_orders = ['asc'] * len(sort_columns) if not sort_orders else sort_orders for idx, column_name in enumerate(sort_columns): - column = await get_column(model, column_name) + column = get_column(model, column_name) order = validated_sort_orders[idx] stmt = stmt.order_by(asc(column) if order == 'asc' else desc(column)) From ca16f1c9961b1499ac8712d18bd3cb529111a7d3 Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Sat, 24 Aug 2024 14:50:45 +0800 Subject: [PATCH 2/2] Update ci for build docs --- .github/workflows/docs.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1d4e8b8..b409493 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -8,6 +8,7 @@ permissions: jobs: deploy: runs-on: ubuntu-latest + if: github.event.repository.fork == false steps: - uses: actions/checkout@v4 - name: Configure Git Credentials @@ -16,7 +17,7 @@ jobs: git config user.email 41898282+github-actions[bot]@users.noreply.github.com - uses: actions/setup-python@v5 with: - python-version: 3.10 + python-version: 3.x - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV - uses: actions/cache@v4 with: @@ -24,5 +25,8 @@ jobs: path: .cache restore-keys: | mkdocs-material- - - run: pip install mkdocs-material + - run: apt-get install pngquant + - run: pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git - run: mkdocs gh-deploy --force +env: + GH_TOKEN: ${{ secrets.GH_TOKEN }}