"""RSS foreign key Bits

Revision ID: 3389071120cb
Revises: 9d03d8bba40e
Create Date: 2017-02-28 05:08:31.446852

"""

# revision identifiers, used by Alembic.
revision = '3389071120cb'
down_revision = '9d03d8bba40e'
branch_labels = None
depends_on = None


# Patch in knowledge of the citext type, so it reflects properly.
import citext
from sqlalchemy.dialects.postgresql.base import ischema_names
ischema_names['citext'] = citext.CIText

from sqlalchemy.dialects import postgresql

import sqlalchemy as sa
import sqlalchemy_utils


from alembic import op
from flask_sqlalchemy import _SessionSignalEvents
import sqlalchemy as sa
from sqlalchemy import event
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session as BaseSession, relationship


from sqlalchemy import Table

from sqlalchemy import Column
from sqlalchemy import BigInteger
from sqlalchemy import Integer
from sqlalchemy import Text
from sqlalchemy import Float
from sqlalchemy import Boolean
from sqlalchemy import DateTime
from sqlalchemy import ForeignKey
from sqlalchemy import PrimaryKeyConstraint
from sqlalchemy import UniqueConstraint
from sqlalchemy.orm import relationship
from sqlalchemy.schema import UniqueConstraint


Session = sessionmaker()

Base = declarative_base()





class RssFeedPost(Base):
	__tablename__ = 'feed_pages'

	id          = Column(BigInteger, primary_key=True)

	feed_id     = Column(BigInteger, ForeignKey('rss_parser_funcs.id'), index = True, nullable=False)

	srcname      = Column(Text, nullable=False, index=True)



class RssFeedEntry(Base):

	__tablename__     = 'rss_parser_funcs'
	name              = 'rss_parser_funcs'

	id                = Column(BigInteger, primary_key = True, index = True)

	feed_name         = Column(Text, nullable = False, index = True, unique = True)


def upgrade():
	### commands auto generated by Alembic - please adjust! ###

	bind = op.get_bind()
	sess = Session(bind=bind)


	# create the teams table and the players.team_id column
	# RssFeedPost.__table__.create(bind)
	# RssFeedEntry.__table__.create(bind)

	name_map = sess.query(RssFeedEntry).all()
	name_map = {row.feed_name : row.id for row in name_map}

	feednames = sess.query(RssFeedPost.srcname).group_by(RssFeedPost.srcname).all()
	for feedname, in feednames:
		if not feedname in name_map:
			print(feedname)
		else:
			sess.query(RssFeedPost).filter(RssFeedPost.srcname == feedname).update({"feed_id" : name_map[feedname]})
			print("Updating for {} -> {}".format(feedname, name_map[feedname]))

	sess.commit()

	null_rows = sess.query(RssFeedPost.srcname).filter(RssFeedPost.feed_id == None).all()
	print(null_rows)

	op.alter_column('feed_pages', 'feed_id',
			   existing_type=sa.BIGINT(),
			   nullable=False)
	### end Alembic commands ###


def downgrade():
	### commands auto generated by Alembic - please adjust! ###
	op.alter_column('feed_pages', 'feed_id',
			   existing_type=sa.BIGINT(),
			   nullable=True)
	### end Alembic commands ###