PK!;snowpy3/.DS_StoreBud1it__.p __init__.pyIlocblob;( Connection.pyIlocblob( SNOWPY3.pyIlocblob(Utils.pyIlocblob(  @ @ @ @ EDSDB ` @ @ @PK! eyNNsnowpy3/Connection.pyimport requests import json from . import Utils class Auth(object): def __init__(self, username, password, instance, timeout=120, debug=False, api='JSONv2', proxies={}, verify=True): self.username = username self.password = password if 'https://' in instance: self.instance = instance else: self.instance = 'https://{0}.service-now.com/'.format(instance) self.timeout = timeout self.session = requests.Session() self.session.auth = (self.username, self.password) self.api = api self.proxies = proxies self.verify = verify if api.startswith('JSONv2'): self.session.headers.update({'Accept': 'application/json'}) def _list(self, table, meta={}, **kwargs): query = Utils.format_query(meta, kwargs.get('metaon', {})) params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'getKeys', 'sysparm_query': query, 'displayvalue': 'true' }) return self.session.get('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _list_by_query(self, table, query, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'getKeys', 'sysparm_query': query, 'displayvalue': 'true' }) return self.session.get('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _get(self, table, meta={}, **kwargs): query = Utils.format_query(meta, kwargs.get('metaon', {})) params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'getRecords', 'sysparm_query': query, 'displayvalue': 'true' }) return self.session.get('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _get_by_query(self, table, query, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'getRecords', 'sysparm_query': query, 'displayvalue': 'true' }) return self.session.get('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _post(self, table, data, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'insert' }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, data=json.dumps(data), timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _post_multiple(self, table, data, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'insertMultiple' }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, data=json.dumps(data), timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _update(self, table, where, data, **kwargs): query = Utils.format_query(where, {}) params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'update', 'sysparm_query': query }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, data=json.dumps(data), timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _update_by_query(self, table, query, data, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'update', 'sysparm_query': query }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, data=json.dumps(data), timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _delete(self, table, id, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'deleteRecord', 'sysparm_sys_id': id }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _delete_multiple(self, table, query, **kwargs): params = kwargs.get('params', {}) params.update({ self.api: '', 'sysparm_action': 'deleteMultiple', 'sysparm_query': query }) return self.session.post('{0}/{1}'.format(self.instance, table), params=params, timeout=self.timeout, proxies=self.proxies, verify=self.verify) def _format(self, response): return json.loads(response.text) PK!7dn n snowpy3/SNOWPY3.pyfrom snowpy3 import Utils ttl_cache=0 class Base(object): __table__ = None def __init__(self, Connection): self.Connection = Connection @Utils.cached(ttl=ttl_cache) def list_by_query(self, query, **kwargs): return self.format(self.Connection._list_by_query(self.__table__, query, **kwargs)) @Utils.cached(ttl=ttl_cache) def list(self, meta, **kwargs): return self.format(self.Connection._list(self.__table__, meta, **kwargs)) @Utils.cached(ttl=ttl_cache) def fetch_all(self, meta, **kwargs): return self.format(self.Connection._get(self.__table__, meta, **kwargs)) @Utils.cached(ttl=ttl_cache) def fetch_all_by_query(self, query, **kwargs): return self.format(self.Connection._get_by_query(self.__table__, query, **kwargs)) @Utils.cached(ttl=ttl_cache) def fetch_one(self, meta, **kwargs): response = self.fetch_all(meta, **kwargs) if 'records' in response: if len(response['records']) > 0: return response['records'][0] else: if len(response) > 0: return response[0] return {} def create(self, data, **kwargs): return self.format(self.Connection._post( self.__table__, data, **kwargs)) def create_multiple(self, data, **kwargs): return self.format(self.Connection._post_multiple( self.__table__, data, **kwargs)) def update(self, where, data, **kwargs): return self.format(self.Connection._update( self.__table__, where, data, **kwargs)) def delete(self, id, **kwargs): return self.format(self.Connection._delete( self.__table__, id, **kwargs)) def delete_multiple(self, query, **kwargs): return self.format(self.Connection._delete_multiple( self.__table__, query, **kwargs)) def format(self, response): return self.Connection._format(response) def last_updated(self, minutes, meta={}, **kwargs): metaon = {'sys_updated_on': 'Last {0} minutes@javascript:gs.minutesAgoStart({1})@' 'javascript:gs.minutesAgoEnd(0)'.format(minutes, minutes)} return self.format(self.Connection._get( self.__table__, meta, metaon=metaon, **kwargs)) class Change(Base): __table__ = 'change_request.do' class Group(Base): __table__ = 'sys_user_group.do' class Incident(Base): __table__ = 'incident.do' class Journal(Base): __table__ = 'sys_journal_field.do' class Problem(Base): __table__ = 'problem.do' class Server(Base): __table__ = 'cmdb_ci_server.do' class Task(Base): __table__ = 'task_ci_list.do' class User(Base): __table__ = 'sys_user.do' class Customer(Base): __table__ = 'core_company.do' class Router(Base): __table__ = 'cmdb_ci_ip_router.do' class Switch(Base): __table__ = 'cmdb_ci_ip_switch.do' class Cluster(Base): __table__ = 'cmdb_ci_cluster.do' class VPN(Base): __table__ = 'cmdb_ci_vpn.do' class ConfigurationItem(Base): __table__ = 'cmdb_ci.do' class Racks(Base): __table__ = 'cmdb_ci_rack.do'PK! snowpy3/Utils.pyimport hashlib import json import redis from functools import wraps rd = redis.Redis() def cached(ttl=300): def proxy(f): @wraps(f) def caching(*args, **kwargs): if ttl == 0: return f(*args, **kwargs) _hash = "{0}-{1}".format(f.__name__, hashlib.md5("{0}{1}".format( repr(args[1:]), repr(kwargs) )).hexdigest()) try: cache = rd.get(_hash) if not cache: cache = json.dumps(f(*args, **kwargs)) rd.setex(_hash, cache, ttl) return json.loads(cache) except Exception: return f(*args, **kwargs) return caching return proxy def format_query_type(value): if type(value) in (type([]), type(())): return ('IN', ','.join(value)) else: return ('=', value) def format_query(meta={}, metaon={}): try: items = meta.items() if metaon: metaon_items = metaon.items() except AttributeError: items = meta.items() if metaon: metaon_items = metaon.items() query = '^'.join(['{0}{1}{2}'.format( field, format_query_type(value)[0], format_query_type(value)[1]) for field, value in items]) if metaon: query += '^' + '^'.join(['{0}ON{1}'.format(field, value) for field, value in metaon_items]) return query PK! qsnowpy3/__init__.py__version__ = '0.1.0' PK!H\TT!snowpy3-2018.11.1.dist-info/WHEEL 1 0 нR \I$ơ7.ZON `h6oi14m,b4>4ɛpK>X;baP>PK!Hb$snowpy3-2018.11.1.dist-info/METADATAVN1}WH͍^%-$"PJ8Ipk/4"V%չ9sL%(yV1`&">|vs ڳ7JBNE]!-jZ {\6 撷8PwDe%\}R;4rN .#8hGaEd*fx7n/ll9vqcDS 9 JD6K8FIEPm#NН"( haz)>ߜ1[ժy قS"NLFx{mkk\[ՌƅJ(MPSMT|,cL5iJX**6]Nm.BnhUJhB-K)Ii^BdR~md=r0/E%FVa?a81tDcG%0A/rO}Ӄf z*`D>c?StZ1[ԯ_R]b#0C驌 n^2W9W2Lb"Wrҡ#\lZ-g`nMb`1Ɔ-դs"pP=ae=\x !7Fȵ:.X?;7&&f^"|[Y9_0)4+m@ մ2 ݐF 49G*]ϯ439dϞIpv&"n(gcKl Q