Created
September 10, 2021 00:56
-
-
Save cryocaustik/ae13743c14d6c565e0782c22e7b752ab to your computer and use it in GitHub Desktop.
Custom mimesis provider example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from mimesis.providers import BaseProvider | |
from random import choice, sample | |
import json | |
import requests | |
import os | |
class ProcCodeCMS(BaseProvider): | |
class Meta: | |
name = 'proc_code_cms' | |
def __init__(self): | |
self.temp_path = os.path.join(os.environ.get('TEMP'), 'fake_proc_codes_cms') | |
self.mem_cache_size = 10000 | |
self.mem_choices = [] | |
self.proc_load() | |
def proc_load(self, cached=True): | |
if not os.path.isfile(self.temp_path) or not cached: | |
url = 'https://gist.githubusercontent.com/cryocaustik/2cb5b22e6f0c2072ecfdc576a6e05b66/raw/88fa3bc5b3bd15f1dcf5bd1e5bc0738d0c1815d7/proc_codes.json' | |
response = requests.get(url) | |
if response != 200: | |
response.raise_for_status() | |
results = response.json() | |
if not results: | |
raise ValueError('no results') | |
if len(results) < self.mem_cache_size: | |
self.mem_cache_size = len(results) | |
self.mem_choices = sample(results, self.mem_cache_size) | |
self.proc_set() | |
with open(self.temp_path, 'w') as _f: | |
json.dump(results, _f) | |
_f.close() | |
else: | |
self.proc_set() | |
def proc_set(self): | |
if not self.mem_choices: | |
with open(self.temp_path, 'r') as _f: | |
_data = json.load(_f) | |
if len(_data) < self.mem_cache_size: | |
self.mem_cache_size = len(_data) | |
self.mem_choices = sample(_data, self.mem_cache_size) | |
_f.close() | |
self.proc_choice = self.mem_choices.pop(choice([i for i in range(len(self.mem_choices))])) | |
else: | |
self.proc_choice = self.mem_choices.pop(choice([i for i in range(len(self.mem_choices))])) | |
def proc_code(self, cached=False): | |
if not cached: | |
self.proc_set() | |
return self.proc_choice.get('code') | |
def proc_name(self, cached=False): | |
if not cached: | |
self.proc_set() | |
return self.proc_choice.get('name') | |
def proc_type(self, cached=False): | |
if not cached: | |
self.proc_set() | |
return self.proc_choice.get('type') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment