
    g@                        d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 	 d dl
mZ d dlZd dlmZ d dlZej                   dk  reZej                   dkD  reZ ed d       ed	d
       edd       edd      gZg dZ ej.                  dj1                  dj3                  e            ej4                  ej6                  z  ej8                  z        ZddZd Zd Z ddZ!d Z"d Z#y# e$ r	 d dlmZ Y w xY w)    )unicode_literalsN)NamedTemporaryFile)	normalize)urlparse)TwitterError)   i  i    i   i   i   i2   i7   ('  acadaeafagaialamanaoaqarasatauawaxazbabbbdbebfbgbhbibjblbmbnbobqbrbsbtbvbwbybzcacccdcfcgchcickclcmcncocrcucvcwcxcyczdedjdkdmdodzeceeegehereseteufifjfkfmfofrgagbgdgegfggghgiglgmgngpgqgrgsgtgugwgyhkhmhnhrhthuidieiliminioiqirisitjejmjojpkekgkhkikmknkpkrkwkykzlalblclilklrlsltlulvlymamcmdmemfmgmhmkmlmmmnmompmqmrmsmtmumvmwmxmymznancnenfngninlnonpnrnunzompapepfpgphpkplpmpnprpsptpwpyqarerorsrurwsasbscsdsesgshsisjskslsmsnsosrssstsusvsxsysztctdtftgthtjtktltmtntotptrtttvtwtzuaugukumusuyuzvavcvevgvivnvuwfwsyeytzazmzwu   ελu   белu   мкдu   монu   рфu   србu   укрu   қазu   հայu   الاردنu   الجزائرu   السعوديةu   المغربu   اماراتu
   ایرانu
   بھارتu   تونسu
   سودانu
   سوريةu   عراقu   عمانu   فلسطينu   قطرu   مصرu   مليسياu   پاکستانu   भारतu   বাংলাu   ভারতu   ਭਾਰਤu   ભારતu   இந்தியாu   இலங்கைu!   சிங்கப்பூர்u   భారత్u   ලංකාu	   ไทยu   გეu   中国u   中國u   台湾u   台灣u	   新加坡u   澳門u   香港u   한국zneric:abbabbottabogadoacademy	accenture
accountantaccountantsacoactiveactoradsadultaegaeroaflagencyaigairforceairtel	allfinanzalsace	amsterdamandroid
apartmentsapp	aquarellearchiarmyarpaasia
associatesattorneyauctionaudioautoautosaxaazurebandbankbar	barcelonabarclaycardbarclaysbargainsbauhausbayernbbcbbvabcnbeerbentleyberlinbestbetbhartibiblebidbikebingbingobiobizblackblackfriday	bloombergbluebmwbnl
bnpparibasboatsbondboobootsboutiquebradescobridgestonebrokerbrotherbrusselsbudapestbuildbuildersbusinessbuzzbzhcabcafecalcameracampcancerresearchcanoncapetowncapitalcaravancardscarecareercareerscarscartiercasacashcasinocatcateringcbacbncebcenterceocerncfacfdchanelchannelchatcheapchloe	christmaschromechurchciscociticcityclaimscleaningclickclinicclothingcloudclubcoachcodescoffeecollegecolognecomcommbank	communitycompanycomputercondosconstruction
consultingcontractorscookingcoolcoopcorsicacountrycouponscoursescredit
creditcardcricketcrowncrscruises
cuisinellacymrucyoudaburdaddancedatedatingdatsundaydclkdealsdegreedeliverydeltademocratdentaldentistdesidesigndevdiamondsdietdigitaldirect	directorydiscountdnpdocsdogdohadomainsdoosandownloaddrivedurbandvageartheatedu	educationemailemerckenergyengineerengineeringenterprisesepson	equipmenterniesqestate
eurovisioneuseventseverbankexchangeexpertexposedexpressfagefailfaithfamilyfanfansfarmfashionfeedbackfilmfinance	financialfirmdalefishfishingfitfitnessflightsfloristflowersflsmidthflyfoofootballforexforsaleforum
foundationfrlfrogansfund	furniturefutbolfyigalgallerygamegardengbizgdngentgentingggeegiftgiftsgivesgivingglassgleglobalglobogmailgmogmxgold	goldpointgolfgoogooggooglegopgovgraphicsgratisgreengripegroupgugeguideguitarsguruhamburghangouthaus
healthcarehelpherehermeshiphophitachihivhockeyholdingsholiday	homedepothomeshondahorsehosthostinghoteleshotmailhousehowhsbcibmicbciceicuifmiinetimmo
immobilien
industriesinfinitiinfoingink	instituteinsureintinternationalinvestmentsipirangairishististanbulitauiwcjavajcbjetztjewelryjlcjlljobsjoburgjprsjuegoskaufenkddikimkitchenkiwikoelnkomatsukrdkredkyotolacaixa	lancasterlandlasallelatlatrobelawlawyerldsleaseleclerclegallexuslgbtliaisonlidllifelightinglimitedlimolinklivelixilloanloanslollondonlottelottoloveltdalupinluxeluxurymadridmaifmaisonman
managementmangomarket	marketingmarketsmarriottmbamediameet	melbournememememorialmenmenumiami	microsoftmilminimmamobimodamoemommonashmoney	montblancmormonmortgagemoscowmotorcyclesmovmoviemovistarmtnmtpcmuseumnadexnagoyanamenavynecnetnetbanknetworkneustarnewnewsnexusngonhkniconinjanissannokianranrwnttnycofficeokinawaomegaoneongonlonlineooooracleorangeorgorganicosakaotsukaovhpagepaneraiparispartnerspartspartypetpharmacyphilipsphotophotographyphotosphysiopiagetpicspictetpicturespinkpizzaplaceplayplumbingpluspohlpokerpornpostpraxipressproprodproductionsprof
propertiespropertypubqponquebecracingrealtorrealtyrecipesredredstonerehabreisereisenreitrenrentrentalsrepairreport
republicanrest
restaurantreviewreviewsrichricohrioriprocksrodeorsvpruhrrunryukyusaarlandsakurasalesamsungsandviksandvikcoromantsanofisapsarlsaxoscascbschmidtscholarshipsschoolschuleschwarzsciencescorscotseatseeksenerservicessewsexsexyshikshashoesshowshriramsinglessiteskiskyskypesncfsoccersocialsoftwaresohusolar	solutionssonysoyspacespiegelspreadbettingsrlstarhubstatoilstudiostudystylesuckssuppliessupplysupportsurfsurgerysuzukiswatchswisssydneysystemstaipei
tatamotorstatartattootaxtaxiteamtech
technologytel
telefonicatemasektennisthdtheaterticketstiendatipstirestiroltodaytokyotoolstoptoraytoshibatourstowntoyotatoystradetradingtrainingtraveltrusttuiubs
universityunouol	vacationsvegasventuresu   vermögensberateru   vermögensberatungversicherungvetviajesvideovillasvinvisionvista
vistaprint
vlaanderenvodkavotevotingvotovoyagewaleswalterwangwatchwebcamwebsitewedweddingweirwhoswhowienwikiwilliamhillwinwindowswinewmeworkworksworldwtcwtfxboxxeroxxinxperiaxxxxyzyachtsyandex	yodobashiyogayokohamayoutubezipzonezuerichu   детиu   комu   москваu   онлайнu   оргu   русu   сайтu   קוםu
   بازارu   شبكةu   كومu   موقعu	   कॉमu	   नेटu   संगठनu	   คอมu	   みんなu   グーグルu   コムu   世界u   中信u	   中文网u   企业u   佛山u   信息u   健康u   八卦u   公司u   公益u   商城u   商店u   商标u   在线u   大拿u   娱乐u   工行u   广东u   慈善u	   我爱你u   手机u   政务u   政府u   新闻u   时尚u   机构u	   淡马锡u   游戏u   点看u   移动u   组织机构u   网址u   网店u   网络u   谷歌u   集团u	   飞利浦u   餐厅u   닷넷u   닷컴u   삼성onionz(^(?!(https?://|www\.)?\.|ftps?://|([0-9]+\.){{1,3}}\d+)(?:https?://|www\.)*^(?!.*@)(?:[\w+-_]+[.])(?:{0}\b(?:[:0-9]))(?:[\w+\/]?[a-z0-9!\*\'\(\);:&=\+\$/%#\[\]\-_\.,~?])*)z\b|c                 n   d}t        | t              rt        |       } t        j                  d|       D ]W  }t        |      r||z  }|D ]?  }t        t        D cg c]  }t        t        d|            |v  c}      r|dz  };|dz  }A Y |t        t        j                  d|             z  }|S c c}w )aI   Calculates the length of a tweet, taking into account Twitter's
    replacement of URLs with https://t.co links.

    Args:
        status: text of the status message to be posted.
        short_url_length: the current published https://t.co links

    Returns:
        Expected length of the status message as an integer.

    r   z\sNFC      )
isinstancebytesunicoder   splitis_urlanyCHAR_RANGESordr   lenfindall)statusshort_url_lengthstatus_lengthword	character
char_ranges         */opt/Tautulli/lib/twitter/twitter_utils.pycalc_expected_status_lengthr     s     M&% ' '$<--M! '	Yde:IeY78JFef!Q&M!Q&M	'	' SE6233M fs   B2c                 H    t        t        j                  t        |             S )z Checks to see if a bit of text is a URL.

    Args:
        text: text to check.

    Returns:
        Boolean of whether the text should be treated as a URL or not.
    )boolr   r  
URL_REGEXP)texts    r  r  r     s     

:t,--    c                     t               }t        j                  | d      }|j                  d      D ]  }|j	                  |        |S )NT)streami   )
chunk_size)r   requestsgetiter_contentwrite)http	data_filereqchunks       r  http_to_filer     sI    "$I
,,tD
)C!![!9 r  c                    g d}dg}ddg}t        | d      s| j                  d      r>t        |       }t        j                  j                  t        |       j                        }nt        t        j                  j                  |       d      }t        j                  j                  |       }nD| j                  dvrt        d	      t        j                  j                  | j                        }| }|j                  d
d       |j                         }	 |j                  d
       t        j                   t        j                  j                  |            d
   }	|	u|	|v r|dkD  rt        ddi      |	|v r|dkD  rt        ddi      |	|v r|s|dkD  rt        ddi      |	|v r|r|dkD  rt        ddi      |	|vr|	|vr|	|vrt        ddi      ||||	fS # t        $ r
}Y d}~d}~ww xY w)aa   Parses a media file and attempts to return a file-like object and
    information about the media file.

    Args:
        passed_media: media file which to parse.
        async_upload: flag, for validation media file attributes.

    Returns:
        file-like object, the filename of the media file, the file size, and
        the type of media.
    )z
image/jpegz	image/pngz	image/bmpz
image/webpz	image/gifz	video/mp4zvideo/quicktimereadr  rb)r  zrb+zw+bzFile mode must be "rb" or "rb+"r   r  Ni  P messagezImages must be less than 5MB.i   z!GIF Image must be less than 15MB.zVideos must be less than 15MB.i    zVideos must be less than 512MB.z#Media type could not be determined.)hasattr
startswithr  ospathbasenamer   openrealpathmoder   r  r7  tell	Exception	mimetypes
guess_type)
passed_mediaasync_uploadimg_formatslong_img_formatsvideo_formatsr  filename	file_sizee
media_types
             r  parse_media_filer     s   !K
 	 !&(M <(""6*$\2Iww''(>(C(CDHRWW--l;TBIww''5H
 $88@AA77##L$5$56 	NN1a Iq %%bgg&6&6x&@A!DJ$[)@	+JKLL++	L0H	+NOPP=()lBZ	+KLMM=(\i->W	+LMNN{*z/NS]euSu	+PQRRh	:55!  s   G 	G-(G-c                 |    	  ||      S # t         $ r( t        ddj                  | |j                        i      w xY w)a   Checks to see if a given val for a field (i.e., the name of the field)
    is of the proper _type. If it is not, raises a TwitterError with a brief
    explanation.

    Args:
        field:
            Name of the field you are checking.
        _type:
            Type that the value should be returned as.
        val:
            Value to convert to _type.

    Returns:
        val converted to type _type.

    r  z"{0}" must be type {1})
ValueErrorr   format__name__)field_typevals      r  enf_typer    sI    "Sz /66uennM
  	s   
 1;c                    g }t        | t        t        f      r|j                  |        nt        | t        j
                        r|j                  t        | |             n{t        | t        t        f      re| D ]`  }t        |t        t        f      r|j                  |       +t        |t        j
                        sF|j                  t        ||             b dj                  |D cg c]  }t        |       c}      S c c}w )N,)
r  strr  appendtwitterUsergetattrlisttuplejoin)argsattroutitems       r  parse_arg_listr  5  s    
C$g'

4	D',,	'

74&'	D4-	( 	0D$g/

4 D',,/

74./		0
 883/4SY/00/s   +D)   )F)$
__future__r   r  r  r   systempfiler   unicodedatar   urllib.parser   ImportErrorr  r  r   version_infoxrangeranger  r  r  TLDScompiler  r  UIXr  r  r  r  r  r  r   r  r  <module>r+     s   '  	 	 
 ' !"%    dEdG 
!TN	$	$	$	BB RZZ	 &T"
#RTTBDD[244%79
8	.>6B21Q	  "!"s   C* *C87C8