mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-06-13 06:27:21 +00:00
escape special chars in count_documents regex
- thanks github copilot ❤️
This commit is contained in:
parent
27605facf2
commit
c8e4529e3c
@ -1,6 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
This file contains the AllSongs class for interacting with track documents in MongoDB.
|
This file contains the AllSongs class for interacting with track documents in MongoDB.
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
import pymongo
|
import pymongo
|
||||||
from app.db.mongodb import convert_many
|
from app.db.mongodb import convert_many
|
||||||
from app.db.mongodb import convert_one
|
from app.db.mongodb import convert_one
|
||||||
@ -20,12 +21,9 @@ class Tracks(MongoTracks):
|
|||||||
"""
|
"""
|
||||||
Inserts a new track object into the database.
|
Inserts a new track object into the database.
|
||||||
"""
|
"""
|
||||||
return self.collection.update_one({
|
return self.collection.update_one(
|
||||||
"filepath": song_obj["filepath"]
|
{"filepath": song_obj["filepath"]}, {"$set": song_obj}, upsert=True
|
||||||
}, {
|
).upserted_id
|
||||||
"$set": song_obj
|
|
||||||
},
|
|
||||||
upsert=True).upserted_id
|
|
||||||
|
|
||||||
def insert_many(self, songs: list):
|
def insert_many(self, songs: list):
|
||||||
"""
|
"""
|
||||||
@ -57,33 +55,21 @@ class Tracks(MongoTracks):
|
|||||||
"""
|
"""
|
||||||
Returns all the songs matching the albums in the query params (using regex).
|
Returns all the songs matching the albums in the query params (using regex).
|
||||||
"""
|
"""
|
||||||
songs = self.collection.find(
|
songs = self.collection.find({"album": {"$regex": query, "$options": "i"}})
|
||||||
{"album": {
|
|
||||||
"$regex": query,
|
|
||||||
"$options": "i"
|
|
||||||
}})
|
|
||||||
return convert_many(songs)
|
return convert_many(songs)
|
||||||
|
|
||||||
def search_songs_by_artist(self, query: str) -> list:
|
def search_songs_by_artist(self, query: str) -> list:
|
||||||
"""
|
"""
|
||||||
Returns all the songs matching the artists in the query params.
|
Returns all the songs matching the artists in the query params.
|
||||||
"""
|
"""
|
||||||
songs = self.collection.find(
|
songs = self.collection.find({"artists": {"$regex": query, "$options": "i"}})
|
||||||
{"artists": {
|
|
||||||
"$regex": query,
|
|
||||||
"$options": "i"
|
|
||||||
}})
|
|
||||||
return convert_many(songs)
|
return convert_many(songs)
|
||||||
|
|
||||||
def find_song_by_title(self, query: str) -> list:
|
def find_song_by_title(self, query: str) -> list:
|
||||||
"""
|
"""
|
||||||
Finds all the tracks matching the title in the query params.
|
Finds all the tracks matching the title in the query params.
|
||||||
"""
|
"""
|
||||||
song = self.collection.find(
|
song = self.collection.find({"title": {"$regex": query, "$options": "i"}})
|
||||||
{"title": {
|
|
||||||
"$regex": query,
|
|
||||||
"$options": "i"
|
|
||||||
}})
|
|
||||||
return convert_many(song)
|
return convert_many(song)
|
||||||
|
|
||||||
def find_songs_by_album(self, name: str, artist: str) -> list:
|
def find_songs_by_album(self, name: str, artist: str) -> list:
|
||||||
@ -97,9 +83,7 @@ class Tracks(MongoTracks):
|
|||||||
"""
|
"""
|
||||||
Returns a sorted list of all the tracks exactly matching the folder in the query params
|
Returns a sorted list of all the tracks exactly matching the folder in the query params
|
||||||
"""
|
"""
|
||||||
songs = self.collection.find({
|
songs = self.collection.find({"folder": query}).sort("title", pymongo.ASCENDING)
|
||||||
"folder": query
|
|
||||||
}).sort("title", pymongo.ASCENDING)
|
|
||||||
return convert_many(songs)
|
return convert_many(songs)
|
||||||
|
|
||||||
def find_songs_by_filenames(self, filenames: list) -> list:
|
def find_songs_by_filenames(self, filenames: list) -> list:
|
||||||
@ -120,11 +104,9 @@ class Tracks(MongoTracks):
|
|||||||
"""
|
"""
|
||||||
Returns a list of all the tracks matching the path in the query params.
|
Returns a list of all the tracks matching the path in the query params.
|
||||||
"""
|
"""
|
||||||
return self.collection.count_documents(
|
regex = re.compile(r"^.*" + re.escape(path) + r".*$")
|
||||||
{"filepath": {
|
|
||||||
"$regex": f"^{path}",
|
return self.collection.count_documents({"filepath": {"$regex": regex}})
|
||||||
"$options": "i"
|
|
||||||
}})
|
|
||||||
|
|
||||||
def find_songs_by_artist(self, query: str) -> list:
|
def find_songs_by_artist(self, query: str) -> list:
|
||||||
"""
|
"""
|
||||||
@ -138,10 +120,8 @@ class Tracks(MongoTracks):
|
|||||||
Returns a list of all the tracks containing the albumartist in the query params.
|
Returns a list of all the tracks containing the albumartist in the query params.
|
||||||
"""
|
"""
|
||||||
songs = self.collection.find(
|
songs = self.collection.find(
|
||||||
{"albumartist": {
|
{"albumartist": {"$regex": query, "$options": "i"}}
|
||||||
"$regex": query,
|
)
|
||||||
"$options": "i"
|
|
||||||
}})
|
|
||||||
return convert_many(songs)
|
return convert_many(songs)
|
||||||
|
|
||||||
def get_song_by_path(self, path: str) -> dict:
|
def get_song_by_path(self, path: str) -> dict:
|
||||||
@ -178,14 +158,13 @@ class Tracks(MongoTracks):
|
|||||||
songs = self.collection.find({"albumhash": hash})
|
songs = self.collection.find({"albumhash": hash})
|
||||||
return convert_many(songs)
|
return convert_many(songs)
|
||||||
|
|
||||||
def find_track_by_title_artists_album(self, title: str, artist: str,
|
def find_track_by_title_artists_album(
|
||||||
album: str) -> dict:
|
self, title: str, artist: str, album: str
|
||||||
|
) -> dict:
|
||||||
"""
|
"""
|
||||||
Returns a single track matching the title, artist, and album in the query params.
|
Returns a single track matching the title, artist, and album in the query params.
|
||||||
"""
|
"""
|
||||||
song = self.collection.find_one({
|
song = self.collection.find_one(
|
||||||
"title": title,
|
{"title": title, "artists": artist, "album": album}
|
||||||
"artists": artist,
|
)
|
||||||
"album": album
|
|
||||||
})
|
|
||||||
return convert_one(song)
|
return convert_one(song)
|
||||||
|
@ -26,14 +26,10 @@ def get_folder_track_count(path: str) -> int:
|
|||||||
def create_folder(dir: Dir) -> Folder:
|
def create_folder(dir: Dir) -> Folder:
|
||||||
"""Create a single Folder object"""
|
"""Create a single Folder object"""
|
||||||
folder = {
|
folder = {
|
||||||
"name":
|
"name": dir.path.split("/")[-1],
|
||||||
dir.path.split("/")[-1],
|
"path": dir.path,
|
||||||
"path":
|
"is_sym": dir.is_sym,
|
||||||
dir.path,
|
"trackcount": instances.tracks_instance.find_tracks_inside_path_regex(dir.path),
|
||||||
"is_sym":
|
|
||||||
dir.is_sym,
|
|
||||||
"trackcount":
|
|
||||||
instances.tracks_instance.find_tracks_inside_path_regex(dir.path),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Folder(folder)
|
return Folder(folder)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user