Last active
October 20, 2016 19:41
-
-
Save sharad-s/ed173e43f134479c9bae5e5dd7938ed0 to your computer and use it in GitHub Desktop.
src\Flask2\
This file contains 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 __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'] |
This file contains 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 __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) |
This file contains 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
{% 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 %} |
This file contains 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
#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'), | |
] |
This file contains 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 __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