Skip to content

Instantly share code, notes, and snippets.

@Biazus
Created March 21, 2020 23:55
Show Gist options
  • Save Biazus/bbc9446717e8838da352669febf6c291 to your computer and use it in GitHub Desktop.
Save Biazus/bbc9446717e8838da352669febf6c291 to your computer and use it in GitHub Desktop.
Sample of builder design pattern
#!/usr/bin/env python3
from abc import ABC, abstractmethod
class AbstractEdgeBuilder(ABC):
@abstractmethod
def build_edge(self):
pass
@abstractmethod
def build_client_cell(self, client):
pass
@abstractmethod
def build_firewall_rule(self, ip):
pass
class Edge:
memory_size = 12
hard_drive_size = 1000
class Cell:
client = None
protocol = None
class Rule:
ip = None
class WAFRule:
ip = None
class PublicEdgeBuilder(AbstractEdgeBuilder):
_edge = []
def build_edge(self):
self._edge = ["Public Edge"]
def build_client_cell(self, client_id):
cell = Cell()
cell.client = client_id
cell.protocol = "HTTPS"
self._edge.append(cell)
def build_firewall_rule(self, ip):
rule = Rule()
if ip in ['111.111.111.11', '120.212.122.22']:
rule.ip = '000.000.000.00'
else:
rule.ip = ip
self._edge.append(rule)
def get_edge(self):
return self._edge
class PrivateEdgeBuilder(AbstractEdgeBuilder):
_edge = []
def get_ip_range(self, ip):
# TODO handle this
return ip
def build_edge(self):
self._edge = ["Private Edge"]
def build_client_cell(self, client_id):
cell = Cell()
cell.client = client_id
cell.protocol = "SSH"
self._edge.append(cell)
def build_firewall_rule(self, ip):
rule = Rule()
rule.ip = ip
second_rule = WAFRule()
second_rule.ip = self.get_ip_range(ip)
self._edge.append(rule)
self._edge.append(second_rule)
def get_edge(self):
return self._edge
def create_default_edge(builder):
builder.build_edge()
builder.build_client_cell("1612k")
builder.build_client_cell("4317y")
builder.build_firewall_rule("123.123.332.22")
return builder.get_edge()
builder = PrivateEdgeBuilder()
edge = create_default_edge(builder)
print(edge)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment