<commit_before>#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging
import requests
logger = logging.getLogger(__name__)

class ApiError(Exception):
    pass

class ConnectionError(ApiError):
    pass

class CompanyNotFound(Exception):
    pass

class KrsClient:
    API_URL = 'https://api.mojepanstwo.pl/krs/podmioty'

    def __init__(self, url=API_URL):
        self.url = url
        self.session = requests.Session()

    def query_podmiot(self, param, value):
        params = {
            param: value
            }
        resp = self.session.get(url=self.url, params=params)

        if resp.status_code != 200:
            raise ConnectionError({'status_code': resp.status_code})
        print resp.url
        json = resp.json()
        if json['search'] == None or json['search']['dataobjects'] == None:
            raise ApiError()

        return json

    def get_companies_by_name(self, name):
        normalized_name = KrsClient._normalize_name(name)

        json = self.query_podmiot('conditions[nazwa]', normalized_name)

        if json['search']['dataobjects'].__len__() == 1:
            json = self.query_podmiot('q', normalized_name)
            if json['search']['dataobjects'].__len__() == 0:
                raise CompanyNotFound()

        companies = []
        for i in range(0,json['search']['dataobjects'].__len__()):
            data = json['search']['dataobjects'][i]['data']

            company = dict()
            company['nazwa'] = data['krs_podmioty.nazwa']
            company['nazwa_skrocona'] = data['krs_podmioty.nazwa_skrocona']
            company['nip'] = data['krs_podmioty.nip']
            company['adres'] = "ul. {} {} lok. {}\n{} {}\n{}".format(
                data['krs_podmioty.adres_ulica'],
                data['krs_podmioty.adres_numer'],
                data['krs_podmioty.adres_numer'],
                data['krs_podmioty.adres_kod_pocztowy'],
                data['krs_podmioty.adres_miejscowosc'],
                data['krs_podmioty.adres_kraj']
            )
            company['id'] = data['krs_podmioty.id']
            company['liczba_wspolnikow'] = \
                data['krs_podmioty.liczba_wspolnikow']

            company['score'] = json['search']['dataobjects'][i]['score']
            company['url'] = json['search']['dataobjects'][i]['_mpurl']

            companies.append(company)

        return companies

    COMMON_COMPANY_NAME_ENDINGS = \
        ( u' S.A.', u' SPÓŁKA AKCYJNA',
          u' Sp. z o.o.',u' SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ',
          u' Spółka z o.o.',u' SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ',
          u'Sp. Jawna', u'SPÓŁKA JAWNA',
          u'spółka z ograniczoną odpowiedzialnością sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'sp. z o. o. sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'Sp. z o.o. sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'sp. z o.o. sp. k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',

    )

    @staticmethod
    def _normalize_name(name):
        name = name.upper()
        for i in range(len(KrsClient.COMMON_COMPANY_NAME_ENDINGS)/2):
            if name.endswith(KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2]
                    .upper()):
                return name[:len(name)-
                             len(KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2])]\
                       +KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2+1].upper()
        return name
<commit_msg>fixed unicode issue<commit_after>#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging
import requests
logger = logging.getLogger(__name__)

class ApiError(Exception):
    pass

class ConnectionError(ApiError):
    pass

class CompanyNotFound(Exception):
    pass

class KrsClient:
    API_URL = 'https://api.mojepanstwo.pl/krs/podmioty'

    def __init__(self, url=API_URL):
        self.url = url
        self.session = requests.Session()

    def query_podmiot(self, param, value):
        params = {
            param: value
            }
        resp = self.session.get(url=self.url, params=params)

        if resp.status_code != 200:
            raise ConnectionError({'status_code': resp.status_code})
        print resp.url
        json = resp.json()
        if json['search'] == None or json['search']['dataobjects'] == None:
            raise ApiError()

        return json

    def get_companies_by_name(self, name):
        normalized_name = KrsClient._normalize_name(name)

        json = self.query_podmiot('conditions[nazwa]', normalized_name)

        if json['search']['dataobjects'].__len__() == 1:
            json = self.query_podmiot('q', normalized_name)
            if json['search']['dataobjects'].__len__() == 0:
                raise CompanyNotFound()

        companies = []
        for i in range(0,json['search']['dataobjects'].__len__()):
            data = json['search']['dataobjects'][i]['data']

            company = dict()
            company['nazwa'] = data['krs_podmioty.nazwa']
            company['nazwa_skrocona'] = data['krs_podmioty.nazwa_skrocona']
            company['nip'] = data['krs_podmioty.nip']
            company['adres'] = u"ul. {} {} lok. {}\n{} {}\n{}".format(
                data['krs_podmioty.adres_ulica'],
                data['krs_podmioty.adres_numer'],
                data['krs_podmioty.adres_numer'],
                data['krs_podmioty.adres_kod_pocztowy'],
                data['krs_podmioty.adres_miejscowosc'],
                data['krs_podmioty.adres_kraj']
            )
            company['id'] = data['krs_podmioty.id']
            company['liczba_wspolnikow'] = \
                data['krs_podmioty.liczba_wspolnikow']

            company['score'] = json['search']['dataobjects'][i]['score']
            company['url'] = json['search']['dataobjects'][i]['_mpurl']

            companies.append(company)

        return companies

    COMMON_COMPANY_NAME_ENDINGS = \
        ( u' S.A.', u' <NAME>',
          u' Sp. z o.o.',u' SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ',
          u' Spółka z o.o.',u' SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ',
          u'Sp. Jawna', u'SPÓŁKA JAWNA',
          u'spółka z ograniczoną odpowiedzialnością sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'sp. z o. o. sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'Sp. z o.o. sp.k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',
          u'sp. z o.o. sp. k.',
          u'SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ SPÓŁKA KOMANDYTOWA',

    )

    @staticmethod
    def _normalize_name(name):
        name = name.upper()
        for i in range(len(KrsClient.COMMON_COMPANY_NAME_ENDINGS)/2):
            if name.endswith(KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2]
                    .upper()):
                return name[:len(name)-
                             len(KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2])]\
                       +KrsClient.COMMON_COMPANY_NAME_ENDINGS[i*2+1].upper()
        return name

{'fraction_non_alphanumeric': 0.1327199219294577, 'fraction_numerical': 0.003345880384776244, 'mean_word_length': 2.2609090909090908, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4083179', 'n_tokens_mistral': 2589, 'n_tokens_neox': 2598, 'n_words': 405}