Skip to content

Query: contains doesn't work with long prefix that end with 1 #680

@chriskathumbi

Description

@chriskathumbi

Summary

When querying using name contains option, if the prefix ends with '1' it fails for all words above 19 characters.
Escaping the "\1" somehow fixes it (why though)
Excluding it by cutting the prefix short: works.
Using the full file name: works

Expected Behavior

  • Get a list of files that have the prefix

Actual Behavior

  • Returns empty list

Steps to Reproduce the Problem

from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
import io


scoped_creds = Credentials.from_service_account_info(creds, scopes=SCOPES)

gdrive = build("drive", "v3", credentials=scoped_creds)

parent_id = ""
data = io.BytesIO()


file_metadata = {
    "name": "thistwentyletterword_20230122",
    # "mimeType": "application/vnd.google-apps.spreadsheet", 
    "parents": ["parent_id"]
}
media = MediaIoBaseUpload(data, mimetype="text/csv", resumable=True)
# pylint: disable=maybe-no-member
print(
    gdrive.files()
    .create(
        supportsAllDrives=True, body=file_metadata, media_body=media, fields="id"
    )
    .execute()
)

# -> {'id': 'long_generated_file_id'}

# search for file with 'thistwentyletterword_202301'
# adding more characters after the '1' fails as well as long as it's not the full file name.

print(
    gdrive.files()
    .list(
        spaces="drive",
        q=f"""\
            mimeType != 'application/vnd.google-apps.folder'\
            and name contains 'thistwentyletterword_202301'\
            and trashed=false
            """,
        fields="files(id, name, mimeType)",
    )
    .execute()
    .get("files")
)

# out-> []

# Escape the "\1"
print(
    gdrive.files()
    .list(
        spaces="drive",
        q=f"""\
            mimeType != 'application/vnd.google-apps.folder'\
            and name contains 'thistwentyletterword_20230\1'\
            and trashed=false
            """,
        fields="files(id, name, mimeType)",
    )
    .execute()
    .get("files")
)

# out-> [{'mimeType': 'text/csv', 'id': 'long_generated_file_id', 'name': 'thistwentyletterword_20230122'}]

Specifications

  • Python version (python --3.10.7)
  • OS (Mac/Linux/Windows)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions