Skip to content

Instantly share code, notes, and snippets.

@sharad-s
Last active October 20, 2016 19:41
Show Gist options
  • Save sharad-s/ed173e43f134479c9bae5e5dd7938ed0 to your computer and use it in GitHub Desktop.
Save sharad-s/ed173e43f134479c9bae5e5dd7938ed0 to your computer and use it in GitHub Desktop.
src\Flask2\
from __future__ import unicode_literals
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, HTML, Button, Row, Field
from crispy_forms.bootstrap import AppendedText, PrependedText, FormActions
from django.contrib.auth import get_user_model
from . import models
from appDatabase.models import *
User = get_user_model()
class NodeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NodeForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.layout = Layout(
Field('node_name', 'node_ID', 'node_SystemID', 'vendor', 'rack_shelf', 'rack_number', 'rack_position' ),
)
class Meta:
model = Node
fields = ['node_name', 'node_ID', 'node_SystemID', 'vendor', 'rack_shelf', 'rack_number', 'rack_position']
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
import uuid
from django.contrib.auth.models import User
from django.db import models
from django import forms
from django.forms import ModelForm;
# Create your models here.
#Base (Abstract) Class for CommonInfo
class CommonInfo(models.Model):
STATUS = (
('N', 'New'),
('P', 'Pending'),
('A', 'Approved'),
('D', 'Denied'),
)
name = models.CharField("Name", max_length=50)
date_created = models.DateTimeField("Date Created", auto_now_add=True)
last_updated = models.DateTimeField("Last Updated", auto_now=True, blank=True)
locked = models.BooleanField(default=False)
owner = models.EmailField("owner email address", default='mbb481@ftr.com')
comments = models.TextField("comments", blank = True)
#modifications = models.ManyToManyField("modification", Modification)
#ticket = models.ForeignKey(Ticket, blank=True)
status = models.CharField("status", max_length=1, choices=STATUS, default='N')
#created_by = models.ForeignKey("User", on_delete=models.CASCADE)
class Meta:
abstract = True
#Ticket
class Ticket(CommonInfo):
STATUS = (
('N', 'New'),
('P', 'Pending'),
('A', 'Approved'),
('D', 'Denied'),
)
ticket_type = models.CharField("Ticket Type", max_length=10)
requestor = models.EmailField("requestor email address")
comments = models.TextField("comments", blank = True)
approval_status = models.CharField("approval status", max_length=1, choices=STATUS, default='N')
date_requested = models.DateTimeField("date modification requested", auto_now=True)
date_approved = models.DateTimeField("date modification approved", blank=True)
#Ticket Modification
class Modification(CommonInfo):
MODS = (
('A', 'Add'),
('C', 'Change'),
('D', 'Delete'),
)
STATUS = (
('N', 'New'),
('P', 'Pending'),
('A', 'Approved'),
('D', 'Denied'),
)
mod_type = models.CharField(verbose_name ="Modification Type", max_length=10, choices=MODS)
current_data = models.TextField(verbose_name ="Current Data")
new_data = models.TextField(verbose_name ="New Data")
requestor = models.EmailField(verbose_name ="requestor email address")
comments = models.TextField(verbose_name ="comments", blank = True)
approval_status = models.CharField(verbose_name ="approval status", max_length=1, choices=STATUS, default='N')
date_requested = models.DateTimeField(verbose_name ="date modification requested", auto_now=True)
date_approved = models.DateTimeField(verbose_name ="date modification approved", blank=True)
class Meta:
unique_together = (('current_data', 'new_data'))
#Base Classes
########################
class Connection(CommonInfo):
connection_ID = models.CharField(verbose_name ="connection_ID", max_length=10)
Node1 = models.ForeignKey("Node", on_delete=models.CASCADE, related_name='node1')
Port1 = models.ForeignKey("Port", on_delete=models.CASCADE, related_name='port1')
Site1 = models.ForeignKey("Site", on_delete=models.CASCADE, related_name='site1')
Node2 = models.ForeignKey("Node", on_delete=models.CASCADE, related_name='node2')
Site2 = models.ForeignKey("Site", on_delete=models.CASCADE, related_name='port2')
Port2 = models.ForeignKey("Port", on_delete=models.CASCADE, related_name='site2')
media = models.CharField(verbose_name ="Media", max_length=10)
Connector1 = models.CharField(verbose_name ="Connector 1", max_length=10, default)
Connector2 = models.CharField(verbose_name ="Connector 1", max_length=10)
######################
###### PHYSICAL ######
######################
class Site(CommonInfo): #Abstract
TYPES = (
('VSO', 'VSO'),
('VHO', 'VHO'),
('SHO', 'SHO'),
('Other', 'Other'),
)
description = models.CharField(verbose_name ="Description", max_length=50)
location = models.CharField(verbose_name = "Location", max_length=20)
site_id = models.CharField(verbose_name = "Site ID", max_length=10)
site_code = models.IntegerField(verbose_name = "Site Code")
site_CLLI = models.CharField(verbose_name = "Site CLLI", max_length=20, unique=True)
office_type = models.CharField(verbose_name = "Site Types", max_length=1, choices=TYPES, default='VSO')
architecture = models.CharField(verbose_name = "Site Architecture", max_length=10)
class Node(CommonInfo): #Abstract
node_IP = models.ForeignKey("IP", on_delete=models.CASCADE)
#connection = models.ManyToManyField("Connection", on_delete=models.CASCADE)
node_name = models.CharField(verbose_name ="Node Hostname", max_length=20)
node_type = models.CharField(verbose_name ="Node Type", max_length=50) #Choices VSX VDX or MDR etc.
node_ID = models.CharField(verbose_name="Node ID", max_length = 20)
node_SystemID = models.CharField(verbose_name ="Node System ID ", max_length=50)
vendor = models.CharField(verbose_name ="Node Vendor",max_length = 20)
rack_shelf = models.CharField(verbose_name ="Rack Shelf", max_length=10)
rack_number = models.CharField(verbose_name ="Rack Number", max_length=10)
rack_position = models.CharField(verbose_name ="Rack Position", max_length=10)
rack_RU = models.CharField(verbose_name ="Rack RU", max_length=10, null = True, blank = True)
rail = models.CharField(verbose_name = "Rail", max_length=10, null=True, blank=True)
ospf_Area = models.CharField(verbose_name = "OSPF Area", max_length=10)
#TODO: Consolidate all nodes into this one node class - Create connection that defines Connections between nodes
class Card(CommonInfo):
node = models.ForeignKey("Node", on_delete=models.CASCADE)
card_number = models.IntegerField(verbose_name="Card Number")
card_type = models.CharField(verbose_name="Card Type", max_length=20)
mda_type1 = models.CharField(verbose_name="MDA Type1", max_length=20)
mda_type2 = models.CharField(verbose_name="MDA Type2", max_length=20)
remarks = models.TextField(verbose_name="Remarks")
def __str__(self):
return '%s , %s' % (self.name)
class Port(CommonInfo):
card = models.ForeignKey("Card", on_delete = models.CASCADE, verbose_name="Which Card the port may belong to", null=True, blank=True)
#connection = models.ForeignKey("Connection", on_delete = models.CASCADE, verbose_name="Connection Type")
node = models.ForeignKey("Node", on_delete=models.CASCADE)
portnumber = models.CharField(verbose_name = "Port Number", max_length=10)
portID = models.CharField(verbose_name = "Port ID", max_length=20)
description = models.CharField(verbose_name ="Port Description", max_length=50)
nic_details = models.CharField(verbose_name ="NIC Details", max_length=50)
connection_type = models.CharField(verbose_name = "Port Connection Type", max_length=20)
def __str__(self):
return '%s , %s' % (self.name)
class LagMemberShip(CommonInfo):
lag = models.ForeignKey("Lag", on_delete=models.CASCADE)
port = models.ForeignKey("Port", on_delete=models.CASCADE)
def __str__(self):
return '%s , %s' % (self.lag, self.port)
class Lag(CommonInfo):
lag = models.ManyToManyField(Port, through='LagMemberShip')
def __str__(self):
return '%s' % (self.name)
######################
###### SERVICE ######
######################
class IP(CommonInfo):
IP_Address = models.GenericIPAddressField(verbose_name="IP Address")
Subnet = models.ForeignKey("Subnet", on_delete=models.CASCADE)
def __str__(self):
return '%s/%s' % (self.name)
class Subnet(CommonInfo):
subnet = models.GenericIPAddressField()
mask = mask = models.PositiveIntegerField()
class Meta:
unique_together = (('subnet', 'mask'))
def __str__(self):
return '%s/%s' % (self.subnet, self.mask)
class Service(CommonInfo):
TYPES = (
('IES', 'IES'),
('VPLS', 'VPLS'),
)
CHOICES = (
('Up', 'Up'),
('Down', 'Down'),
)
LAYERS = (
('L2', 'L2'),
('L3', 'L3'),
)
#subnet = models.ForeignKey("Subnet", on_delete=models.CASCADE)
#vid = models.BigIntegerField() #Service ID
service_ID = models.CharField(verbose_name="Service ID", max_length=10, null = True, blank= True)
service_name = models.CharField(verbose_name="Service Name", max_length=30)
service_type = models.CharField(verbose_name="Service Type", max_length=10, choices = TYPES, default='IES')
admin = models.CharField(verbose_name="Admin?", max_length=10, choices = CHOICES, default = 'Down')
operational = models.CharField(verbose_name="Operational?", max_length=10, choices = CHOICES, default = 'Down')
layer = models.CharField(verbose_name = "Service Layer", max_length=10, choices=LAYERS, default='L2')
def __str__(self):
return '%s' % (self.name)
class Application(CommonInfo):
PROTOCOLS = (
('UDP', 'UDP'),
('TCP', 'TCP'),
('ICMP', 'ICMP'),
)
protocol = models.CharField(max_length=10, choices=PROTOCOLS)
port_start = models.PositiveIntegerField()
port_finish = models.PositiveIntegerField()
class Meta:
unique_together = (('protocol', 'port_start', 'port_finish'))
def __str__(self):
return '%s' % (self.name)
{% extends "base.html" %}
{% load staticfiles %}
{% load crispy_forms_tags %}
{% load thumbnail %}
{% block title %}{{ block.super }}Data Entry{% endblock %}
<!-- Benefits of the Django application -->
{% block container %}
<h1> . </h1>
<div class ="row">
<div class="col-sm-12 col-md-7">
<div class="panel panel-default">
<div class="panel-body col-md-4 " >
<form method="post" class="form-horizontal text-center" action ="." enctype="multipart/form-data">
{% crispy node_form %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
#urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.AppHome.as_view(), name='apphome'),
url(r'^data/$', views.AppData.as_view(), name='appdata'),
]
from __future__ import unicode_literals
from django.views import generic
from django.shortcuts import render, render_to_response, get_object_or_404, redirect
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpRequest, HttpResponse
from django.template import RequestContext
#from appDatabase.forms import *
from . import forms;
from . import models;
# Create your views here.
class AppHome(generic.TemplateView):
template_name = "appDatabase/home.html"
class AppData(generic.TemplateView):
template_name = "appDatabase/node_form.html"
http_method_names = ['get', 'post']
def get(self, request, *args, **kwargs):
node = self.request.user
if "node_form" not in kwargs:
kwargs["node_form"] = forms.NodeForm(instance=node)
return super(AppData, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
node = self.request.user
node_form = forms.NodeForm(request.POST, instance=node)
if not (node_form.is_valid()):
messages.error(request, "There was a problem with the form. "
"Please check the details.")
node_form = forms.NodeForm(instance=node)
return super(AppData, self).get(request, node_form=node_form)
node_form.save()
messages.success(request, "Profile details saved!")
return redirect("appDatabase:apphome")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment