コード例 #1
0
def test_object_api_key():

    cfg = config.get("toppings")

    kn = Knack(obj=cfg['obj'],
               app_id=AUTH['app_id'],
               api_key=AUTH['api_key'],
               page_limit=2,
               rows_per_page=10)

    assert len(kn.data) > 0
コード例 #2
0
    def test_object_api_key(self):
        from knackpy import Knack

        app = self.apps['object_api_key']

        kn = Knack(obj=app['obj'],
                   app_id=app['app_id'],
                   api_key=app['api_key'],
                   page_limit=2,
                   rows_per_page=10)

        assert len(kn.data) == 20
コード例 #3
0
    def test_scene_view_no_api_key(self):
        from knackpy import Knack

        app = self.apps['scene_view_no_api_key']

        kn = Knack(scene=app['scene'],
                   view=app['view'],
                   app_id=app['app_id'],
                   page_limit=1,
                   rows_per_page=10)

        assert len(kn.data_raw) > 0
コード例 #4
0
def test_scene_view_with_api_key():

    cfg = config.get("toppings")

    kn = Knack(scene=cfg['scene'],
               view=cfg['view'],
               ref_obj=cfg['ref_obj'],
               app_id=AUTH['app_id'],
               api_key=AUTH['api_key'],
               page_limit=2,
               rows_per_page=10)

    assert len(kn.data) > 0
コード例 #5
0
    def test_scene_view_with_api_key(self):
        from knackpy import Knack

        app = self.apps['scene_view_with_api_key']

        kn = Knack(scene=app['scene'],
                   view=app['view'],
                   ref_obj=app['ref_obj'],
                   app_id=app['app_id'],
                   api_key=app['api_key'],
                   page_limit=2,
                   rows_per_page=10)

        assert len(kn.data) == 20
コード例 #6
0
def update_output(contents):
    kn = Knack(obj='object_17',
               app_id='59ca76c0e4c83424df3eee62',
               api_key='a0998110-a889-11e7-9b23-7d5afe966012 ')  # added
    if contents is not None:
        content_type, content_string = contents.split(',')
        if 'csv' in content_type:
            knack_csv = pd.read_csv(
                io.StringIO(
                    pybase64.b64decode(content_string).decode('utf-8')))
            knack_db = pd.DataFrame(kn.data)
            knack_db.drop('Email', axis=1, inplace=True)
            knack_db['LinkedIn profile'] = knack_db['LinkedIn profile_url']
            #rename knack data to fit the new data
            knack_db.rename(columns={
                'Participant Name_first': 'First',
                'Participant Name_last': 'Last',
                'Address_city': 'City',
                'Email_email': 'Email',
                'Address_street': 'street',
                'Address_country': 'Country',
                'Address_state': 'State',
                'Address_zip': 'Zip'
            },
                            inplace=True)
            knack_db.id = ''
            knack_db.drop([
                'Address_latitude',
                'Address_longitude',
                'Address',
                'Participant Name_middle',
                'Participant Name_title',
            ],
                          axis=1,
                          inplace=True)

            knack_db = knack_db[knack_csv.columns.tolist()]
            knack_db['Current Time Equation'] = ''
            knack_db['Date added'] = ''
            knack_db['Last updated'] = ''
            knack_db.Phone = knack_db.Phone.apply(pd.Series).iloc[::, 3:4]

            for col in knack_csv.columns.tolist():
                knack_csv[col] = knack_csv[col].astype('object')
            list_of_columns = [
                'First', 'Last', 'Company is sponsor user', 'SU',
                'Company name', 'street', 'Zip', 'City', 'State', 'Country',
                'Time zone', 'Recruiting source', 'Phone', 'Email',
                'LinkedIn profile', 'Total compensation this year', 'Personas',
                'Date added', 'Last updated', 'Updated by',
                'Wants to participate in future activities?', 'Age range',
                'Years in current role', 'Years in current industry',
                'Job duties', 'Time Zone Selector', 'Tome Zone Hours',
                'Current Time Equation', 'Business Model', 'Company size',
                'Company Revenue', 'Team size', 'Industry', 'Job title',
                'Role/Responsibilities', 'WCE Products used', 'UserTesting ID',
                'id'
            ]
            knack_csv = knack_csv[list_of_columns]
            knack_csv = knack_csv.apply(lambda x: x.astype('str'))
            knack_csv = knack_csv.replace('nan', '', regex=True)
            knack_csv['Company size'] = knack_csv['Company size'].str.split(
                '.', expand=True)[0]

            knack_db = knack_db[list_of_columns]
            knack_db = knack_db.apply(lambda x: x.astype('str'))
            knack_db = knack_db.replace('nan', '', regex=True)

            knack_csv = knack_csv.apply(lambda x: x.str.title())
            knack_db = knack_db.apply(lambda x: x.str.title())

            knack_csv = knack_csv.astype(knack_db.dtypes.to_dict())
            df_knack = knack_csv.merge(knack_db, how='left', indicator=True)
            received = df_knack.shape[0]
            df_knack = df_knack[df_knack['_merge'] == 'left_only']
            df_knack.drop('_merge', axis=1, inplace=True)

            df_knack.columns = cols.values()
            # Ectract other non objects values in their dataframe
            df_knack_sub1 = df_knack.iloc[::, 2:5]
            df_knack_sub2 = df_knack.iloc[::, 10:38]
            df_knack_sub = pd.concat([df_knack_sub1, df_knack_sub2], axis=1)

            # convert data into dict
            df_knack_sub_dict = df_knack_sub.to_dict(orient='records')

            dict_with_values = []
            for dict_data in df_knack_sub_dict:
                dic = {i: j for i, j in dict_data.items() if j != 'N/A'}
                dict_with_values.append(dic)

            # lets get the name objects
            bio_object = df_knack.iloc[::, 0:2]
            bio_object_dict = bio_object.to_dict(orient='records')

            #lets get address objects
            address_object = df_knack.iloc[::, 5:10]
            address_object.columns = address_object.columns.str.lower()
            address_object_dict = address_object.to_dict(orient='records')

            bio_val = []
            for i, dicti in enumerate(dict_with_values):
                dicti['field_298'] = bio_object_dict[i]
                bio_val.append(dicti)

            bio_val_addr = []
            for i, dicti in enumerate(bio_val):
                dicti["field_301"] = address_object_dict[i]
                bio_val_addr.append(dicti)

            all_data = []
            for record in bio_val_addr:
                response = knackpy.record(
                    record,
                    obj_key='object_17',
                    app_id='59ca76c0e4c83424df3eee62',
                    api_key='a0998110-a889-11e7-9b23-7d5afe966012',
                    method='create')
                all_data.append(record)
            return html.Div(children=[
                '{} records received, {} unique record succesfully loaded into Knack'
                .format(received, len(all_data))
            ],
                            style={
                                'text-align': 'center',
                                'width': '600px',
                                'margin-left': '520px',
                                'margin-bottom': '300px',
                                'backgroundColor': '#e3c9c9'
                            },
                            className=
                            "alert alert-success alert-dismissible fade show")

        elif 'xlsx' in content_type:

            return html.Div([
                html.
                h5("Knack migrate does not allow excel files files, save your file as csv"
                   )
            ])
        else:
            return html.Div([html.h5(html.P("Wrong file upload"))])
コード例 #7
0
from knackpy import Knack

filters = {
    'match': 'and',
      'rules': [
        {
          'field':'field_208',
          'operator':'is',
          'value':'06/27/2020'
        },
        {
          'field':'field_148',
          'operator':'is',
          'value':'Complete'
        }
      ]
    }

kn = Knack(
    obj = 'object_17',
    app_id = '5ee26710da32c300153905ca',
    api_key = 'abde5d40-ae8d-11ea-8cd1-1dc626a4204b',
    filters=filters
    )
for row in kn.data:
        print(row)

kn.to_csv('c:\data\cert.csv')
コード例 #8
0
ファイル: routesb.py プロジェクト: jdpersona/testingrepo
def profile():
    kn = Knack(obj='object_17',
               app_id='59ca76c0e4c83424df3eee62',
               api_key='a0998110-a889-11e7-9b23-7d5afe966012 ')
    info = oidc.user_getinfo(["sub", "name", "email"])
    if request.method == 'POST':
        if 'file' not in request.files:
            print('No file attached in request')
            return redirect(request.url)
        knack_csv = pd.read_csv(request.files.get('file'))
        knack_db = pd.DataFrame(kn.data)
        knack_db.drop('Email', axis=1, inplace=True)
        knack_db['LinkedIn profile'] = knack_db['LinkedIn profile_url']
        #rename knack data to fit the new data
        knack_db.rename(columns={
            'Participant Name_first': 'First',
            'Participant Name_last': 'Last',
            'Address_city': 'City',
            'Email_email': 'Email',
            'Address_street': 'street',
            'Address_country': 'Country',
            'Address_state': 'State',
            'Address_zip': 'Zip'
        },
                        inplace=True)
        knack_db.id = ''
        knack_db.drop([
            'Address_latitude',
            'Address_longitude',
            'Address',
            'Participant Name_middle',
            'Participant Name_title',
        ],
                      axis=1,
                      inplace=True)

        knack_db = knack_db[knack_csv.columns.tolist()]
        knack_db['Current Time Equation'] = ''
        knack_db['Date added'] = ''
        knack_db['Last updated'] = ''
        knack_db.Phone = knack_db.Phone.apply(pd.Series).iloc[::, 3:4]

        for col in knack_csv.columns.tolist():
            knack_csv[col] = knack_csv[col].astype('object')

        for col in knack_csv.columns.tolist():
            knack_csv[col] = knack_csv[col].astype('object')

        list_of_columns = [
            'First', 'Last', 'Company is sponsor user', 'SU', 'Company name',
            'street', 'Zip', 'City', 'State', 'Country', 'Time zone',
            'Recruiting source', 'Phone', 'Email', 'LinkedIn profile',
            'Total compensation this year', 'Personas', 'Date added',
            'Last updated', 'Updated by',
            'Wants to participate in future activities?', 'Age range',
            'Years in current role', 'Years in current industry', 'Job duties',
            'Time Zone Selector', 'Tome Zone Hours', 'Current Time Equation',
            'Business Model', 'Company size', 'Company Revenue', 'Team size',
            'Industry', 'Job title', 'Role/Responsibilities',
            'WCE Products used', 'UserTesting ID', 'id'
        ]

        knack_csv = knack_csv[list_of_columns]
        knack_csv = knack_csv.apply(lambda x: x.astype('str'))
        knack_csv = knack_csv.replace('nan', '', regex=True)
        knack_csv['Company size'] = knack_csv['Company size'].str.split(
            '.', expand=True)[0]

        knack_db = knack_db[list_of_columns]
        knack_db = knack_db.apply(lambda x: x.astype('str'))
        knack_db = knack_db.replace('nan', '', regex=True)

        knack_csv = knack_csv.apply(lambda x: x.str.title())
        knack_db = knack_db.apply(lambda x: x.str.title())

        knack_csv = knack_csv.astype(knack_db.dtypes.to_dict())
        df_knack = knack_csv.merge(knack_db, how='left', indicator=True)
        received = df_knack.shape[0]
        df_knack = df_knack[df_knack['_merge'] == 'left_only']
        df_knack.drop('_merge', axis=1, inplace=True)

        df_knack.columns = cols.values()
        # Ectract other non objects values in their dataframe
        df_knack_sub1 = df_knack.iloc[::, 2:5]
        df_knack_sub2 = df_knack.iloc[::, 10:38]
        df_knack_sub = pd.concat([df_knack_sub1, df_knack_sub2], axis=1)

        # convert data into dict
        df_knack_sub_dict = df_knack_sub.to_dict(orient='records')

        # only retrieve those with values
        dict_with_values = []
        for dict_data in df_knack_sub_dict:
            dic = {i: j for i, j in dict_data.items() if j != 'N/A'}
            dict_with_values.append(dic)

        # lets get the name objects
        bio_object = df_knack.iloc[::, 0:2]
        bio_object_dict = bio_object.to_dict(orient='records')

        #lets get address objects
        address_object = df_knack.iloc[::, 5:10]
        address_object.columns = address_object.columns.str.lower()
        address_object_dict = address_object.to_dict(orient='records')

        bio_val = []
        for i, dicti in enumerate(dict_with_values):
            dicti['field_298'] = bio_object_dict[i]
            bio_val.append(dicti)

        bio_val_addr = []
        for i, dicti in enumerate(bio_val):
            dicti["field_301"] = address_object_dict[i]
            bio_val_addr.append(dicti)

        all_data = []
        for record in bio_val_addr:
            response = knackpy.record(
                record,
                obj_key='object_17',
                app_id='59ca76c0e4c83424df3eee62',
                api_key='a0998110-a889-11e7-9b23-7d5afe966012',
                method='create')
            all_data.append(record)
        # output = pd.DataFrame(all_data)
        text = '{} records received, {} unique record succesfully loaded into Knack'.format(
            received, len(all_data))
        return render_template('profile.html', text=text, oidc=oidc)
    return render_template("profile.html", profile=info, oidc=oidc)