Skip to content

Instantly share code, notes, and snippets.

View zancas's full-sized avatar

Za Wilcox zancas

  • zingolabs
  • Longmont, CO
View GitHub Profile
@zancas
zancas / pypi-vs-npm.md
Last active September 19, 2021 08:25 — forked from toejough/pypi-vs-npm.md

Intro

This is a comparison of packaging with python vs with npm.

TLDR

Python packaging is 3x as complex as javascript packaging. See the conclusion for more detail (but less than the whole document).

Categories examined:

  • [script creation](script creation)
  • [conversion to a package](conversion to a package)
#! /usr/bin/env python
class TransactionContext(object):
def __init__(self, transaction):
self.transaction = transaction
self.bigip = transaction._meta_data['bigip']
self.session = self.bigip._meta_data['icr_session']
def __enter__(self):
self.transaction.create(json={})
#! /usr/bin/env python
class Transactions(Collection):
"""BIG-IP® LTM pool collection"""
def __init__(self, bigip):
super(Transactions, self).__init__(bigip)
self._meta_data['allowed_lazy_attributes'] = [Transaction]
self._meta_data['attribute_registry'] =\
{u'tm:transactionstate': Transaction}
#! /usr/bin/env python
import logging
from THERIGHTPLACE import F5SDKError
class TransactionSubmitException(F5SDKError):
pass
#! /usr/bin/env python
if self.kind != self._meta_data['required_json_kind'] and self.kind != "tm:transaction:commandsstate":
STUFF
#! /usr/bin/env python
from f5.bigip import ManagementRoot
mr = ManagementRoot(NETLOC, USERNAME, PASSWORD)
nat = mr.tm.ltm.nats.nat.create(BLAH...
#! /usr/bin/env python
class Client_Ssl(Resource):
def __init__(self, client_ssls):
super(Client_Ssl, self).__init__(client_ssls)
self._meta_data['required_json_kind'] =\
'tm:ltm:profile:client-ssl:client-sslstate'
def create(self, name, certname, keyname, **kwargs):
"""Allows creation of SSL profile with just key/cert names
#! /usr/bin/env python
def __getattribute__(self, name):
if name == 'update':
return Update(self)
elif name in self.__dict__:
return self.__dict__[name]
else:
return self.__getattr__(name)
#! /usr/bin/env python
class ReplaceDefaultNameMixin(object):
def __getattribute__(self, name):
if name in self._meta_data['override_classes']:
return self._meta_data['override_classes'][name](self)
elif name in self.__dict__:
return self.__dict__[name]
else:
return self.__getattr__(name)
#! /usr/bin/env python
try:
name = kwargs.pop('name')
certname = kwargs.pop('certname')
keyname = kwargs.pop('keyname')
except KeyError as ex:
raise MissingRequiredCreationParameter(ex)
if kwargs:
raise TypeError("Unexpected parameters: %r" kwargs)