def hello(short_url=None):
    
    domain_url = os.getenv('DOMAIN')

    if not short_url:
        # data = create_line_items(request)
        # total_lines = len(data['line_items'])
        return render_template('success.html', **locals())
    else: 
        try:
            air_base = os.getenv('AIR_TABLE_BASE')
            air_api_key = os.getenv('AIR_TABLE_API')
            air_table_name = os.getenv('AIR_PROTOCOLO_TABLE_NAME')
            at = Airtable(air_base, air_table_name, api_key=air_api_key)
            lookup_record = at.search('short_url', short_url)
            text_qs = lookup_record[0]['fields']['query_string']
            visits = int(lookup_record[0]['fields']['visits']) + 1 if lookup_record[0]['fields']['visits'] >= 0 else 0
            dict_qs = dict(parse_qsl(text_qs))
            data = create_line_items(dict_qs)
            total_lines = len(data['line_items'])
            view_counter = {'visits': visits}
            at.update(lookup_record[0]['id'], view_counter)
            if 'imagen_protocolo' in lookup_record[0]['fields']:
                images = [image['url'] for image in lookup_record[0]['fields']['imagen_protocolo']]
                images = images[:3]
            else:
                images = []

        except Exception as e:
            return jsonify(error=str(e)), 403

    return render_template('index.html', **locals())
示例#2
0
文件: common.py 项目: kkom/dj-assist
async def get_or_create_airtable_record(
    airtable: Airtable,
    search_field: str,
    search_value: Any,
    new_fields: dict[str, Any],
) -> str:
    results: list[AirtableRecordReadModel] = \
        airtable.search(  # type: ignore
            search_field,
            search_value,
    )

    if len(results) > 1:
        raise RuntimeError((
            f"{len(results)} records in {airtable.table_name} "  # type: ignore
            f"found for {search_field} equal to '{search_value}'"))

    result = nth(results, 0)

    if result is not None:
        return result["id"]

    record: AirtableRecordReadModel = airtable.insert(  # type: ignore
        new_fields, )

    return record["id"]
示例#3
0
def events():
    # if ENV != 'production':
    #     with open('fixtures/events.json', 'r') as json_file:
    #         json = json_file.read()
    #     return json

    events_table = Airtable(AIRTABLE_APP,
                            EVENTS_TABLE,
                            api_key=AIRTABLE_API_KEY)

    fields = [
        'id', 'assignment_status', 'assignment', 'name', 'agency_name',
        'classification', 'description', 'start_time', 'end_time',
        'location_address', 'status', 'community_area', 'Custom Start Time',
        'Custom End Time', 'url'
    ]
    event_rows = events_table.search('assignment_status',
                                     'Open Assignment',
                                     fields=fields,
                                     sort="start_time")

    print(event_rows)
    # handle custom start and end times :/
    for row in event_rows:
        fields = row['fields']
        if 'Custom Start Time' in fields:
            fields['start_time'] = fields['Custom Start Time']
            del fields['Custom Start Time']
        if 'Custom End Time' in fields:
            fields['end_time'] = fields['Custom End Time']
            del fields['Custom End Time']

    return jsonify(event_rows)
示例#4
0
def cfgToDict():
    f = open("clientsettings.cfg", "r")

    s = f.read().strip()
    contents = dict(item.split("=") for item in s.split("\n"))

    if 'UW_Owner_or_Fiscal_Group' in contents:
        airtable = Airtable('app9og4P1Z4iet5fT', 'Departments',
                            'keybFjYyk9LuWpxNw')
        res = airtable.search('Name',
                              contents['UW_Owner_or_Fiscal_Group'],
                              fields=['Name'])
        print(res)
        if len(res) == 0:
            del contents['UW_Owner_or_Fiscal_Group']
        else:
            contents['Department'] = [res['id']]
    if 'UW_Location' in contents:
        contents['Location'] = contents['UW_Location']
        del contents['UW_Location']
    if 'UW_NetID' in contents:
        contents['NetID'] = contents['UW_NetID']
        del contents['UW_NetID']
    if 'UW_PURCHASE_DATE' in contents:
        contents['Purchased'] = contents['UW_PURCHASE_DATE']
        del contents['UW_PURCHASE_DATE']

    return contents
示例#5
0
def getuserid_bylevel(level):
    airtable = Airtable(BASE_KEY, 'member', api_key=API_KEY)

    records = airtable.search('Classification level', level)
    idlist = [
        record['fields']['User id'] for record in records
        if 'Unsubscribe' not in record['fields']
    ]
    return idlist
示例#6
0
class Airtable_API:
    def __init__(self, base_key, table_name, api_key):
        self.__table = Airtable(base_key, table_name, api_key)

    def search(self, field_name, field_value):
        return self.__table.search(field_name, field_value)

    def insert(self, fields):
        self.__table.insert(fields)

    def get_all(self):
        return self.__table.get_all()
示例#7
0
def get_id_of_all_moderators(media):
    table = Airtable(BASE_ID, USERS_TABLE_NAME, api_key=API_KEY)
    users_from_table = table.search('is_moderator', '1')
    res_users = list()
    for i in users_from_table:
        try:
            user_id = i['fields'][media.name.lower() + '_id']
            res_users.append(user_id)
        except KeyError:
            pass

    logging.info('get_id_of_all_moderators')
    return res_users
def get_data(table):
    load_dotenv() 

    AIRTABLE_API_KEY = os.getenv("AIRTABLE_API_KEY")
    AIRTABLE_BASE_ID = os.getenv("AIRTABLE_BASE_ID")

    airtable = Airtable(AIRTABLE_BASE_ID, table, api_key=AIRTABLE_API_KEY)

    # Only published Tools should be returned; for other tables return all
    if table == "Tools":
        all_data = airtable.search('Publish', 1)
    else:
        all_data = airtable.get_all()

    return(all_data)
示例#9
0
def get_supplier_id(name):
    """
    Get the Supplier ID for a given name

    If the supplier doesn't exist, create it
    """
    suppliers = Airtable(OPERATIONS_ID, "Suppliers")
    results = suppliers.search("Name", name)
    if len(results) == 0:
        # Create supplier
        result = suppliers.insert({
            "Name": name
        })
        return result['id']
    else:
        return results[0]['id']
示例#10
0
def get_manufacturer_id(name):
    """
    Get the Manufacturer ID for a given name

    If the manfacturer doesn't exist, create it
    """
    manufacturers = Airtable(OPERATIONS_ID, "Manufacturers")
    results = manufacturers.search("Name", name)
    if len(results) == 0:
        # Create manufacturer
        result = manufacturers.insert({
            "Name": name
        })
        return result['id']
    else:
        return results[0]['id']
示例#11
0
class ATable():
    def __init__(self, api_key: str, base_id: str, table: str):
        self.tbl_obj = Airtable(base_id, table, api_key=api_key)
        self.table: list = self.tbl_obj.get_all()
        self.fields: list = list(self.table[0]['fields'].keys())

    def table_search(self, column_name, search_value) -> (list, None):
        if column_name not in self.fields:
            print('"{}" is not a valid field name')
            return None

        results = self.tbl_obj.search(column_name, search_value)

        return results

    def get_contact_suggestions(self,
                                n: int = 10,
                                pers=True,
                                prof=True,
                                srch: str = "Chat > 0"):
        # TODO: Catch cases where format of srch string is incorrect
        records = self.tbl_obj.get_all(formula=srch)
        both_records = [
            i for i in records if i['fields']['Category'] == 'Both'
        ]
        pers_records = []
        prof_records = []

        if pers:
            pers_records = [
                i for i in records if i['fields']['Category'] == 'Personal'
            ]

        if prof:
            prof_records = [
                i for i in records if i['fields']['Category'] == 'Professional'
            ]

        all_recs = both_records + pers_records + prof_records
        all_recs = sorted(all_recs,
                          key=lambda rec: rec['fields']['Chat'],
                          reverse=True)

        if n and len(all_recs) > n:
            return (all_recs[:n])

        return all_recs
def comparte_gana_sms():
    domain_url = os.getenv('DOMAIN')
    air_base = os.getenv('AIR_TABLE_BASE')
    air_api_key = os.getenv('AIR_TABLE_API')
    air_table_name = os.getenv('AIR_PROTOCOLO_TABLE_NAME')
    try:
        #at = Airtable(air_base, air_table_name, api_key=air_api_key)
        email = request.form.get('Email')
        iban = request.form.get('IBAN')
        name = request.form.get('Name')
        codigo_pais_movil = request.form.get('Código País')
        movil = request.form.get('Número de Teléfono Móvil')
        protocolo = request.form.get('Protocolo')[2:-2]

        at = Airtable(air_base, air_table_name, api_key=air_api_key)
        lookup_record = at.search('airtableID', protocolo)

        if 'imagen_protocolo' in lookup_record[0]['fields']:
            del lookup_record[0]['fields']['imagen_protocolo']

        del lookup_record[0]['fields']['date_created']
        del lookup_record[0]['fields']['date_modified']

        if 'pedidos_pagados_clientes' in lookup_record[0]['fields']:
            del lookup_record[0]['fields']['pedidos_pagados_clientes']
        
        del lookup_record[0]['fields']['airtableID']
        del lookup_record[0]['fields']['short_url']

        base_encoded_email = urlencode({"email_login": lookup_record[0]['fields']['email_login']})
        lookup_record[0]['fields']['email_login'] = email
        lookup_record[0]['fields']['query_string'] = lookup_record[0]['fields']['query_string'].replace(base_encoded_email, urlencode({"email_login": email}))
        new_record = at.insert(lookup_record[0]['fields'])
        short_url = {'short_url': new_record['id'].split('rec')[1],
             'airtableID': new_record['id'], 'visits': 0}
        at.update(new_record['id'], short_url)

        mensaje = "Este es tu link para compartir el protocolo {} de Prescriptum: {}/{}/".format(lookup_record[0]['fields']['nombre_protocolo'], domain_url, short_url['short_url'])
        send_sms(codigo_pais_movil+movil, mensaje, "Prescriptum")

        return request.args

    except Exception as e:
        return jsonify(error=str(e)), 403
示例#13
0
def main():
    serial = getSerial()
    airtable = Airtable('app9og4P1Z4iet5fT', 'Computers', 'keybFjYyk9LuWpxNw')
    computers = []

    records = airtable.search('SN', serial)
    print(records)
    cfgDict = cfgToDict()
    # print(cfgDict)

    if len(records) == 0:
        c = Computer(serial)
        airtable.insert(createFields(c, cfgDict))

    for record in records:
        curr = Computer(serial, record)
        computers.append(curr)

    for c in computers:
        airtable.update(c.comp.get('id'), createFields(c, cfgDict))
示例#14
0
def add_mfg_part(mfg_part):
    """
    Add a manufacturer part to the Manufacturer Parts table in airtable
    """
    mfg_id = get_manufacturer_id(mfg_part.manufacturer.name)
    part_number = mfg_part.manufacturer_part_number

    manufacturer_parts = Airtable(OPERATIONS_ID, "Manufacturer Parts")

    # Check if the part already exists
    results = manufacturer_parts.search("Part Number", part_number)
    if len(results) != 0:
        return results[0]['id']

    result = manufacturer_parts.insert({
        "Part Number": part_number,
        "Manufacturer": [
            mfg_id
        ]
    })

    return result["id"]
示例#15
0
def add_part(part):
    """
    Add a part to the Inventory table in airtable
    """
    # Create part_url
    part_url = f"https://{Site.objects.get_current().domain}/bom/part/{part.id}"

    # Get manufacturer and manfacturer part information
    mfg_parts = []
    for mfg_part in part.manufacturer_parts():
        mfg_part_id = add_mfg_part(mfg_part)
        if mfg_part_id not in mfg_parts:
            mfg_parts.append(mfg_part_id)

    # Get supplier and supplier part information
    suppliers = []
    for supplier_part in part.seller_parts():
        supplier_id = get_supplier_id(supplier_part.seller.name)
        if supplier_id not in suppliers:
            suppliers.append(supplier_id)

    part_info = {
        "Part Number": part.full_part_number(),
        "Description": part.description(),
        "Manufacturer Part": mfg_parts,
        "Supplier": suppliers,
        "Django-BOM URL": part_url
    }

    inventory = Airtable(OPERATIONS_ID, "Inventory")
    # Check if part has already been added
    results = inventory.search("Part Number", part.full_part_number())
    if len(results) == 0:
        result = inventory.insert(part_info)
    else:
        result = inventory.update(results[0]['id'], part_info)

    return result['id']
def success():

    air_base = os.getenv('AIR_TABLE_BASE')
    air_api_key = os.getenv('AIR_TABLE_API')
    air_table_name = os.getenv('AIR_PEDIDOS_TABLE_NAME') 
    at = Airtable(air_base, air_table_name, api_key=air_api_key)

    at_prot = Airtable(air_base, os.getenv('AIR_PROTOCOLO_TABLE_NAME'), api_key=air_api_key)

    session_id = request.args.get('session_id', '')
    session = stripe.checkout.Session.retrieve(session_id)
    payment = stripe.PaymentIntent.retrieve(session['payment_intent'])

    at.update_by_field('stripe_session_id', session_id, {'stripe_payment_id': payment['id']})
    at.update_by_field('stripe_session_id', session_id, {'status': payment['status']})
    at.update_by_field('stripe_session_id', session_id, {'paid_amount': payment['amount']/100})

    pedido = at.search('stripe_session_id', session_id)[0]['fields']
    protocolo = at_prot.get(pedido['protocolo'][0])['fields']

    email = {'nombre_consulta': protocolo['nombre_consulta'],
             'nombre_protocolo': protocolo['nombre_protocolo'],
             'shipping_name': pedido['shipping_name'],
             'shipping_email': pedido['shipping_email'],
             'shipping_phone': pedido['shipping_phone'],
             'preciofinal': protocolo['preciofinal'],
             'comisionesfinal': protocolo['comisionesfinal'],
             'modo_empleo': protocolo['modo_empleo'] if protocolo['modo_empleo'] else ''
             }

    email_login = protocolo['email_login']

    subject = 'Tienes una nueva venta de tu protocolo {}'.format(email['nombre_protocolo'])

    send_mail(subject, email_login, 'email.html', **email)

    return render_template('success.html', **locals())
示例#17
0
class AirTableDB:
    """
    Airtable class for all airtable opeartions to table
    """
    def __init__(self, base_key, api_key):
        self.member_table = Airtable(base_key, "Members", api_key)
        self.college_table = Airtable(base_key, "Campus", api_key)
        self.skill_set = Airtable(base_key, "Skills View List", api_key)

    def insert_member_details(self, data):
        return self.member_table.insert(data)

    def get_colleges(self):
        raw_college_list = self.college_table.get_all()
        college_list = [{
            "id":
            college.get("id"),
            "name":
            college.get("fields").get("Your campus/ school name"),
        } for college in raw_college_list]
        return college_list

    def get_skills(self):
        raw_skills_list = self.skill_set.get_all()
        skills_list = [{
            "id": skill.get("id"),
            "name": skill.get("fields").get("Skill"),
        } for skill in raw_skills_list]
        return skills_list

    def check_member_exist(self, member):
        member = self.member_table.search("MobileNumber", member)
        if len(member) != 0:
            return member[0]["id"]
        else:
            return False
示例#18
0
        dns_env = 'unknown'
    # Format shortname
    dns_short_name = dns_short_name.replace('.clare.ai', '')
    dns_short_name = dns_short_name.replace('-demo', 'Demo')
    dns_short_name = dns_short_name.replace('-hkdemo', 'HKDemo')
    row = {
        'ShortName': dns_short_name,
        'Name': dns_name,
        'IP': dns_content,
        'Environment': dns_env,
        'LastUpdated': str(datetime.utcnow()),
        'ModifiedOn': dns_modified_on
    }
    # Search by name
    print('* Update environment for record %s' % dns_name)
    exist_row = airtable.search('Name', dns_name)
    if len(exist_row) == 0:
        # Insert new row
        airtable.insert(row)
    elif len(exist_row) == 1:
        last_modified = datetime.strptime(exist_row[0]['fields']['ModifiedOn'],
                                          '%Y-%m-%dT%H:%M:%S.%fZ')
        current_modified = datetime.strptime(dns_modified_on,
                                             '%Y-%m-%dT%H:%M:%S.%fZ')
        # Only update the row when dns record was modified.
        if last_modified < current_modified:
            # Replace exist row with new one
            airtable.replace(exist_row[0]['id'], row)
    else:
        exit('Airtable has multiple rows with name %s' % dns_name)
示例#19
0
def handle_people_logic(data, problem_id, rec_subgroup):
    people_table = Airtable(intake_form_constants.AIRTABLE_BASE_KEY, 'People', api_key=os.environ['AIRTABLE_KEY'])
    data_people = people_table.search('email', data['sponsor_email'])
    # Existing Person
    if len(data_people):
        people_update_data = {}
        logger.info(data_people)
        # Add this problem to this person based on whether they are already associated with problems
        if 'Problems' in data_people[0]['fields']:
            people_update_data['Problems'] = data_people[0]['fields']['Problems']
            if problem_id not in people_update_data['Problems']:
                people_update_data['Problems'].append(problem_id)
            logger.info('Added Problem List to update data')
        else:
            people_update_data['Problems'] = [problem_id]
            logger.info('Created New Problem List for update data')
        # Add subgroup/group/org to person if needed
        if 'Sub Group' in data_people[0]['fields']:
            people_update_data['Sub Group'] = data_people[0]['fields']['Sub Group']
            logger.info('Added sub group to the update data')
            if rec_subgroup['id'] not in data_people[0]['fields']['Sub Group']:
                people_update_data['Sub Group'].append(rec_subgroup['id'])
                logger.info('Added new subgroup to the update data')
            if 'Group' in rec_subgroup['fields']:
                if 'Group' not in data_people[0]['fields']:
                    people_update_data['Group'] = rec_subgroup['fields']['Group']
                    logger.info('Added Group to the update data')
                else:
                    people_update_data['Group'] = data_people[0]['fields']['Group']
                    for grp in rec_subgroup['fields']['Group']:
                        if grp not in people_update_data['Group']:
                            people_update_data['Group'].append(grp)
                    logger.info('Added new groups to the update data')
                group_table = Airtable(intake_form_constants.AIRTABLE_BASE_KEY, 'Group', api_key=os.environ['AIRTABLE_KEY'])
                if 'Organization' in data_people[0]['fields']:
                    people_update_data['Organization'] = data_people[0]['fields']['Organization']
                    logger.info('Added Organization to the update data')
                else:
                    people_update_data['Organization'] = []
                for grp in people_update_data['Group']:
                    rec_group = group_table.get(grp)
                    if 'Organization' in rec_group['fields']:
                        for org in rec_group['fields']['Organization']:
                            if org not in people_update_data['Organization']:
                                people_update_data['Organization'].append(org)
                        logger.info('Added organization to the update data')
                if not people_update_data['Organization']:
                    people_update_data.pop('Organization')
                    logger.info('Removing organization from update data because there are none')
        rec_people = update_in_airtable(data_people[0]['id'], 'People', people_update_data)
        logger.info('Updated record in airtable: {}'.format(rec_people))
        if 'statusCode' in rec_people:
            return False, rec_people
        return True, rec_people
    else:
        logger.info('Creating new person entry {}'.format(data))
        data_people = {'email': data['sponsor_email']}
        if len(data['sponsor_name'].split(' ', 1)) > 1:
            data_people['first_name'] = data['sponsor_name'].split(' ', 1)[0]
            data_people['last_name'] = data['sponsor_name'].split(' ', 1)[1]
        else:
            data_people['first_name'] = data['sponsor_name']
        if 'Group' in rec_subgroup['fields']:
            data_people['Group'] = rec_subgroup['fields']['Group']
            group_table = Airtable(intake_form_constants.AIRTABLE_BASE_KEY, 'Group', api_key=os.environ['AIRTABLE_KEY'])
            data_people['Organization'] = []
            for grp in data_people['Group']:
                rec_group = group_table.get(grp)
                if 'Organization' in rec_group['fields']:
                    for org in rec_group['fields']['Organization']:
                        if org not in data_people['Organization']:
                            data_people['Organization'].append(org)

        data_people['Sub Group'] = [rec_subgroup['id']]
        data_people['Problems'] = [problem_id]
        if 'sponsor_division' in data:
            data_people['Division'] = data['sponsor_division']
        rec_people = submit_to_airtable(data_people, 'People')
        logger.info('New person entry {}'.format(rec_people))
        if 'statusCode' in rec_people:
            return False, rec_people
        return True, rec_people
from airtable import Airtable
from collections import defaultdict
import sys
from datetime import datetime

# AirTable API setup - replace the values with your own
airtable = Airtable('base-key', 'table-name', api_key='your-api-key')

# Get only records that are in the correct Status
records = airtable.search('Status', 'Ready to Post: All Data Provided')

# Create defaultdict structure
records_list = defaultdict(list)

# Process each record from AirTable
for record in records:

    # For ease of code writing
    record = record['fields']

    # Sanitize bad data in AirTable - Formatting the information
    event_title = record['Event Title'].replace("\n", "")
    event_date = record['Event Date']

    # Remove anything past the city name
    display_city = record['Display City'].split(',')[0]

    # URL might not be provided, catch this error
    try:
        event_url = record['Event URL']
    except KeyError:
示例#21
0
def update_airtable(df_links, airtable_base_key, airtable_table_name):
    logging.info('... send to airtable ...')

    # connect to airtable
    airtable = Airtable(airtable_base_key,
                        airtable_table_name,
                        api_key=os.environ['AIRTABLE_KEY'])

    inserted_count = 0
    updated_count = 0

    for i, row in df_links.iterrows():
        airtable_records = airtable.search('link', row['link'])
        if len(airtable_records) == 0:
            logging.info('... new record ({})...'.format(row['link']))
            record_fields = {
                'link': row['link'],
                'domain': row['domain'],
                'first_seen': row['created_utc'],
                'last_seen': row['created_utc'],
                'first_added': row['last_seen'],
                'last_added': row['last_seen'],
                'times_seen': 1,
                'score_avg': row['score'],
                'score_min': row['score'],
                'score_max': row['score'],
                'score_sum': row['score'],
                'title_list': row['title'],
                'last_title': row['title'],
                'permalink_list': row['permalink'],
                'last_permalink': row['permalink'],
            }
            airtable.insert(record_fields)
            logging.info('... inserted ...')
            inserted_count += 1
        elif len(airtable_records) > 0:
            for record in airtable_records:
                logging.info('... update record ({})...'.format(row['link']))
                record_id = record['id']
                old = airtable.get(record_id)['fields']
                new_score_avg = (old['score_sum'] +
                                 row['score']) / (old['times_seen'] + 1)
                new_score_min = old['score_min'] if old['score_min'] <= row[
                    'score'] else row['score']
                new_score_max = old['score_max'] if old['score_max'] >= row[
                    'score'] else row['score']
                new_score_sum = old['score_sum'] + row['score']
                new_times_seen = old['times_seen'] + 1
                if row['title'] not in old['title_list']:
                    new_title_list = '{}|{}'.format(old['title_list'],
                                                    row['title'])
                else:
                    new_title_list = old['title_list']
                if row['permalink'] not in old['permalink_list']:
                    new_permalink_list = '{}|{}'.format(
                        old['permalink_list'], row['permalink'])
                else:
                    new_permalink_list = old['permalink_list']
                record_fields = {
                    'link': old['link'],
                    'domain': old.get('domain', 'N/A'),
                    'first_seen': old['first_seen'],
                    'last_seen': row['created_utc'],
                    'first_added': old['first_added'],
                    'last_added': row['last_seen'],
                    'times_seen': new_times_seen,
                    'score_avg': new_score_avg,
                    'score_min': new_score_min,
                    'score_max': new_score_max,
                    'score_sum': new_score_sum,
                    'title_list': new_title_list,
                    'last_title': row['title'],
                    'permalink_list': new_permalink_list,
                    'last_permalink': row['permalink'],
                }
                airtable.update(record_id, record_fields)
                logging.info('... updated ...')
                updated_count += 1

    logging.info('... inserted_count = {} ...'.format(inserted_count))
    logging.info('... updated_count = {} ...'.format(updated_count))

    return inserted_count, updated_count
def gather_video_descriptions():
    at_orange = Airtable(os.getenv('AT_APP_KEY_ORANGE'), 'Session hosting',
                         os.getenv('AT_API_KEY'))

    at_optin = Airtable(os.getenv('AT_APP_KEY_ORANGE'), 'optin',
                        os.getenv('AT_API_KEY'))

    at_gray = Airtable(os.getenv('AT_APP_KEY_GRAY'), 'submissions',
                       os.getenv('AT_API_KEY'))

    payloads = []
    for row in at_orange.get_all():
        submission_ids = row['fields']['submission_ids'].split(', ')
        for num, submission_id in enumerate(submission_ids):
            col = f'videoid_{num}'
            if col not in row['fields']:
                continue

            if checked(f'posted_{num}', row['fields']):
                # No use in reposting the information
                continue

            matches = at_optin.search('submission_id', submission_id)
            yes = 'I want my presentation video posted to YouTube'
            if not all([match['fields']['choice'] == yes
                        for match in matches]) or len(matches) == 0 and (
                            not checked('manually_approved', row['fields'])):
                # Not yet approved to send out
                continue

            extended_info = at_gray.match('submission_id', submission_id)
            all_info = {**row['fields'], **extended_info['fields']}

            if f'extra_info_{num}' in all_info:
                all_info['extra_info'] = all_info[f'extra_info_{num}']
            else:
                all_info['extra_info'] = ""

            print(all_info['extra_info'])

            payload = {
                'id': row['fields'][col],
                'snippet': {
                    'title': generate_title(all_info),  # Max 100 characters
                    'description':
                    generate_description(all_info),  # Max 5000 bytes
                    'categoryId': "28",
                    'defaultLanguage': 'en',
                },
                'status': {
                    'embeddable': True,
                    'license': 'youtube',
                    'privacyStatus': 'public',
                    'publicStatsViewable': True,
                    'selfDeclaredMadeForKids': False,
                },
                'recordingDetails': {
                    'recordingDate': all_info['starttime']
                }
            }

            payloads.append(payload)
    return payloads
示例#23
0
airtable_apiKey = os.environ.get("airtable_apiKey")

blogsTable = Airtable(airtable_baseKey, airtable_blogsTableName, airtable_apiKey)
blogPostsTable = Airtable(airtable_baseKey, airtable_blogPostsTableName, airtable_apiKey)

pocket_consumer_key = os.environ.get("pocket_consumer_key")
pocket_access_token = os.environ.get("pocket_access_token")
pocket_headers = { "Content-Type": "application/json; charset=UTF-8" }

for blog in blogsTable.get_all():
  print blog['fields']['Name']
  feed_url = blog['fields']['FeedUrl']
  d = feedparser.parse(feed_url)

  for post in d.entries:
      results = blogPostsTable.search('Url', post.link.encode('ascii', 'ignore'))
      if len(results) == 0:
        payload = {
          'title': post.title,
          'url': post.link,
          'consumer_key': pocket_consumer_key,
          'access_token': pocket_access_token
        }

        try:
          res = requests.post('https://getpocket.com/v3/add', headers=pocket_headers, data=json.dumps(payload))
        except Exception as e:
          sys.stderr.write('An error occurred when trying to deliver the message:\n{0}'.format(e.message))
        else:
          if res.ok:
            blogPostsTable.insert({'Title': post.title, 'Url': post.link.encode('ascii', 'ignore')})
示例#24
0
    domains.append(domain)
df_links['domain'] = domains
df_links['domain'] = df_links['domain'].str.lower().str.replace('www.', '')

print(f' ... df_links.shape = {df_links.shape} ...')

#%%

# connect to airtable
airtable = Airtable(airtable_base_key, airtable_table_name, api_key=os.environ['AIRTABLE_KEY'])

inserted_count = 0
updated_count = 0

for i, row in df_links.iterrows():
    airtable_records = airtable.search('link', row['link'])
    if len(airtable_records) == 0:
        print('... new record ({})...'.format(row['link']))
        record_fields = {
            'link': row['link'],
            'domain': row['domain'],
            'first_seen': row['created_utc'],
            'last_seen': row['created_utc'],
            'first_added': row['last_seen'],
            'last_added': row['last_seen'],
            'times_seen': 1,
            'score_avg': row['score'],
            'score_min': row['score'],
            'score_max': row['score'],
            'score_sum': row['score'],
            'title_list': row['title'],
示例#25
0
obj_Disk = psutil.disk_usage('/')
total = obj_Disk.total / (1024.0**3)
totalstorage = roundup(total)

# wmi gets computersystem information
c = wmi.WMI()
pcinfo = c.Win32_ComputerSystem()[0]
osinfo = c.Win32_OperatingSystem()[0]

with open("serial.txt", 'rb') as file:
    s = file.read().decode('utf-16')
    serialfile = s.split('\n')
    serialfile[1] = serialfile[1].strip()

airtable = Airtable('app9og4P1Z4iet5fT', 'Computers', 'keybFjYyk9LuWpxNw')
computer = airtable.search('SN', serialfile[1])
print(computer)

fmake = pcinfo.Manufacturer.split(' ', 1)[0]
fram = math.ceil(int(pcinfo.TotalPhysicalMemory) / 1024**3)
fcpu = cpuinfo.get_cpu_info()['brand']
fos = osinfo.Caption.split(' ', 1)[1].strip()
fdate = arrow.now().format('YYYY-MM-DD')

if len(computer) == 0:
    print("Computer not in Airtable, creating new record")
elif len(computer) > 1:
    # print("Multiple records found with matching serial")
    #fdept = chooseDept().strip()
    # print(fdept)