Skip to content

Commit

Permalink
Made changes to suppor edit and delete to campaigns, creatives, adver…
Browse files Browse the repository at this point in the history
…tisers and deals. Buyers and Sellers pending
  • Loading branch information
marsan02 committed Jan 16, 2024
1 parent 3e09620 commit 2f9e84f
Show file tree
Hide file tree
Showing 15 changed files with 119 additions and 31 deletions.
10 changes: 9 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
MONGO_URI=mongodb+srv://paulandrewfarrow:pVpF90Zb0IRSwAZk@bidbus.ncm28k2.mongodb.net
FLASK_APP=application.py
GEOLITE_PATH=geo/GeoLite2-Country.mmdb
GEOLITE_PATH=geo/GeoLite2-Country.mmdb
SNOWFLAKE_DOMAIN=hvoelet-ie07082.snowflakecomputing.com
SNOWFLALE_ACCOUNT=HVOELET.IE07082
SNOWFLAKE_USER=datapipeline
SNOWFLAKE_PASSWORD=wodwEb-nondes-6gojnu
SNOWFLAKE_DATABASE=anotherdsp
SNOWFLAKE_SCHEMA=public
SNOWFLAKE_WAREHOUSE=COMPUTE_WH
SNOWFLAKE_REPORTING_TABLE=anotherdsp.public.campaign_reporting
Binary file modified __pycache__/main.cpython-311.pyc
Binary file not shown.
29 changes: 17 additions & 12 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,37 +57,42 @@ def process_campaign(*args, **kwargs):
return campaigns.get_campaign(buyer_id,request.args['_id'],client)
elif request.method == 'PUT':
# Update a campaign
return campaigns.put_campaign(buyer_id,request.args['_id'],request.json,client)
return campaigns.put_campaign(buyer_id,request.args['_id'],request,client)

elif request.method == 'DELETE':
# Delete a campaign
return campaigns.delete_campaign(buyer_id,campaign_name,client)
return campaigns.delete_campaign(buyer_id,request.args['_id'],client)

@app.route('/submit-creative', methods=['POST'])
@app.route('/submit-creative', methods=['POST','PUT'])
@requires_auth
def submit_creative(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
return creatives.post_creative(buyer_id,request,client)
if request.method =='POST':
return creatives.post_creative(buyer_id,request,client)
elif request.method == 'PUT':
return creatives.put_creative(buyer_id,request.args['_id'],request,client)


@app.route('/creatives', methods=['GET'])
@requires_auth
def manage_creatives(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
return creatives.get_creative(buyer_id,client,request.args)
return creatives.list_all_creatives(buyer_id,client,request.args)

@app.route('/creatives/<creative_name>', methods=['GET', 'PUT', 'DELETE'])
@app.route('/creative', methods=['GET', 'PUT', 'DELETE'])
@requires_auth
def process_creative(creative_name):
def process_creative(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
if request.method == 'GET':
#retrieve creative
return creatives.get_creative(buyer_id,creative_name,client)
return creatives.get_creative(buyer_id,client,request.args)
elif request.method == 'PUT':
# Update a creative
return creatives.put_creative(buyer_id,creative_name,request.json,client)
return creatives.put_creative(buyer_id,request.args['_id'],request.json,client)

elif request.method == 'DELETE':
# Delete a creative
return creative.delete_creative(buyer_id,creative_name,client)
return creatives.delete_creative(buyer_id,request.args['_id'],client)

@app.route('/submit-advertiser', methods=['POST','PUT'])
@requires_auth
Expand Down Expand Up @@ -119,7 +124,7 @@ def process_advertiser(*args, **kwargs):

elif request.method == 'DELETE':
# Delete a advertiser
return advertisers.delete_advertiser(buyer_id,advertiser_name,client)
return advertisers.delete_advertiser(buyer_id,request.args['_id'],client)

@app.route('/submit-buyer', methods=['POST','PUT'])
@requires_auth
Expand Down Expand Up @@ -183,7 +188,7 @@ def process_deal(*args, **kwargs):

elif request.method == 'DELETE':
# Delete a deal
return deals.delete_deal(buyer_id,deal_name,client)
return deals.delete_deal(buyer_id,request.args['_id'],client)


@app.route('/submit-seller', methods=['POST','PUT'])
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ ua-parser
user-agents
gunicorn
python-jose

snowflake-connector-python
Binary file modified services/__pycache__/advertiser.cpython-311.pyc
Binary file not shown.
Binary file modified services/__pycache__/buyer.cpython-311.pyc
Binary file not shown.
Binary file modified services/__pycache__/campaign.cpython-311.pyc
Binary file not shown.
Binary file modified services/__pycache__/creative.cpython-311.pyc
Binary file not shown.
Binary file modified services/__pycache__/deal.cpython-311.pyc
Binary file not shown.
9 changes: 6 additions & 3 deletions services/advertiser.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def put_advertiser(buyer_id,advertiser_id,request,client):
db = client['advertisers']
advertisers = db.advertisers
advertiser_id=ObjectId(advertiser_id)
payload = prepare_data(request.get_json())[0]
payload = prepare_data(buyer_id,request.get_json())[0]
result = advertisers.update_one({"_id": advertiser_id, "buyer_id":buyer_id}, {"$set": payload})
if result.matched_count:
print("updated")
Expand All @@ -27,10 +27,13 @@ def put_advertiser(buyer_id,advertiser_id,request,client):
print("error)")
return jsonify({"message": "advertiser not found"}), 404

def delete_advertiser(advertiser_name,client):
def delete_advertiser(buyer_id,advertiser_id,client):
db = client['advertisers']
advertisers = db.advertisers
result = advertisers.delete_one({"advertiser_name": advertiser_name})
query = {"_id": ObjectId(advertiser_id)}
if buyer_id:
query['buyer_id']=buyer_id
result = advertisers.delete_one(query)
if result.deleted_count:
return jsonify({"message": "advertiser deleted"})
else:
Expand Down
6 changes: 4 additions & 2 deletions services/buyer.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,10 @@ def delete_buyer(buyer_name,client):
def list_all_buyers(buyer_id,client):
db = client['buyers']
buyers = db.buyers
buyer_id = ObjectId(buyer_id)
all_buyers_with_id = list(buyers.find({"_id":buyer_id}))
query=dict({})
if buyer_id:
query=dict({"_id":ObjectId(buyer_id)})
all_buyers_with_id = list(buyers.find(query))
for item in all_buyers_with_id:
print(item)
item["_id"] = str(item["_id"])
Expand Down
10 changes: 7 additions & 3 deletions services/campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def put_campaign(buyer_id,campaign_id,request,client):
db = client['campaigns']
campaigns = db.campaigns
campaign_id=ObjectId(campaign_id)
payload = prepare_data(request.get_json())[0]
print(request)
payload = prepare_data(buyer_id,request.get_json())[0]
result = campaigns.update_one({"_id": campaign_id, "buyer_id":buyer_id}, {"$set": payload})
if result.matched_count:
print("updated")
Expand All @@ -27,10 +28,13 @@ def put_campaign(buyer_id,campaign_id,request,client):
print("error)")
return jsonify({"message": "Campaign not found"}), 404

def delete_campaign(buyer_id,campaign_name,client):
def delete_campaign(buyer_id,campaign_id,client):
db = client['campaigns']
campaigns = db.campaigns
result = campaigns.delete_one({"campaign_name": campaign_name, "buyer_id":buyer_id})
query = {"_id": ObjectId(campaign_id)}
if buyer_id:
query['buyer_id']=buyer_id
result = campaigns.delete_one(query)
if result.deleted_count:
return jsonify({"message": "Campaign deleted"})
else:
Expand Down
15 changes: 11 additions & 4 deletions services/creative.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ def get_creative(buyer_id,client, filters):
db = client['creatives']
creatives = db.creatives
adv_id=filters.get('advertiser_id')
creative_id=filters.get('_id')
query=dict({"buyer_id":buyer_id})
if creative_id:
query["_id"]= ObjectId(creative_id)
if adv_id:
query["advertiser_id"]= adv_id
all_creatives = list(creatives.find(query))
Expand All @@ -23,19 +26,23 @@ def get_creative(buyer_id,client, filters):
else:
return jsonify({"message": "creative not found"}), 404

def put_creative(buyer_id,creative_name,update_data,client):
def put_creative(buyer_id,creative_id,update_data,client):
update_data = update_data.get_json()
db = client['creatives']
creatives = db.creatives
result = creatives.update_one({"creative_name": creative_name, "buyer_id":buyer_id}, {"$set": updated_data})
result = creatives.update_one({"_id": ObjectId(creative_id), "buyer_id":buyer_id}, {"$set": update_data})
if result.matched_count:
return jsonify({"message": "creative updated"})
else:
return jsonify({"message": "creative not found"}), 404

def delete_creative(buyer_id,creative_name,client):
def delete_creative(buyer_id,creative_id,client):
db = client['creatives']
creatives = db.creatives
result = creatives.delete_one({"creative_name": creative_name,"buyer_id":buyer_id})
query = {"_id": ObjectId(creative_id)}
if buyer_id:
query['buyer_id']=buyer_id
result = creatives.delete_one(query)
if result.deleted_count:
return jsonify({"message": "creative deleted"})
else:
Expand Down
13 changes: 8 additions & 5 deletions services/deal.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def put_deal(buyer_id,deal_id,request,client):
db = client['deals']
deals = db.deals
deal_id=ObjectId(deal_id)
payload = prepare_data(request.get_json())[0]
payload = prepare_data(buyer_id,request.get_json())[0]
result = deals.update_one({"_id": deal_id}, {"$set": payload})
if result.matched_count:
print("updated")
Expand All @@ -27,10 +27,13 @@ def put_deal(buyer_id,deal_id,request,client):
print("error)")
return jsonify({"message": "deal not found"}), 404

def delete_deal(buyer_id,deal_name,client):
def delete_deal(buyer_id,deal_id,client):
db = client['deals']
deals = db.deals
result = deals.delete_one({"deal_name": deal_name})
query = {"_id": ObjectId(deal_id)}
if buyer_id:
query['buyer_id']=buyer_id
result = deals.delete_one(query)
if result.deleted_count:
return jsonify({"message": "deal deleted"})
else:
Expand All @@ -51,7 +54,7 @@ def post_deal(buyer_id,request,client):
print("Submitting deal")
try:

deal_data = prepare_data(request.get_json())
deal_data = prepare_data(buyer_id,request.get_json())
try:
deals.insert_one(deal_data[0])
return jsonify({"message": "deal added"}), 201
Expand Down Expand Up @@ -81,7 +84,7 @@ def prepare_data(buyer_id,data):
"code": code,
"buyer_id": buyer_id,
"deal_floor": deal_floor,
"prive_type": price_type,
"price_type": price_type,
"deal_floor_curr": deal_floor_curr
}]
return payload
56 changes: 56 additions & 0 deletions services/reporting.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import snowflake.connector
import json
import os

def run_report(dimensions, metrics, filters):
# Snowflake connection parameters
#user = os.environ.get("SNOWFLAKE_USER")
#password = os.environ.get("SNOWFLAKE_PASSWORD")
#account = os.environ.get('SNOWFLAKE_ACCOUNT')
#table = os.environ.get('SNOWFLAKE_REPORTING_TABLE')
account ="HVOELET-IE07082"
user="datapipeline"
password="wodwEb-nondes-6gojnu"
table='anotherdsp.public.campaign_reporting'
# Connect to Snowflake
conn = snowflake.connector.connect(
user=user,
password=password,
account=account
)

# Build the SELECT clause with SUM for metrics
select_clause = ', '.join(dimensions + [f"SUM({metric}) AS {metric}" for metric in metrics])

# Build the WHERE clause based on filters
where_clause = ' AND '.join([f"{filter['field']} {filter['operator']} '{filter['value']}'" for filter in filters])

# Build the complete SQL query
query = f"SELECT {select_clause} FROM {table} WHERE 1=1 {where_clause} GROUP BY {', '.join(dimensions)}"
print(query)
# Execute the query
cursor = conn.cursor()
try:
cursor.execute(query)
rows = cursor.fetchall()
except Exception as e:
print(f"Error: {e}")
return {}
finally:
cursor.close()
conn.close()

# Format the results
columns = dimensions + metrics
result = [dict(zip(columns, row)) for row in rows]

# Convert to JSON
return json.dumps(result)

# Example usage
dimensions = ['campaign_id', 'creative_id']
metrics = ['imps', 'clicks']
filters = []

report = run_report(dimensions, metrics, filters)
print(report)

0 comments on commit 2f9e84f

Please sign in to comment.