asit_dhal
asit_dhal

Reputation: 1269

NameError despite everything being correctly declared

I am getting a weird error in my code.

Here is the snippet.

from sqlalchemy import *
import datetime
from config import *
from sqlalchemy.orm import sessionmaker
import logging

engine = create_engine(DB_CONNECTION_STRING)
metadata = MetaData(engine)
Session = sessionmaker(bind=engine)


def now():
    return datetime.datetime.now()

Feeds = Table('feeds', metadata, 
        Column('id', Integer, primary_key=True),
        Column('title', String(500)),
        Column('summary', Text),
        Column('link', String(200)),
        Column('published_at', DateTime),
        Column('created_at', DateTime),
        Column('updated_at', DateTime),
        Column('user_seen', DateTime),
        Column('rss_link_id', ForeignKey('rss_links.id', ondelete="CASCADE"))
    )

RssLinks = Table('rss_links', metadata, 
        Column('id', Integer, primary_key=True),
        Column('link', String(200)),
        Column('rss_link', String(200)),
        Column('title', String(500)),
        Column('status', String(100)),
        Column('created_at', DateTime),
        Column('updated_at', DateTime),
    )

def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
    ins = RssLinks.insert()
    ins.execute(link=link, rss_link=rss_link, title=title, status='VALID', created_at=now())

def insert_rss_links(site_link, _rss_links):
    for rss_link in _rss_links:
        insert_into_rss_links(link=site_link, rss_link=_rss_links['link'], title=_rss_links['title'])



if __name__ == '__main__':
    metadata.create_all()

The error is

In [1]: import dbi
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-81964b779871> in <module>()
----> 1 import dbi

/home/asit/own/proj/dbi.py in <module>()
     44 
---> 45 def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
     46         ins = RssLinks.insert()
     47         ins.execute(link=link, rss_link=rss_link, title=title, status='VALID', created_at=now())

NameError: name 'link' is not defined

Can somebody tell me, why is this happening ?

Upvotes: 0

Views: 76

Answers (2)

Martijn Pieters
Martijn Pieters

Reputation: 1125368

You are giving your insert_into_rss_links() arguments default values:

def insert_into_rss_links(link=link, rss_link=rss_link, title=title):

Each keyword=value part must have a valid value expression when the function is defined, but link, rss_link and title are not.

Most likely, you didn't mean to give these defaults at all; just remove them:

def insert_into_rss_links(link, rss_link, title):

Upvotes: 2

jonrsharpe
jonrsharpe

Reputation: 122159

You are defining the function as if you were calling it:

def insert_into_rss_links(link=link, rss_link=rss_link, title=title):

At the time the function object is created, there is no link to be the default value for the link argument.

Upvotes: 2

Related Questions