Skip to content

Commit

Permalink
reporting API support
Browse files Browse the repository at this point in the history
  • Loading branch information
marsan02 committed Jan 23, 2024
1 parent b054c9a commit 1baaaad
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 22 deletions.
Binary file modified __pycache__/main.cpython-311.pyc
Binary file not shown.
32 changes: 32 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import services.deal as deals
import services.buyer as buyers
import services.seller as sellers
import services.reporting as reporting

load_dotenv() # This loads the environment variables from .env

Expand Down Expand Up @@ -169,6 +170,37 @@ def submit_deal(*args, **kwargs):
# Update a deal
deal_id=request.args.get('_id')
return deals.put_deal(buyer_id,deal_id,request,client)


@app.route('/reporting', methods=['POST'])
@requires_auth
def submit_report(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
if request.method == 'POST':
payload = request.json
return reporting.run_report(buyer_id,payload['dimensions'],payload['metrics'],payload['filters'])

@app.route('/campaign-monitoring', methods=['GET'])
@requires_auth
def process_campaign_monitoring(*args, **kwargs):
buyer_id = kwargs.get('buyer_id', None)
buyer_id = kwargs.get('buyer_id', None)
all_campaigns = campaigns.list_all_campaigns(buyer_id,client,request.args)
payload = {"dimensions":["campaign_id"],"metrics":["bids","imps","clicks","viewable_imps","spend","revenue"],"filters":[]}
reporting_data = reporting.run_report(buyer_id,payload['dimensions'],payload['metrics'],payload['filters'])
campaign_lookup = {campaign['_id']: campaign for campaign in all_campaigns}
stitched_data = []
print(reporting_data)
for report in reporting_data:
print(report)
campaign_id = report['campaign_id']
if campaign_id in campaign_lookup:
# Merge the dictionaries (Python 3.5+)
merged = {**campaign_lookup[campaign_id], **report}
stitched_data.append(merged)
return stitched_data


@app.route('/deals', methods=['GET'])
@requires_auth
def manage_deal(*args, **kwargs):
Expand Down
Binary file modified services/__pycache__/campaign.cpython-311.pyc
Binary file not shown.
Binary file added services/__pycache__/reporting.cpython-311.pyc
Binary file not shown.
3 changes: 2 additions & 1 deletion services/campaign.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ def list_all_campaigns(buyer_id,client,filters):
all_campaigns_with_id = list(campaigns.find(query))
for item in all_campaigns_with_id:
item["_id"] = str(item["_id"])
return jsonify(all_campaigns_with_id)
item["budget"]={"daily": item["revenue_per_day"], "total": item["total_budget"]}
return all_campaigns_with_id

def post_campaign(buyer_id,request,client):
db = client['campaigns']
Expand Down
32 changes: 11 additions & 21 deletions services/reporting.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,30 @@
import json
import os

def run_report(dimensions, metrics, filters):
def run_report(buyer_id,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'
user = os.environ.get("SNOWFLAKE_USER")
password = os.environ.get("SNOWFLAKE_PASSWORD")
account = os.environ.get('SNOWFLALE_ACCOUNT')
table = os.environ.get('SNOWFLAKE_REPORTING_TABLE')
# Connect to Snowflake
conn = snowflake.connector.connect(
user=user,
password=password,
account=account
)

if buyer_id:
query = 'WHERE 1=1 AND buyer_id=' + buyer_id
else:
query = 'WHERE 1=1'
# 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)
query = f"SELECT {select_clause} FROM {table} {query} {where_clause} GROUP BY {', '.join(dimensions)}"
# Execute the query
cursor = conn.cursor()
try:
Expand All @@ -43,14 +41,6 @@ def run_report(dimensions, metrics, filters):
# 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 = []
return result

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

0 comments on commit 1baaaad

Please sign in to comment.