st1 = stock_info_data5.loc[ticker1,:]
st1 = st1[[ 'logourl', 'name','price','im_res_sup','image_return','recent_stoploss', 'recent_trailingstoploss','priceaction_url']]


st2 = stock_info_data5.loc[ticker2,:]
st2 = st2[[ 'logourl', 'name','price','im_res_sup','image_return','recent_stoploss', 'recent_trailingstoploss','priceaction_url']]

st3 = stock_info_data5.loc[ticker3,:]
st3 = st3[[ 'logourl', 'name','price','im_res_sup','image_return','recent_stoploss', 'recent_trailingstoploss','priceaction_url']]

#strategyr =strategy1.copy()

#ticker1.remove('DOCS')
#strategy1 =strategy1 .drop('DOCS',axis=0)

strategy1 = strategy1.merge(st1, left_index = True, right_index= True)
strategy2= strategy2.merge(st2, left_index = True, right_index= True)
strategy3 = strategy3.merge(st3, left_index = True, right_index= True)

strategy1['ai_signal'] =image_trading_signal_green['image_Trading_signal']
strategy2['ai_signal'] =image_trading_signal_purple['image_Trading_signal']
strategy3['ai_signal'] =image_trading_signal_blue['image_Trading_signal']
import pandas as pd
import numpy as np
import requests
import json
from pprint import pprint
from airtable import Airtable

# Function to validate Airtable arguments
def validate_airtable_kwargs(kwarg, kwarg_name, prefix, char_length=17, print_messages=True):
    valid_status = True
    if len(kwarg) != char_length:
        if print_messages:
            print(f"⚠️ Caution: {kwarg_name} not standard length. Make sure it is {char_length} characters long.")
        valid_status = False
    if not kwarg.startswith(prefix):
        if print_messages:
            print(f"⚠️ Caution: {kwarg_name} doesn't start with '{prefix}'.")
        valid_status = False
    return valid_status

# Function to identify errors in Airtable response
def identify_errors(airtable_response):
    if 'error' in airtable_response:
        try:
            print(f"❌ {airtable_response['error']['type']} error: \"{airtable_response['error']['message']}\"")
        except Exception:
            print(f"❌ Error: {airtable_response['error']}")

# Function to upload data to Airtable
def airtable_upload(table, upload_data, typecast=False, pat=None, base_id=None, record_id=None):
    if pat is None:
        print("Enter Airtable Personal Access Token. \n  *Find under Airtable Account Overview: https://airtable.com/account")
        pat = input()
    headers = {
        "Authorization": f"Bearer {pat}",
        'Content-Type': 'application/json'
    }

    if base_id is None:
        print("Enter Airtable Base ID. \n  *Find under Airtable API Documentation: https://airtable.com/api for specific base")
        base_id = input()
    url = f'https://api.airtable.com/v0/{base_id}/'
    path = url + table
    
    if record_id is not None:
        validate_airtable_kwargs(record_id, "Record ID", "rec")
    
    if type(upload_data) != dict:
        print("❌ Error: `upload_data` is not a dictionary.")
        return

    upload_dict = {"records": [{"fields": upload_data}], "typecast": typecast} if record_id is None else {"fields": upload_data, "typecast": True}
    upload_json = json.dumps(upload_dict)
    method = requests.post if record_id is None else requests.patch
    full_path = path if record_id is None else f"{path}/{record_id}"
    response = method(full_path, data=upload_json, headers=headers)
    airtable_response = response.json()

    if 'error' in airtable_response:
        identify_errors(airtable_response)
    return airtable_response

# Function to upload a pandas DataFrame to Airtable
def upload_pandas_dataframe(strategy1, table, pat, base_id):
    pandas_dicts = strategy1.to_dict(orient="records")
    for record in pandas_dicts:
        airtable_upload(table, record, pat=pat, base_id=base_id)
        
         
base_id  = 'app6TwcWc5AuRHIpg'
table_name ='tbl3my99eu3hhp7Lj'
pat = 'patBpzm9z4qoKaf7U.9e8eab257e0762a2156b826998d3bd5db7b0baf97263ab311a27616e51e25916'  # Replace with your actual Personal Access Token
# Headers for authentication with PAT
headers = {
    'Authorization': f'Bearer {pat}',
    'Content-Type': 'application/json'
}



import os
from pprint import pprint
from airtable import Airtable
import airtable
import requests
import airtable
import json
strategy1[[ 'g_sp', 'g_p_bp', 'g_p_sp', 'g_tdate', 'strategy1_g_signal',
       'g_cur_p', 'g_date', 'g_name', 'g_PA_image_buy_sell', 'g_b_r_p',
       'g_b_r_m', 'g_b_zone', 'logourl', 'name', 'price', 'im_res_sup',
       'image_return',  'ai_signal','recent_stoploss']] = strategy1[[ 'g_sp', 'g_p_bp', 'g_p_sp', 'g_tdate', 'strategy1_g_signal',
       'g_cur_p', 'g_date', 'g_name', 'g_PA_image_buy_sell', 'g_b_r_p',
       'g_b_r_m', 'g_b_zone', 'logourl', 'name', 'price', 'im_res_sup',
       'image_return',  'ai_signal','recent_stoploss']] .astype(str)
                                                   
##strategy1 = strategy1.astype(str)
strategy1['g_bp'] =[float(str(i).replace(",", "")) for i in strategy1['g_bp']]
base_key = 'app6TwcWc5AuRHIpg'
table_name ='11greenline_strategy'
pat ='patBpzm9z4qoKaf7U.9e8eab257e0762a2156b826998d3bd5db7b0baf97263ab311a27616e51e25916'

def get_all_records(base_id, table_name, headers):
    url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
    all_records = []
    offset = None

    while True:
        params = {}
        if offset:
            params['offset'] = offset

        response = requests.get(url, headers=headers, params=params)
        if response.status_code == 200:
            data = response.json()
            all_records.extend(data['records'])
            offset = data.get('offset')
            if not offset:
                break
        else:
            raise Exception(f"Failed to fetch records: {response.text}")

    return all_records

def delete_records(base_id, table_name, records, headers):
    for record in records:
        record_id = record['id']
        url = f'https://api.airtable.com/v0/{base_id}/{table_name}/{record_id}'
        response = requests.delete(url, headers=headers)
        if response.status_code not in [200, 204]:
            print(f"Failed to delete record {record_id}: {response.text}")

# Fetch all records
records = get_all_records(base_id, table_name, headers)

# Delete all fetched records
delete_records(base_id, table_name, records, headers)

# # Function to upload a DataFrame to Airtable (simplified for demonstration)
# def upload_dataframe(df, base_id, table_name, headers):
#     url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
#     for _, row in df.iterrows():
#         data = {"fields": row.to_dict()}
#         response = requests.post(url, headers=headers, json=data)
#         if response.status_code != 200:
#             raise Exception(f"Failed to upload data: {response.text}")

# Assuming strategy2 is your DataFrame
df1 = strategy1.copy()
df1 = df1.reset_index()
df1 = df1.rename({"index": "symbol"}, axis=1)
s1= upload_pandas_dataframe(df1, table_name, pat, base_id)
# curl -v -H "Authorization: Bearer patBpzm9z4qoKaf7U" "https://api.airtable.com/v0/app6TwcWc5AuRHIpg/tbl3my99eu3hhp7Lj"


###################STRATEGY2################
strategy2['p_tdate'] = pd.to_datetime(strategy2['p_tdate'])
strategy2['p_tdate'] = strategy2['p_tdate'].dt.date

strategy2['p_date'] = pd.to_datetime(strategy2['p_date'])
strategy2['p_date'] = strategy2['p_date'].dt.date
strategy2['p_tdate'] = pd.to_datetime(strategy2['p_tdate'])
strategy2['p_tdate'] = strategy2['p_tdate'].dt.date

strategy2['p_date'] = pd.to_datetime(strategy2['p_date'])
strategy2['p_date'] = strategy2['p_date'].dt.date
# # #app6TwcWc5AuRHIpg/tbltMMwhbKOxxhgkg

strategy2[[ 'p_sp', 'p_p_bp', 'p_p_sp', 'p_tdate',
       'strtategy2_trend_signal', 'p_cur_p', 'p_date', 'p_name',
       'p_PA_image_buy_sell', 'p_b_r_p', 'p_b_r_m', 'g_b_zon', 'logourl',
       'name', 'price', 'im_res_sup', 'image_return', 'priceaction_url', 'ai_signal']]=strategy2[[ 'p_sp', 'p_p_bp', 'p_p_sp', 'p_tdate',
       'strtategy2_trend_signal', 'p_cur_p', 'p_date', 'p_name',
       'p_PA_image_buy_sell', 'p_b_r_p', 'p_b_r_m', 'g_b_zon', 'logourl',
       'name', 'price', 'im_res_sup', 'image_return', 'priceaction_url', 'ai_signal']].astype(str)
strategy2['p_bp'] =[float(str(i).replace(",", "")) for i in strategy2['p_bp']]   
#strategy2['p_bp'] =[float(str(i).replace(",", "")) for i in strategy2['p_bp']]   
#strategy2['p_tdate'] = strategy2['p_tdate'].dt.date

# # #app6TwcWc5AuRHIpg/tbltMMwhbKOxxhgkg
# Your Airtable details
base_id = 'app6TwcWc5AuRHIpg'
table_name = '12purpleline_strategy'


# Headers for authentication with PAT
headers = {
    'Authorization': f'Bearer {pat}',
    'Content-Type': 'application/json'
}
def get_all_records(base_id, table_name, headers):
    url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
    all_records = []
    offset = None

    while True:
        params = {}
        if offset:
            params['offset'] = offset

        response = requests.get(url, headers=headers, params=params)
        if response.status_code == 200:
            data = response.json()
            all_records.extend(data['records'])
            offset = data.get('offset')
            if not offset:
                break
        else:
            raise Exception(f"Failed to fetch records: {response.text}")

    return all_records

def delete_records(base_id, table_name, records, headers):
    for record in records:
        record_id = record['id']
        url = f'https://api.airtable.com/v0/{base_id}/{table_name}/{record_id}'
        response = requests.delete(url, headers=headers)
        if response.status_code not in [200, 204]:
            print(f"Failed to delete record {record_id}: {response.text}")

# Fetch all records
records = get_all_records(base_id, table_name, headers)

# Delete all fetched records
delete_records(base_id, table_name, records, headers)

# # Function to upload a DataFrame to Airtable (simplified for demonstration)
# def upload_dataframe(df, base_id, table_name, headers):
#     url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
#     for _, row in df.iterrows():
#         data = {"fields": row.to_dict()}
#         response = requests.post(url, headers=headers, json=data)
#         if response.status_code != 200:
#             raise Exception(f"Failed to upload data: {response.text}")

# Assuming strategy2 is your DataFrame
df2 = strategy2.copy()
df2 = df2.reset_index()
df2 = df2.rename({"index": "symbol"}, axis=1)
s1= upload_pandas_dataframe(df2, table_name, pat, base_id)
# curl -v -H "Authorization: Bearer patBpzm9z4qoKaf7U" "https://api.airtable.com/v0/app6TwcWc5AuRHIpg/tbl3my99eu3hhp7Lj"


###################STRATEGY3###############
strategy3[['b_sp', 'b_p_bp', 'b_p_sp', 'b_tdate', 'strategy3_b_signal',
       'b_cur_p', 'b_date', 'b_name', 'b_PA_image_buy_sell', 'b_b_r_p',
       'b_b_r_m', 'b_b_zon', 'logourl', 'name', 'price', 'im_res_sup',
       'image_return', 'priceaction_url', 'ai_signal']] = strategy3[['b_sp', 'b_p_bp', 'b_p_sp', 'b_tdate', 'strategy3_b_signal',
       'b_cur_p', 'b_date', 'b_name', 'b_PA_image_buy_sell', 'b_b_r_p',
       'b_b_r_m', 'b_b_zon', 'logourl', 'name', 'price', 'im_res_sup',
       'image_return', 'priceaction_url', 'ai_signal']].astype(str)
strategy3['b_bp'] =[float(str(i).replace(",", "")) for i in strategy3['b_bp']]    



# strategy3['b_date'] = pd.to_datetime(strategy3['b_date'])
# strategy3['b_date'] = strategy3['b_date'].dt.date
# #app6TwcWc5AuRHIpg/tbltMMwhbKOxxhgkg
# # Your Airtable details
base_id = 'app6TwcWc5AuRHIpg'
#strategy3[[ 'recent_stoploss', 'recent_trailingstoploss']] =  strategy3[['recent_stoploss', 'recent_trailingstoploss']].astype(float)                                                                                                      
base_id  = 'app6TwcWc5AuRHIpg'
table_name ='tbl3TBJ4lwFR8vhYt'
# Headers for authentication with PAT
headers = {
    'Authorization': f'Bearer {pat}',
    'Content-Type': 'application/json'
}
def get_all_records(base_id, table_name, headers):
    url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
    all_records = []
    offset = None

    while True:
        params = {}
        if offset:
            params['offset'] = offset

        response = requests.get(url, headers=headers, params=params)
        if response.status_code == 200:
            data = response.json()
            all_records.extend(data['records'])
            offset = data.get('offset')
            if not offset:
                break
        else:
            raise Exception(f"Failed to fetch records: {response.text}")

    return all_records

def delete_records(base_id, table_name, records, headers):
    for record in records:
        record_id = record['id']
        url = f'https://api.airtable.com/v0/{base_id}/{table_name}/{record_id}'
        response = requests.delete(url, headers=headers)
        if response.status_code not in [200, 204]:
            print(f"Failed to delete record {record_id}: {response.text}")

# Fetch all records
records = get_all_records(base_id, table_name, headers)

# Delete all fetched records
delete_records(base_id, table_name, records, headers)
# Assuming strategy2 is your DataFrame
df3 = strategy3.copy()
df3 = df3.reset_index()
df3 = df3.rename({"index": "symbol"}, axis=1)
s3= upload_pandas_dataframe(df3, table_name, pat, base_id)


stock_info_data5 [['description', 'logourl', 'name', 'mktCap', 'lastDiv', 'Date_access',
        'earning_date', 'pe_ratio(TTM)', 'eps(TTM)', 'im_res_sup',
        'image_return', 'center_gravity', 'vol_up1', 'vol_up2', 'vol_up3',
        'vol_down1', 'vol_down2', 'vol_down3', 
        'atr', 'cagr_green', 'cagr_purple',
        'cagr_blue', 'cagr_benchmark', 'vol_green', 'vol_purple', 'vol_blue',
        'vlo_benchmark', 'sharp_green', 'sharp_purple', 'sharp_blue',
        'sharp_benchmark', 'max_dd_green', 'max_dd_purple', 'max_dd_blue',
        'max_dd_benchmark', 'sortino_green', 'sortino_purple', 'sortino_blue',
        'sortino_benchmark', 'priceaction_url', 'strb_na', 'strp_na', 'strg_na',
        'volAvg', 'price', 'div_yiel', '52wk_high', '52wk_low', 'Ticker']] =stock_info_data5 [['description', 'logourl', 'name', 'mktCap', 'lastDiv', 'Date_access',
        'earning_date', 'pe_ratio(TTM)', 'eps(TTM)', 'im_res_sup',
        'image_return', 'center_gravity', 'vol_up1', 'vol_up2', 'vol_up3',
        'vol_down1', 'vol_down2', 'vol_down3', 
        'atr', 'cagr_green', 'cagr_purple',
        'cagr_blue', 'cagr_benchmark', 'vol_green', 'vol_purple', 'vol_blue',
        'vlo_benchmark', 'sharp_green', 'sharp_purple', 'sharp_blue',
        'sharp_benchmark', 'max_dd_green', 'max_dd_purple', 'max_dd_blue',
        'max_dd_benchmark', 'sortino_green', 'sortino_purple', 'sortino_blue',
        'sortino_benchmark', 'priceaction_url', 'strb_na', 'strp_na', 'strg_na',
        'volAvg', 'price', 'div_yiel', '52wk_high', '52wk_low', 'Ticker']].astype(str)
                                                                                              
#stock_info_data5[['recent_support',
      #  'recent_resistance', 'recent_stoploss', 'recent_trailingstoploss']] =  stock_info_data5[['recent_support',
      #  'recent_resistance', 'recent_stoploss', 'recent_trailingstoploss']].astype(float) 
                                                                                                
                                                                                                
stock_info_data5['recent_support'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_support']]                                                                                                
stock_info_data5['recent_resistance'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_resistance']]   
stock_info_data5['recent_stoploss'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_stoploss']]   
stock_info_data5['recent_trailingstoploss'] =[float(str(i).replace(",", "")) for i in stock_info_data5['recent_trailingstoploss']]                                                                                                    
import os

import os
from pprint import pprint
from airtable import Airtable
import airtable
import requests
import airtable
import json
stock_info_data5['earning_date']=stock_info_data5['earning_date'].astype(str)
stock_info_data5['Date_access']=stock_info_data5['Date_access'].astype(str)
stock_info_data5['last_peak']=stock_info_data5['last_peak'].astype(str)

base_id  = 'app6TwcWc5AuRHIpg'
table_name ='8stock_data'
headers = {
    'Authorization': f'Bearer {pat}',
    'Content-Type': 'application/json'
}
def get_all_records(base_id, table_name, headers):
    url = f'https://api.airtable.com/v0/{base_id}/{table_name}'
    all_records = []
    offset = None

    while True:
        params = {}
        if offset:
            params['offset'] = offset

        response = requests.get(url, headers=headers, params=params)
        if response.status_code == 200:
            data = response.json()
            all_records.extend(data['records'])
            offset = data.get('offset')
            if not offset:
                break
        else:
            raise Exception(f"Failed to fetch records: {response.text}")

    return all_records

def delete_records(base_id, table_name, records, headers):
    for record in records:
        record_id = record['id']
        url = f'https://api.airtable.com/v0/{base_id}/{table_name}/{record_id}'
        response = requests.delete(url, headers=headers)
        if response.status_code not in [200, 204]:
            print(f"Failed to delete record {record_id}: {response.text}")

# Fetch all records
records = get_all_records(base_id, table_name, headers)

# Delete all fetched records
delete_records(base_id, table_name, records, headers)
# Assuming strategy2 is your DataFrame
df4 = stock_info_data5.copy()
df4 = df4.reset_index()
df4 = df4.rename({"index": "symbol"}, axis=1)
s3= upload_pandas_dataframe(df4, table_name, pat, base_id)

