from abc import ABCMeta, abstractmethod

import requests

from bs4 import BeautifulSoup


def make_soup(url):
		response = requests.get(url)
		soup = BeautifulSoup(response.text, 'html.parser')
		return soup


class Aggregator(metaclass=ABCMeta):

	base_url = ''

	@abstractmethod
	def extract(self):
		pass

	@abstractmethod
	def generate_url(self):
		pass



import collections
from abc import ABCMeta, abstractmethod

import requests
from bs4 import BeautifulSoup


Article = collections.namedtuple('Article', ['source', 'title', 'url', 'author',
											 'date_published'])


def make_soup(url):
		response = requests.get(url)
		soup = BeautifulSoup(response.text, 'html.parser')
		return soup


class Aggregator(metaclass=ABCMeta):

	base_url = ''
	source = ''

	@abstractmethod
	def extract(self):
		pass

	@abstractmethod
	def generate_url(self):
		pass

	@abstractmethod
	def crawl(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_author(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_date_published(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_title(self, *args, **kwargs):
		pass

    

Define new abstract methods and namedtuple
Define new abstract methods and namedtuple

+ import collections
  from abc import ABCMeta, abstractmethod
  
  import requests
+ from bs4 import BeautifulSoup
  
- from bs4 import BeautifulSoup
+ 
+ Article = collections.namedtuple('Article', ['source', 'title', 'url', 'author',
+ 											 'date_published'])
  
  
  def make_soup(url):
  		response = requests.get(url)
  		soup = BeautifulSoup(response.text, 'html.parser')
  		return soup
  
  
  class Aggregator(metaclass=ABCMeta):
  
  	base_url = ''
+ 	source = ''
  
  	@abstractmethod
  	def extract(self):
  		pass
  
  	@abstractmethod
  	def generate_url(self):
  		pass
  
+ 	@abstractmethod
+ 	def crawl(self, *args, **kwargs):
+ 		pass
  
+ 	@abstractmethod
+ 	def get_author(self, *args, **kwargs):
+ 		pass
  
+ 	@abstractmethod
+ 	def get_date_published(self, *args, **kwargs):
+ 		pass
+ 
+ 	@abstractmethod
+ 	def get_title(self, *args, **kwargs):
+ 		pass
+ 
+     
+ 
Define new abstract methods and namedtuple
## Code Before:
from abc import ABCMeta, abstractmethod

import requests

from bs4 import BeautifulSoup


def make_soup(url):
		response = requests.get(url)
		soup = BeautifulSoup(response.text, 'html.parser')
		return soup


class Aggregator(metaclass=ABCMeta):

	base_url = ''

	@abstractmethod
	def extract(self):
		pass

	@abstractmethod
	def generate_url(self):
		pass



## Instruction:
Define new abstract methods and namedtuple
## Code After:
import collections
from abc import ABCMeta, abstractmethod

import requests
from bs4 import BeautifulSoup


Article = collections.namedtuple('Article', ['source', 'title', 'url', 'author',
											 'date_published'])


def make_soup(url):
		response = requests.get(url)
		soup = BeautifulSoup(response.text, 'html.parser')
		return soup


class Aggregator(metaclass=ABCMeta):

	base_url = ''
	source = ''

	@abstractmethod
	def extract(self):
		pass

	@abstractmethod
	def generate_url(self):
		pass

	@abstractmethod
	def crawl(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_author(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_date_published(self, *args, **kwargs):
		pass

	@abstractmethod
	def get_title(self, *args, **kwargs):
		pass

    
