Skip to main content

The Python Package Index Project

Project description

About

The Python Package Index Project (pypipr)

pypi : https://pypi.org/project/pypipr

Setup

Install with pip

python -m pip install pypipr

Import with * for fastest access

from pypipr.pypipr import *

CONSTANT

LINUX

WINDOWS

FUNCTION

avg

avg

Simple Average Function karena tidak disediakan oleh python

n = [1, 22, 2, 3, 13, 2, 123, 12, 31, 2, 2, 12, 2, 1]  
print(avg(n))  

Output:

16.285714285714285

basename

basename

Mengembalikan nama file dari path

print(basename("/ini/nama/folder/ke/file.py"))  

Output:

file.py

batchmaker

batchmaker

Alat Bantu untuk membuat teks yang berulang.
Gunakan {[start]-[finish][-[step]]}.

[start] dan [finish]    -> bisa berupa huruf maupun angka  
[-[step]]               -> bersifat optional  
s = "Urutan {1-6-3} dan {10-9} dan {j-k} dan {Z-A-15} saja."  
print(generator.batchmaker(s))  
print(batchmaker(s))  

Output:

<generator object generator.batchmaker at 0x000001BA74A30270>
('Urutan 1 dan 10 dan j dan Z saja.', 'Urutan 1 dan 10 dan j dan K saja.', 'Urutan 1 dan 10 dan k dan Z saja.', 'Urutan 1 dan 10 dan k dan K saja.', 'Urutan 1 dan 9 dan j dan Z saja.', 'Urutan 1 dan 9 dan j dan K saja.', 'Urutan 1 dan 9 dan k dan Z saja.', 'Urutan 1 dan 9 dan k dan K saja.', 'Urutan 4 dan 10 dan j dan Z saja.', 'Urutan 4 dan 10 dan j dan K saja.', 'Urutan 4 dan 10 dan k dan Z saja.', 'Urutan 4 dan 10 dan k dan K saja.', 'Urutan 4 dan 9 dan j dan Z saja.', 'Urutan 4 dan 9 dan j dan K saja.', 'Urutan 4 dan 9 dan k dan Z saja.', 'Urutan 4 dan 9 dan k dan K saja.')

calculate

calculate

Mengembalikan hasil dari perhitungan teks menggunakan modul pint.
Mendukung perhitungan matematika dasar dengan satuan.

Return value:

  • Berupa class Quantity dari modul pint

Format:

  • f"{result:~P}" -> pretty
  • f"{result:~H}" -> html
  • result.to_base_units() -> SI
  • result.to_compact() -> human readable
fx = "3 meter * 10 cm * 3 km"  
res = calculate(fx)  
print(res)  
print(res.to_base_units())  
print(res.to_compact())  
print(f"{res:~P}")  
print(f"{res:~H}")  

Output:

90 centimeter * kilometer * meter
900.0 meter ** 3
900.0 meter ** 3
90 cm·km·m
90 cm km m

chunck_array

chunck_array

Membagi array menjadi potongan-potongan dengan besaran yg diinginkan

array = [2, 3, 12, 3, 3, 42, 42, 1, 43, 2, 42, 41, 4, 24, 32, 42, 3, 12, 32, 42, 42]  
print(generator.chunck_array(array, 5))  
print(chunck_array(array, 5))  

Output:

<generator object generator.chunck_array at 0x000001BA74A30190>
([2, 3, 12, 3, 3], [42, 42, 1, 43, 2], [42, 41, 4, 24, 32], [42, 3, 12, 32, 42], [42])

console_run

console_run

Menjalankan command seperti menjalankan command di Command Terminal

console_run('dir')  
console_run('ls')  

create_folder

create_folder

Membuat folder.
Membuat folder secara recursive dengan permission.

create_folder("contoh_membuat_folder")  
create_folder("contoh/membuat/folder/recursive")  
create_folder("./contoh_membuat_folder/secara/recursive")  

datetime_from_string

datetime_from_string

Parse iso_string menjadi datetime object

print(datetime_from_string("2022-12-12 15:40:13").isoformat())  
print(datetime_from_string("2022-12-12 15:40:13", timezone="Asia/Jakarta").isoformat())  

Output:

2022-12-12T15:40:13+00:00
2022-12-12T15:40:13+07:00

datetime_now

datetime_now

Memudahkan dalam membuat Datetime untuk suatu timezone tertentu

print(datetime_now("Asia/Jakarta"))  
print(datetime_now("GMT"))  
print(datetime_now("Etc/GMT+7"))  

Output:

2023-05-19 10:11:37.558766+07:00
2023-05-19 03:11:37.568766+00:00
2023-05-18 20:11:37.578767-07:00

dict_first

dict_first

Mengambil nilai (key, value) pertama dari dictionary dalam bentuk tuple.

d = {  
    "key2": "value2",  
    "key3": "value3",  
    "key1": "value1",  
}  
print(dict_first(d, remove=True))  
print(dict_first(d))  

Output:

('key2', 'value2')
('key3', 'value3')

dirname

dirname

Mengembalikan nama folder dari path.
Tanpa trailing slash di akhir.

print(dirname("/ini/nama/folder/ke/file.py"))  

Output:

/ini/nama/folder/ke

exit_if_empty

exit_if_empty

Keluar dari program apabila seluruh variabel
setara dengan empty

var1 = None  
var2 = '0'  
exit_if_empty(var1, var2)  

explode

explode

Memecah text menjadi list berdasarkan separator.

t = '/ini/contoh/path/'  
print(explode(t, separator='/'))  

Output:

['', 'ini', 'contoh', 'path', '']

filter_empty

filter_empty

get_class_method

get_class_method

Mengembalikan berupa tuple yg berisi list dari method dalam class

class ExampleGetClassMethod:  
    def a():  
        return [x for x in range(10)]  

    def b():  
        return [x for x in range(10)]  

    def c():  
        return [x for x in range(10)]  

    def d():  
        return [x for x in range(10)]  

print(get_class_method(ExampleGetClassMethod))  

Output:

(<function ExampleGetClassMethod.a at 0x000001BA74BED8B0>, <function ExampleGetClassMethod.b at 0x000001BA74BED820>, <function ExampleGetClassMethod.c at 0x000001BA74BED940>, <function ExampleGetClassMethod.d at 0x000001BA74BED9D0>)

get_filemtime

get_filemtime

Mengambil informasi last modification time file dalam nano seconds

print(get_filemtime(__file__))  

Output:

1684465891221194200

get_filesize

get_filesize

Mengambil informasi file size dalam bytes

print(get_filesize(__file__))  

Output:

35980

github_pull

github_pull

Menjalankan command git pull

github_pull()  

github_push

github_push

Menjalankan command status, add, commit dan push

github_push('Commit Message')  

iexec

iexec

improve exec() python function untuk mendapatkan outputnya

print(iexec('print(9*9)'))  

Output:

81

implode

implode

Simplify Python join functions like PHP function.
Iterable bisa berupa sets, tuple, list, dictionary.

arr = {'asd','dfs','weq','qweqw'}  
print(implode(arr, ', '))  

arr = '/ini/path/seperti/url/'.split('/')  
print(implode(arr, ','))  
print(implode(arr, ',', remove_empty=True))  

arr = {'a':'satu', 'b':(12, 34, 56), 'c':'tiga', 'd':'empat'}  
print(implode(arr, separator='</li>\n<li>', start='<li>', end='</li>', recursive_flat=True))  
print(implode(arr, separator='</div>\n<div>', start='<div>', end='</div>'))  
print(implode(10, ' '))  

Output:

asd, qweqw, dfs, weq
,ini,path,seperti,url,
ini,path,seperti,url
<li>satu</li>
<li>12</li>
<li>34</li>
<li>56</li>
<li>tiga</li>
<li>empat</li>
<div>satu</div>
<div><div>12</div>
<div>34</div>
<div>56</div></div>
<div>tiga</div>
<div>empat</div>
10

input_char

input_char

Meminta masukan satu huruf tanpa menekan Enter.

input_char("Input char : ")  
input_char("Input char : ", default='Y')  
input_char("Input Char without print : ", echo_char=False)  

iopen

iopen

Membaca atau Tulis pada path yang bisa merupakan FILE maupun URL.

Baca File :

  • Membaca seluruh file.
  • Jika berhasil content dapat diparse dengan regex.
  • Apabila File berupa html, dapat diparse dengan css atau xpath.

Tulis File :

  • Menulis pada file.
  • Jika file tidak ada maka akan dibuat.
  • Jika file memiliki content maka akan di overwrite.

Membaca URL :

  • Mengakses URL dan mengembalikan isi html nya berupa teks.
  • Content dapat diparse dengan regex, css atau xpath.

Tulis URL :

  • Mengirimkan data dengan metode POST ke url.
  • Jika berhasil dan response memiliki content, maka dapat diparse dengan regex, css atau xpath.
# FILE  
print(iopen("__iopen.txt", "mana aja"))  
print(iopen("__iopen.txt", regex="(\w+)"))  
# URL  
print(iopen("https://www.google.com/", css_select="a"))  
print(iopen("https://www.google.com/", dict(coba="dulu"), xpath="//a"))  

Output:

8
['mana', 'aja']
[<Element a at 0x1ba74a639a0>, <Element a at 0x1ba74aa3130>, <Element a at 0x1ba74aa34a0>, <Element a at 0x1ba74b6b3b0>, <Element a at 0x1ba74b6b540>, <Element a at 0x1ba74b6b220>, <Element a at 0x1ba74b6b810>, <Element a at 0x1ba74b6b860>, <Element a at 0x1ba74b6b6d0>, <Element a at 0x1ba74b6b9f0>, <Element a at 0x1ba74b6ba40>, <Element a at 0x1ba74b6b9a0>, <Element a at 0x1ba74952ea0>, <Element a at 0x1ba74952d10>, <Element a at 0x1ba74952d60>, <Element a at 0x1ba74952ef0>, <Element a at 0x1ba74b4e220>, <Element a at 0x1ba74bddbd0>]
False

irange

irange

Improve python range() function untuk pengulangan menggunakan huruf

print(generator.irange('a', 'z'))  
print(irange('H', 'a'))  
print(irange('1', '5', 3))  
print(irange('1', 5, 3))  
# print(irange('a', 5, 3))  
print(irange(-10, 4, 3))  
print(irange(1, 5))  

Output:

<generator object generator.irange at 0x000001BA74A30270>
['H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a']
['1', '4']
[1, 4]
[-10, -7, -4, -1, 2]
[1, 2, 3, 4, 5]

is_empty

is_empty

Mengecek apakah variable setara dengan nilai kosong pada empty.

Pengecekan nilai yang setara menggunakan simbol '==', sedangkan untuk
pengecekan lokasi memory yang sama menggunakan keyword 'is'

print(is_empty("teks"))  
print(is_empty(True))  
print(is_empty(False))  
print(is_empty(None))  
print(is_empty(0))  
print(is_empty([]))  

Output:

False
False
True
True
True
True

is_iterable

is_iterable

Mengecek apakah suatu variabel bisa dilakukan forloop atau tidak

s = 'ini string'  
print(is_iterable(s))  

l = [12,21,2,1]  
print(is_iterable(l))  

r = range(100)  
print(is_iterable(r))  

d = {'a':1, 'b':2}  
print(is_iterable(d.values()))  

Output:

False
True
True
True

is_valid_url

is_valid_url

Mengecek apakah path merupakan URL yang valid atau tidak.
Cara ini merupakan cara yang paling efektif.

print(is_valid_url("https://chat.openai.com/?model=text-davinci-002-render-sha"))  
print(is_valid_url("https://chat.openai.com/?model/=text-dav/inci-002-render-sha"))  

Output:

True
True

iscandir

iscandir

Mempermudah scandir untuk mengumpulkan folder dan file.

print(generator.iscandir())  
print(iscandir("./", recursive=False, scan_file=False))  

Output:

<generator object generator.iscandir at 0x000001BA74A30270>
(WindowsPath('.git'), WindowsPath('.pytest_cache'), WindowsPath('.vscode'), WindowsPath('dist'), WindowsPath('pypipr'))

log

log

Decorator untuk mempermudah pembuatan log karena tidak perlu mengubah fungsi yg sudah ada.
Melakukan print ke console untuk menginformasikan proses yg sedang berjalan didalam program.

@log  
def some_function():  
    pass  

@log()  
def some_function_again():  
    pass  

@log("Calling some function")  
def some_function_more():  
    pass  

some_function()  
some_function_again()  
some_function_more()  

print_colorize

print_colorize

Print text dengan warna untuk menunjukan text penting

print_colorize("Print some text")  
print_colorize("Print some text", color=colorama.Fore.RED)  

print_dir

print_dir

Print property dan method yang tersedia pada variabel

p = pathlib.Path("https://www.google.com/")  
print_dir(p)  

Output:

           __bytes__ : b'https:\\www.google.com'
           __class__ : .
             __dir__ : ['__module__', '__doc__', '__slots__', 'is_mount', '__new__', '_init', '_make_child_relpath', '__enter__', '__exit__', '_opener', '_raw_open', 'cwd', 'home', 'samefile', 'iterdir', 'glob', 'rglob', 'absolute', 'resolve', 'stat', 'owner', 'group', 'open', 'read_bytes', 'read_text', 'write_bytes', 'write_text', 'readlink', 'touch', 'mkdir', 'chmod', 'lchmod', 'unlink', 'rmdir', 'lstat', 'link_to', 'rename', 'replace', 'symlink_to', 'exists', 'is_dir', 'is_file', 'is_symlink', 'is_block_device', 'is_char_device', 'is_fifo', 'is_socket', 'expanduser', '_accessor', '__reduce__', '_parse_args', '_from_parts', '_from_parsed_parts', '_format_parsed_parts', '_make_child', '__str__', '__fspath__', 'as_posix', '__bytes__', '__repr__', 'as_uri', '_cparts', '__eq__', '__hash__', '__lt__', '__le__', '__gt__', '__ge__', '__class_getitem__', 'drive', 'root', 'anchor', 'name', 'suffix', 'suffixes', 'stem', 'with_name', 'with_stem', 'with_suffix', 'relative_to', 'is_relative_to', 'parts', 'joinpath', '__truediv__', '__rtruediv__', 'parent', 'parents', 'is_absolute', 'is_reserved', 'match', '_cached_cparts', '_drv', '_hash', '_parts', '_pparts', '_root', '_str', '__getattribute__', '__setattr__', '__delattr__', '__ne__', '__init__', '__reduce_ex__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__', '_flavour']
             __doc__ : Path subclass for Windows systems.

    On a Windows system, instantiating a Path should return this object.
    
           __enter__ : https:\www.google.com
          __fspath__ : https:\www.google.com
            __hash__ : -1935620858007933405
            __init__ : None
   __init_subclass__ : None
          __module__ : pathlib
          __reduce__ : (<class 'pathlib.WindowsPath'>, ('https:', 'www.google.com'))
            __repr__ : WindowsPath('https:/www.google.com')
          __sizeof__ : 80
           __slots__ : ()
             __str__ : https:\www.google.com
    __subclasshook__ : NotImplemented
           _accessor : <pathlib._NormalAccessor object at 0x000001BA73E01DF0>
      _cached_cparts : ['https:', 'www.google.com']
             _cparts : ['https:', 'www.google.com']
                _drv : 
            _flavour : <pathlib._WindowsFlavour object at 0x000001BA73E015E0>
               _hash : -1935620858007933405
               _init : None
              _parts : ['https:', 'www.google.com']
               _root : 
                _str : https:\www.google.com
            absolute : C:\Users\ToshibaM840\Desktop\website\pypipr\https:\www.google.com
              anchor : 
            as_posix : https:/www.google.com
                 cwd : C:\Users\ToshibaM840\Desktop\website\pypipr
               drive : 
          expanduser : https:\www.google.com
                home : C:\Users\ToshibaM840
         is_absolute : False
         is_reserved : False
             iterdir : <generator object Path.iterdir at 0x000001BA74B63AC0>
            joinpath : https:\www.google.com
                name : www.google.com
              parent : https:
             parents : <WindowsPath.parents>
               parts : ('https:', 'www.google.com')
                root : 
                stem : www.google
              suffix : .com
            suffixes : ['.google', '.com']

print_log

print_log

Akan melakukan print ke console.
Berguna untuk memberikan informasi proses program yg sedang berjalan.

print_log("Standalone Log")  

random_bool

random_bool

Menghasilkan nilai random True atau False.
Fungsi ini merupakan fungsi tercepat untuk mendapatkan random bool.

print(random_bool())  

Output:

False

serialize

serialize

Mengubah variabel data menjadi string untuk yang dapat dibaca untuk disimpan.
String yang dihasilkan berbentuk syntax YAML.

data = {  
    'a': 123,  
    't': ['disini', 'senang', 'disana', 'senang'],  
    'l': (12, 23, [12, 42])  
}  
print(serialize(data))  

Output:

a: 123
l:
- 12
- 23
- - 12
  - 42
t:
- disini
- senang
- disana
- senang

set_timeout

set_timeout

Menjalankan fungsi ketika sudah sekian detik.
Apabila timeout masih berjalan tapi kode sudah selesai dieksekusi semua, maka
program tidak akan berhenti sampai timeout selesai, kemudian fungsi dijalankan,
kemudian program dihentikan.

set_timeout(3, lambda: print("Timeout 3"))  
x = set_timeout(7, lambda: print("Timeout 7"))  
print(x)  
print("menghentikan timeout 7")  
x.cancel()  

Output:

<Timer(Thread-2, started 8580)>
menghentikan timeout 7

sets_ordered

sets_ordered

Hanya mengambil nilai unik dari suatu list

array = [2, 3, 12, 3, 3, 42, 42, 1, 43, 2, 42, 41, 4, 24, 32, 42, 3, 12, 32, 42, 42]  
print(generator.sets_ordered(array))  
print(sets_ordered(array))  

Output:

<generator object generator.sets_ordered at 0x000001BA74B63900>
[2, 3, 12, 42, 1, 43, 41, 4, 24, 32]

strtr

strtr

STRing TRanslate mengubah string menggunakan kamus dari dict.
Replacement dapat berupa text biasa ataupun regex pattern.
Apabila replacement berupa regex, gunakan raw string r"..."
Untuk regex capturing gunakan (...), dan untuk mengaksesnya gunakan \1, \2, .., dst.

text = 'aku ini mau ke sini'  
replacements = {  
    "sini": "situ",  
    r"(ini)": r"itu dan \1",  
}  
print(strtr(text, replacements))  

Output:

aku itu dan ini mau ke situ

to_str

to_str

Mengubah value menjadi string literal

print(to_str(5))  
print(to_str([]))  
print(to_str(False))  
print(to_str(True))  
print(to_str(None))  

Output:

5

False
True

unserialize

unserialize

Mengubah string data hasil dari serialize menjadi variabel.
String data adalah berupa syntax YAML.

data = {  
    'a': 123,  
    't': ['disini', 'senang', 'disana', 'senang'],  
    'l': (12, 23, [12, 42])  
}  
s = serialize(data)  
print(unserialize(s))  

Output:

{'a': 123, 'l': [12, 23, [12, 42]], 't': ['disini', 'senang', 'disana', 'senang']}

CLASS

ComparePerformance

ComparePerformance

Menjalankan seluruh method dalam class,
Kemudian membandingkan waktu yg diperlukan.
Nilai 100 berarti yang tercepat.

class ExampleComparePerformance(ComparePerformance):  
    # number = 1  
    z = 10  
  
    def a(self):  
        return (x for x in range(self.z))  
  
    def b(self):  
        return tuple(x for x in range(self.z))  
  
    def c(self):  
        return [x for x in range(self.z)]  
  
    def d(self):  
        return list(x for x in range(self.z))  
  
print(ExampleComparePerformance().compare_result())  
print(ExampleComparePerformance().compare_performance())  
print(ExampleComparePerformance().compare_performance())  
print(ExampleComparePerformance().compare_performance())  
print(ExampleComparePerformance().compare_performance())  
print(ExampleComparePerformance().compare_performance())  

Output:

{'a': <generator object ExampleComparePerformance.a.<locals>.<genexpr> at 0x000001BA74A30270>, 'b': (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), 'c': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'd': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}
{'a': 119, 'b': 131, 'c': 100, 'd': 163}
{'a': 100, 'b': 144, 'c': 100, 'd': 148}
{'a': 134, 'b': 126, 'c': 100, 'd': 160}
{'a': 110, 'b': 136, 'c': 100, 'd': 147}
{'a': 132, 'b': 141, 'c': 100, 'd': 155}

RunParallel

RunParallel

Menjalankan program secara bersamaan.

  • class RunParallel didesain hanya untuk pemrosesan data saja.
  • Penggunaannya class RunParallel dengan cara membuat instance sub class beserta data yg akan diproses, kemudian panggil fungsi yg dipilih run_asyncio / run_multi_threading / run_multi_processing, kemudian dapatkan hasilnya.
  • class RunParallel tidak didesain untuk menyimpan data, karena setiap module terutama module multiprocessing tidak dapat mengakses data kelas dari proses yg berbeda.
  • Semua methods akan dijalankan secara paralel kecuali method dengan nama yg diawali underscore _
  • Method untuk multithreading/multiprocessing harus memiliki 2 parameter, yaitu: result: dict dan q: queue.Queue. Parameter result digunakan untuk memberikan return value dari method, dan Parameter q digunakan untuk mengirim data antar proses.
  • Method untuk asyncio harus menggunakan keyword async def, dan untuk perpindahan antar kode menggunakan await asyncio.sleep(0), dan keyword return untuk memberikan return value.
  • Return Value berupa dictionary dengan key adalah nama function, dan value adalah return value dari setiap fungsi
  • Menjalankan Multiprocessing harus berada dalam blok if __name__ == "__main__": karena area global pada program akan diproses lagi. Terutama pada sistem operasi windows.
  • run_asyncio() akan menjalankan kode dalam satu program, hanya saja alur program dapat berpindah-pindah menggunkan await asyncio.sleep(0).
  • run_multi_threading() akan menjalankan program dalam satu CPU, hanya saja dalam thread yang berbeda. Walaupun tidak benar-benar berjalan secara bersamaan namun bisa meningkatkan kecepatan penyelesaian program, dan dapat saling mengakses resource antar program. Akses resource antar program bisa secara langsung maupun menggunakan parameter yang sudah disediakan yaitu result: dict dan q: queue.Queue.
  • run_multi_processing() akan menjalankan program dengan beberapa CPU. Program akan dibuatkan environment sendiri yang terpisah dari program induk. Keuntungannya adalah program dapat benar-benar berjalan bersamaan, namun tidak dapat saling mengakses resource secara langsung. Akses resource menggunakan parameter yang sudah disediakan yaitu result: dict dan q: queue.Queue.
class ExampleRunParallel(RunParallel):  
    z = "ini"  
  
    def __init__(self) -> None:  
        self.pop = random.randint(0, 100)  
  
    def _set_property_here(self, v):  
        self.prop = v  
  
    def a(self, result: dict, q: queue.Queue):  
        result["z"] = self.z  
        result["pop"] = self.pop  
        result["a"] = "a"  
        q.put("from a 1")  
        q.put("from a 2")  
  
    def b(self, result: dict, q: queue.Queue):  
        result["z"] = self.z  
        result["pop"] = self.pop  
        result["b"] = "b"  
        result["q_get"] = q.get()  
  
    def c(self, result: dict, q: queue.Queue):  
        result["z"] = self.z  
        result["pop"] = self.pop  
        result["c"] = "c"  
        result["q_get"] = q.get()  
  
    async def d(self):  
        print("hello")  
        await asyncio.sleep(0)  
        print("hello")  
  
        result = {}  
        result["z"] = self.z  
        result["pop"] = self.pop  
        result["d"] = "d"  
        return result  
  
    async def e(self):  
        print("world")  
        await asyncio.sleep(0)  
        print("world")  
  
        result = {}  
        result["z"] = self.z  
        result["pop"] = self.pop  
        result["e"] = "e"  
        return result  
  
if __name__ == "__main__":  
    print(ExampleRunParallel().run_asyncio())  
    print(ExampleRunParallel().run_multi_threading())  
    print(ExampleRunParallel().run_multi_processing())  

Output:

calculate__quantity

__calculate__quantity__

generator

generator

Class ini menyediakan beberapa fungsi yang bisa mengembalikan generator.
Digunakan untuk mengoptimalkan program.

Class ini dibuat karena python generator yang disimpan dalam variabel
hanya dapat diakses satu kali.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypipr-0.1.107.tar.gz (23.6 kB view hashes)

Uploaded Source

Built Distribution

pypipr-0.1.107-py3-none-any.whl (18.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page