Glider
Loading...
Searching...
No Matches
CatalogueGeneratorV2.py
Go to the documentation of this file.
1import os
2import sys
3import ssl
4from datetime import datetime
5from pymongo import MongoClient, InsertOne
6from dotenv import load_dotenv, dotenv_values
7from MongoConnection import mongo_connection
8load_dotenv()
9
10
11mongo_conn = mongo_connection()
12
13cat_collection = mongo_conn.mongo_conn_catalogue_gen()
14
15collection = mongo_conn.mongo_conn_sales()
16
17
18def catalogue_generation(date, client_id):
19 """Group data by releases and tracks and build de catalogue
20
21 Args:
22 date (datetime): is the current date (when last files were processed)
23 client_id (str): client_id to identify sales
24 Returns: Nothing
25 """
26 date = date.replace(hour=0, minute=0, second=0, microsecond=0)
27 pipeline = [
28 {'$match': {"accounting_date": date, "client_id": client_id}},
29 {
30 "$group": {
31 "_id": "$release_id",
32 'client_id':{'$first': '$client_id'},
33 "release_title": {'$first': "$release_title"},
34 "tracks": { "$addToSet": {
35 "isrc_id": "$isrc_id",
36 # "release_title": "$release_title",
37 "track_title": "$track_title",
38 "label_id": "$label_id",
39 "artists": "$artists"},
40 }
41 }
42 },
43 {
44 "$project": {
45 "_id": 0,
46 "release_id": "$_id",
47 "release_title": 1,
48 "client_id": 1,
49 "tracks": 1
50 }
51 }
52 ]
53
54 files = collection.aggregate(pipeline)
55 for doc in files:
56 existing_doc = cat_collection.find_one({"release_id": doc["release_id"]})
57 if existing_doc:
58 new_values = doc["tracks"]
59 [cat_collection.update_one({"release_id":doc["release_id"], "client_id": doc["client_id"]}, {"$addToSet": {"tracks": i}}) for i in new_values]
60 cat_collection.update_one({"release_id":doc["release_id"], "client_id": doc["client_id"]}, {"$set": {"updated_at": date}})
61 else:
62 doc["updated_at"] = date
63 cat_collection.insert_one(doc)
64
65 print(f"Catalogue generated")