From dd02fb4030a2ad96c2c7c1524a9af7c5846bc0cd Mon Sep 17 00:00:00 2001
From: Kingbox <37674310+lopezvg@users.noreply.github.com>
Date: Wed, 27 Feb 2019 10:01:48 +0100
Subject: [PATCH 1/2] =?UTF-8?q?Mastorrent:=20Borrado=20por=20falta=20de=20?=
=?UTF-8?q?actualizaci=C3=B3n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
plugin.video.alfa/channels/mastorrents.json | 33 --
plugin.video.alfa/channels/mastorrents.py | 323 --------------------
2 files changed, 356 deletions(-)
delete mode 100644 plugin.video.alfa/channels/mastorrents.json
delete mode 100644 plugin.video.alfa/channels/mastorrents.py
diff --git a/plugin.video.alfa/channels/mastorrents.json b/plugin.video.alfa/channels/mastorrents.json
deleted file mode 100644
index 6ebae2fc..00000000
--- a/plugin.video.alfa/channels/mastorrents.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "id": "mastorrents",
- "name": "MasTorrents",
- "active": true,
- "adult": false,
- "language": ["cast","lat"],
- "thumbnail": "https://s33.postimg.cc/3y8720l9b/mastorrents.png",
- "banner": "",
- "version": 1,
- "categories": [
- "movie",
- "tvshow",
- "torrent"
- ],
- "settings": [
- {
- "id": "include_in_newest_peliculas",
- "type": "bool",
- "label": "Incluir en Novedades - Peliculas",
- "default": true,
- "enabled": true,
- "visible": true
- },
- {
- "id": "include_in_newest_torrent",
- "type": "bool",
- "label": "Incluir en Novedades - Torrent",
- "default": true,
- "enabled": true,
- "visible": true
- }
- ]
-}
\ No newline at end of file
diff --git a/plugin.video.alfa/channels/mastorrents.py b/plugin.video.alfa/channels/mastorrents.py
deleted file mode 100644
index df53aece..00000000
--- a/plugin.video.alfa/channels/mastorrents.py
+++ /dev/null
@@ -1,323 +0,0 @@
-# -*- coding: utf-8 -*-
-# -*- Channel MasTorrents -*-
-# -*- Created for Alfa-addon -*-
-# -*- By the Alfa Develop Group -*-
-
-import re
-from channelselector import get_thumb
-from platformcode import logger
-from platformcode import config
-from core import scrapertools
-from core.item import Item
-from core import servertools
-from core import httptools
-from core import tmdb
-
-host = 'http://www.mastorrents.com/'
-
-def mainlist(item):
- logger.info()
-
- itemlist = []
-
- itemlist.append(item.clone(title="Peliculas",
- action="movie_list",
- thumbnail=get_thumb("channels_movie.png")
- ))
-
- itemlist.append(item.clone(title="Series",
- action="series_list",
- thumbnail=get_thumb("channels_tvshow.png")
- ))
- return itemlist
-
-
-def movie_list(item):
- logger.info()
-
- itemlist = []
-
- itemlist.append(item.clone(title="Todas",
- action="lista",
- url=host+'peliculas',
- extra='movie',
- thumbnail=get_thumb('all', auto=True)
- ))
-
- itemlist.append(item.clone(title="Generos",
- action="genres",
- url=host,
- extra='movie',
- thumbnail=get_thumb('genres', auto=True)
- ))
-
- itemlist.append(item.clone(title="Buscar",
- action="search",
- url=host + '?pTit=', thumbnail=get_thumb('search', auto=True),
- extra='movie'
- ))
- return itemlist
-
-
-def series_list(item):
- logger.info()
-
- itemlist = []
-
- itemlist.append(item.clone(title="Todas",
- action="lista",
- url=host + 'series',
- extra='serie',
- thumbnail=get_thumb('all', auto=True)
- ))
-
- itemlist.append(item.clone(title="Generos",
- action="genres",
- url=host + 'series/',
- extra='serie',
- thumbnail=get_thumb('genres', auto=True)
- ))
-
- itemlist.append(item.clone(title="Buscar",
- action="search",
- url=host + 'series/?pTit=',
- extra='serie',
- thumbnail=get_thumb('search', auto=True)
- ))
- return itemlist
-
-
-def get_source(url):
- logger.info()
- data = httptools.downloadpage(url).data
- data = re.sub(r'"|\n|\r|\t| |
|\s{2,}', "", data)
- return data
-
-def lista (item):
- logger.info ()
- itemlist = []
- infoLabels = dict()
- data = get_source(item.url)
- patron = "
.*?tooltipbox>(.*?)(?: |
)(.*?)<"
- matches = re.compile(patron, re.DOTALL).findall(data)
-
- for scrapedurl, scrapedthumbnail, scrapedtitle, extra_data in matches:
- extra_data = extra_data.replace('(','').replace(')','')
- url = scrapedurl
- thumbnail = scrapedthumbnail
- contentTitle = scrapedtitle.decode('latin1').encode('utf8')
- title = contentTitle
-
- tvshow = False
- if 'x' in extra_data:
- tvshow = True
- filtro_thumb = scrapedthumbnail.replace("https://image.tmdb.org/t/p/w200_and_h300_bestv2", "")
- filtro_list = {"poster_path": filtro_thumb}
- filtro_list = filtro_list.items()
- infoLabels['filtro']= filtro_list
- else:
- infoLabels['year']=extra_data
- new_item=(Item(channel=item.channel,
- action='findvideos',
- title=title,
- url=url,
- thumbnail=thumbnail,
- infoLabels=infoLabels,
- extra=item.extra
- ))
- if tvshow:
- new_item.contentSerieName = contentTitle
- new_item.action = 'seasons'
- else:
- new_item.contentTitle = contentTitle
- new_item.action = 'findvideos'
- itemlist.append(new_item)
-
- tmdb.set_infoLabels_itemlist(itemlist, seekTmdb =True)
- #Paginacion
-
- if itemlist !=[]:
- actual_page_url = item.url
- next_page = scrapertools.find_single_match(data,'
')
-
- patron = ''
-
- matches = re.compile(patron,re.DOTALL).findall(data)
-
- for value, title in matches:
- url = item.url + value
- title = title.decode('latin1').encode('utf8')
- itemlist.append(Item(channel=item.channel, title=title, url=url, action='lista'))
- return itemlist
-
-def search(item, texto):
- logger.info()
- texto = texto.replace(" ", "+")
- item.url = item.url + texto
-
- if texto != '':
- return lista(item)
- else:
- return []
-
-
-def seasons(item):
- logger.info()
- itemlist=[]
- infoLabels = item.infoLabels
- data=get_source(item.url)
- patron ='href=javascript:showSeasson\(.*?\); id=.*?>Temporada (.*?)<\/a>'
- matches = re.compile(patron, re.DOTALL).findall(data)
-
- for season in matches:
- title='Temporada %s' % season
- infoLabels['season'] = season
- itemlist.append(Item(channel=item.channel,
- title= title,
- url=item.url,
- action='episodesxseasons',
- contentSeasonNumber=season,
- contentSerieName=item.contentSerieName,
- infoLabels=infoLabels
- ))
- tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
- itemlist = itemlist[::-1]
- if config.get_videolibrary_support() and len(itemlist) > 0:
- itemlist.append(
- Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url,
- action="add_serie_to_library", extra="all_episodes", contentSerieName=item.contentSerieName))
-
- return itemlist
-
-def all_episodes(item):
- logger.info()
- itemlist = []
- templist = seasons(item)
- for tempitem in templist:
- itemlist += episodesxseasons(tempitem)
-
- return itemlist
-
-def episodesxseasons(item):
- logger.info()
-
- itemlist=[]
-
- data=get_source(item.url)
- patron = "%sx(.\d+)<\/div>
.*?" % item.contentSeasonNumber
- patron += "image:url\('(.*?)'.*?href.*?>(%s)<" % item.contentSerieName
- matches = re.compile(patron, re.DOTALL).findall(data)
- infoLabels=item.infoLabels
- for episode, scrapedurl, scrapedthumbnail, scrapedtitle in matches:
- contentEpisodeNumber=episode
- season = item.contentSeasonNumber
- url=scrapedurl
- thumbnail=scrapedthumbnail
- infoLabels['episode']=episode
- title = '%sx%s - %s' % (season, episode, item.contentSerieName)
- itemlist.append(Item(channel=item.channel,
- action='findvideos',
- title=title,
- url=url,
- thumbnail=thumbnail,
- contentSerieName=item.contentSerieName,
- contentEpisodeNumber=contentEpisodeNumber,
- infoLabels=infoLabels
- ))
- tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
-
- return itemlist[::-1]
-
-
-def findvideos(item):
- logger.info()
- itemlist=[]
- data = get_source(item.url)
- patron = "showDownload\(([^\)]+)\);.*?alt=.*?torrent (.*?) "
- matches = re.compile(patron, re.DOTALL).findall(data)
-
- for extra_info, quality in matches:
- extra_info= extra_info.replace(",'",'|')
- extra_info= extra_info.split('|')
- title = '%s [%s]' % ('Torrent', quality.strip())
- if item.extra == 'movie':
- url = extra_info[2].strip("'")
- else:
- url = extra_info[3].strip("'")
- server = 'torrent'
-
- if not '.torrent' in url:
- if 'tvsinpagar' in url:
- url = url.replace('http://','http://www.')
- try:
- from_web = httptools.downloadpage(url, follow_redirects=False)
- url = from_web.headers['location']
- except:
- pass
-
- if '.torrent' in url:
- itemlist.append(Item(channel=item.channel,
- title=title,
- contentTitle= item.title,
- url=url,
- action='play',
- quality=quality,
- server=server,
- thumbnail = item.infoLabels['thumbnail'],
- infoLabels=item.infoLabels
- ))
-
- if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
- itemlist.append(Item(channel=item.channel,
- title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
- url=item.url,
- action="add_pelicula_to_library",
- extra="findvideos",
- contentTitle=item.contentTitle
- ))
-
- return itemlist
-
-
-def newest(category):
- logger.info()
- item = Item()
- try:
- if category in ['peliculas', 'torrent']:
- item.url = host + 'estrenos-de-cine'
- item.extra='movie'
- itemlist = lista(item)
- if itemlist[-1].title == 'Siguiente >>>':
- itemlist.pop()
- if category == 'torrent':
-
- item.url = host+'series'
- item.extra = 'serie'
- itemlist.extend(lista(item))
-
- if itemlist[-1].title == 'Siguiente >>>':
- itemlist.pop()
- except:
- import sys
- for line in sys.exc_info():
- logger.error("%s" % line)
- return []
-
- return itemlist
From 238e77a40119fb37c603090c1d51425f575f9fda Mon Sep 17 00:00:00 2001
From: Kingbox <37674310+lopezvg@users.noreply.github.com>
Date: Wed, 27 Feb 2019 10:04:56 +0100
Subject: [PATCH 2/2] Mejoras de compatibilidad con Python 2.6
---
plugin.video.alfa/channels/pelismagnet.py | 2 +-
plugin.video.alfa/channels/rarbg.py | 6 +++---
plugin.video.alfa/channels/subtorrents.py | 2 +-
plugin.video.alfa/channels/todopeliculas.py | 2 +-
plugin.video.alfa/channels/zonatorrent.py | 4 ++--
plugin.video.alfa/lib/generictools.py | 15 ++++++++++-----
6 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/plugin.video.alfa/channels/pelismagnet.py b/plugin.video.alfa/channels/pelismagnet.py
index 414e772a..70bec39e 100644
--- a/plugin.video.alfa/channels/pelismagnet.py
+++ b/plugin.video.alfa/channels/pelismagnet.py
@@ -348,7 +348,7 @@ def listado(item):
title = re.sub(r'- $', '', title)
#Limpiamos el título de la basura innecesaria
- title = re.sub(r'TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title, flags=re.IGNORECASE)
+ title = re.sub(r'(?i)TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title)
#Terminamos de limpiar el título
title = re.sub(r'\??\s?\d*?\&.*', '', title)
diff --git a/plugin.video.alfa/channels/rarbg.py b/plugin.video.alfa/channels/rarbg.py
index 9c885e61..374b36b5 100644
--- a/plugin.video.alfa/channels/rarbg.py
+++ b/plugin.video.alfa/channels/rarbg.py
@@ -336,8 +336,8 @@ def listado(item):
item_local.season_colapse = True #Muestra las series agrupadas por temporadas
#Limpiamos el título de la basura innecesaria
- title = re.sub(r'TV|Online', '', title, flags=re.IGNORECASE).strip()
- item_local.quality = re.sub(r'proper|unrated|directors|cut|german|repack|internal|real|korean|extended|masted|docu|oar|super|duper|amzn|uncensored|hulu', '', item_local.quality, flags=re.IGNORECASE).strip()
+ title = re.sub(r'(?i)TV|Online', '', title).strip()
+ item_local.quality = re.sub(r'(?i)proper|unrated|directors|cut|german|repack|internal|real|korean|extended|masted|docu|oar|super|duper|amzn|uncensored|hulu', '', item_local.quality).strip()
#Analizamos el año. Si no está claro ponemos '-'
try:
@@ -472,7 +472,7 @@ def findvideos(item):
item_local.quality = ''
title = title.replace('.', ' ')
item_local.quality = item_local.quality.replace('.', ' ')
- item_local.quality = re.sub(r'proper|unrated|directors|cut|german|repack|internal|real|korean|extended|masted|docu|oar|super|duper|amzn|uncensored|hulu', '', item_local.quality, flags=re.IGNORECASE).strip()
+ item_local.quality = re.sub(r'(?i)proper|unrated|directors|cut|german|repack|internal|real|korean|extended|masted|docu|oar|super|duper|amzn|uncensored|hulu', '', item_local.quality).strip()
#Buscamos si ya tiene tamaño, si no, los buscamos en el archivo .torrent
size = scrapedsize
diff --git a/plugin.video.alfa/channels/subtorrents.py b/plugin.video.alfa/channels/subtorrents.py
index 9fa441c7..2f1e4950 100644
--- a/plugin.video.alfa/channels/subtorrents.py
+++ b/plugin.video.alfa/channels/subtorrents.py
@@ -294,7 +294,7 @@ def listado(item):
title = re.sub(r'\d+[M|m|G|g][B|b]', '', title)
#Limpiamos el título de la basura innecesaria
- title = re.sub(r'TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren|\(iso\)|\(dvd.*?\)|(?:\d+\s*)?\d{3,4}p.*?$|extended|(?:\d+\s*)?bdrip.*?$|\(.*?\).*?$|iso$|unrated|\[.*?$|\d{4}$', '', title, flags=re.IGNORECASE)
+ title = re.sub(r'(?i)TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren|\(iso\)|\(dvd.*?\)|(?:\d+\s*)?\d{3,4}p.*?$|extended|(?:\d+\s*)?bdrip.*?$|\(.*?\).*?$|iso$|unrated|\[.*?$|\d{4}$', '', title)
#Obtenemos temporada y episodio si se trata de Episodios
if item_local.contentType == "episode":
diff --git a/plugin.video.alfa/channels/todopeliculas.py b/plugin.video.alfa/channels/todopeliculas.py
index 62430251..f07280f7 100644
--- a/plugin.video.alfa/channels/todopeliculas.py
+++ b/plugin.video.alfa/channels/todopeliculas.py
@@ -274,7 +274,7 @@ def listado(item):
#Limpiamos el título de la basura innecesaria
title = re.sub(r'- $', '', title)
- title = re.sub(r'TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title, flags=re.IGNORECASE)
+ title = re.sub(r'(?i)TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title)
#Terminamos de limpiar el título
title = re.sub(r'\??\s?\d*?\&.*', '', title)
diff --git a/plugin.video.alfa/channels/zonatorrent.py b/plugin.video.alfa/channels/zonatorrent.py
index 3f08b208..f73bd7e1 100644
--- a/plugin.video.alfa/channels/zonatorrent.py
+++ b/plugin.video.alfa/channels/zonatorrent.py
@@ -353,7 +353,7 @@ def listado(item):
item_local.quality += " 3D"
else:
item_local.quality = "3D"
- title = re.sub('3D', '', title, flags=re.IGNORECASE)
+ title = re.sub('(?i)3D', '', title)
title = title.replace('[]', '')
if item_local.quality:
item_local.quality += ' %s' % scrapertools.find_single_match(title, '\[(.*?)\]')
@@ -418,7 +418,7 @@ def listado(item):
title = re.sub(r'- $', '', title)
#Limpiamos el título de la basura innecesaria
- title = re.sub(r'TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title, flags=re.IGNORECASE)
+ title = re.sub(r'(?i)TV|Online|Spanish|Torrent|en Espa\xc3\xb1ol|Español|Latino|Subtitulado|Blurayrip|Bluray rip|\[.*?\]|R2 Pal|\xe3\x80\x90 Descargar Torrent \xe3\x80\x91|Completa|Temporada|Descargar|Torren', '', title)
title = title.replace("Dual", "").replace("dual", "").replace("Subtitulada", "").replace("subtitulada", "").replace("Subt", "").replace("subt", "").replace("(Proper)", "").replace("(proper)", "").replace("Proper", "").replace("proper", "").replace("#", "").replace("(Latino)", "").replace("Latino", "").replace("LATINO", "").replace("Spanish", "").replace("Trailer", "").replace("Audio", "")
title = title.replace("HDTV-Screener", "").replace("DVDSCR", "").replace("TS ALTA", "").replace("- HDRip", "").replace("(HDRip)", "").replace("- Hdrip", "").replace("(microHD)", "").replace("(DVDRip)", "").replace("HDRip", "").replace("(BR-LINE)", "").replace("(HDTS-SCREENER)", "").replace("(BDRip)", "").replace("(BR-Screener)", "").replace("(DVDScreener)", "").replace("TS-Screener", "").replace(" TS", "").replace(" Ts", "").replace(" 480p", "").replace(" 480P", "").replace(" 720p", "").replace(" 720P", "").replace(" 1080p", "").replace(" 1080P", "").replace("DVDRip", "").replace(" Dvd", "").replace(" DVD", "").replace(" V.O", "").replace(" Unrated", "").replace(" UNRATED", "").replace(" unrated", "").replace("screener", "").replace("TS-SCREENER", "").replace("TSScreener", "").replace("HQ", "").replace("AC3 5.1", "").replace("Telesync", "").replace("Line Dubbed", "").replace("line Dubbed", "").replace("LineDuB", "").replace("Line", "").replace("XviD", "").replace("xvid", "").replace("XVID", "").replace("Mic Dubbed", "").replace("HD", "").replace("V2", "").replace("CAM", "").replace("VHS.SCR", "").replace("Dvd5", "").replace("DVD5", "").replace("Iso", "").replace("ISO", "").replace("Reparado", "").replace("reparado", "").replace("DVD9", "").replace("Dvd9", "")
diff --git a/plugin.video.alfa/lib/generictools.py b/plugin.video.alfa/lib/generictools.py
index 2c07d74c..bd2284fb 100644
--- a/plugin.video.alfa/lib/generictools.py
+++ b/plugin.video.alfa/lib/generictools.py
@@ -280,7 +280,9 @@ def post_tmdb_listado(item, itemlist):
item.category_new = ''
for item_local in itemlist: #Recorremos el Itemlist generado por el canal
- title = re.sub(r'online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title, flags=re.IGNORECASE).strip()
+ item_local.title = re.sub(r'(?i)online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title).strip()
+ #item_local.title = re.sub(r'online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title, flags=re.IGNORECASE).strip()
+ title = item_local.title
#logger.debug(item_local)
item_local.last_page = 0
@@ -375,11 +377,13 @@ def post_tmdb_listado(item, itemlist):
item_local.contentSerieName = item_local.from_title
if item_local.contentType == 'season':
item_local.title = item_local.from_title
- title = re.sub(r'online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title, flags=re.IGNORECASE).strip()
+ item_local.title = re.sub(r'(?i)online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title).strip()
+ title = item_local.title
#Limpiamos calidad de títulos originales que se hayan podido colar
if item_local.infoLabels['originaltitle'].lower() in item_local.quality.lower():
- item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality, flags=re.IGNORECASE)
+ item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality)
+ #item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality, flags=re.IGNORECASE)
# Preparamos el título para series, con los núm. de temporadas, si las hay
if item_local.contentType in ['season', 'tvshow', 'episode']:
@@ -775,7 +779,7 @@ def post_tmdb_episodios(item, itemlist):
del item_local.totalItems
item_local.unify = 'xyz'
del item_local.unify
- item_local.title = re.sub(r'online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title, flags=re.IGNORECASE).strip()
+ item_local.title = re.sub(r'(?i)online|descarga|downloads|trailer|videoteca|gb|autoplay', '', item_local.title).strip()
#logger.debug(item_local)
@@ -851,7 +855,8 @@ def post_tmdb_episodios(item, itemlist):
#Limpiamos calidad de títulos originales que se hayan podido colar
if item_local.infoLabels['originaltitle'].lower() in item_local.quality.lower():
- item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality, flags=re.IGNORECASE)
+ item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality)
+ #item_local.quality = re.sub(item_local.infoLabels['originaltitle'], '', item_local.quality, flags=re.IGNORECASE)
#Si no está el título del episodio, pero sí está en "title", lo rescatamos
if not item_local.infoLabels['episodio_titulo'] and item_local.infoLabels['title'].lower() != item_local.infoLabels['tvshowtitle'].lower():