本文整理汇总了Python中ralph.cmdb.models_ci.CI类的典型用法代码示例。如果您正苦于以下问题:Python CI类的具体用法?Python CI怎么用?Python CI使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CI类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: create_cis
def create_cis(self):
self.ci1 = CI(
uid='uid-ci1',
type=self.citype1,
barcode='barcodeci1',
name='ciname1',
)
self.ci1.save()
self.ci1.layers = [self.cilayer1, self.cilayer2]
self.ci1.save()
self.ci2 = CI(
uid='uid-ci2',
type=self.citype2,
barcode='barcodeci2',
name='ciname2',
)
self.ci2.save()
self.ci2.layers = [self.cilayer1]
self.ci2.save()
self.ci3 = CI(
uid='other-ci3',
type=self.citype2,
barcode='otherbarcodeci3',
name='otherci',
)
self.ci3.save()
self.ci3.layers = [self.cilayer2]
self.ci3.save()
开发者ID:damjanek,项目名称:ralph,代码行数:28,代码来源:tests_api.py
示例2: create_cis
def create_cis(self):
self.ci1 = CI(
uid='uid-ci1',
type=self.types[0],
barcode='barcodeci1',
name='ciname1',
)
self.ci1.save()
self.ci1.layers = [self.layers[0].id, self.layers[1].id]
self.ci1.save()
self.ci2 = CI(
uid='uid-ci2',
type=self.types[1],
barcode='barcodeci2',
name='ciname2',
)
self.ci2.save()
self.ci2.layers = [self.layers[0].id]
self.ci2.save()
self.ci3 = CI(
uid='other-ci3',
type=self.types[1],
barcode='otherbarcodeci3',
name='otherci',
)
self.ci3.save()
self.ci3.layers = [self.layers[1].id]
self.ci3.save()
开发者ID:andrzej-jankowski,项目名称:ralph,代码行数:28,代码来源:tests_api.py
示例3: create_cis
def create_cis(self):
self.ci1 = CI(uid="uid-ci1", type=self.types[0], barcode="barcodeci1", name="ciname1")
self.ci1.save()
self.ci1.layers = [self.layers[0].id, self.layers[1].id]
self.ci1.save()
self.ci2 = CI(uid="uid-ci2", type=self.types[1], barcode="barcodeci2", name="ciname2")
self.ci2.save()
self.ci2.layers = [self.layers[0].id]
self.ci2.save()
self.ci3 = CI(uid="other-ci3", type=self.types[1], barcode="otherbarcodeci3", name="otherci")
self.ci3.save()
self.ci3.layers = [self.layers[1].id]
self.ci3.save()
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:13,代码来源:tests_api.py
示例4: ralph_device_owner_table
def ralph_device_owner_table(device):
"""Renders a table containing owners of a given ralph device object."""
context = {
'venture': device.venture,
'venture_business': [],
'venture_technical': [],
'service_business': [],
'service_technical': [],
}
if device.venture:
venture_ci = CI.get_by_content_object(device.venture)
venture_ownerships = CIOwnership.objects.filter(ci=venture_ci)
context['venture_business'] = venture_ownerships.filter(
type=CIOwnershipType.business,
)
context['venture_technical'] = venture_ownerships.filter(
type=CIOwnershipType.technical,
)
if device.service:
service_ownerships = CIOwnership.objects.filter(ci=device.service)
context['service_business'] = service_ownerships.filter(
type=CIOwnershipType.business,
)
context['service_technical'] = service_ownerships.filter(
type=CIOwnershipType.technical,
)
return render_to_string('cmdb/ralph_device_owner_table.html', context)
开发者ID:4i60r,项目名称:ralph,代码行数:27,代码来源:extra.py
示例5: business_owners
def business_owners(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
owners = CIOwner.objects.filter(ciownership__type=CIOwnershipType.business.id,
ci=ci)
return ", ".join([unicode(owner) for owner in owners])
开发者ID:pijany,项目名称:ralph,代码行数:7,代码来源:admin.py
示例6: setUp
def setUp(self):
self.user = create_user(
'api_user',
'[email protected]',
'password',
is_superuser=True
)
self.puppet_cv = "v%s" % random.randrange(0, 1000)
self.post_data_puppet = {
'configuration_version': self.puppet_cv,
'host': 's11111.dc2',
'kind': 'apply',
'status': 'failed',
'time': '2012-11-14 13:00:00',
}
self.git_changeset = "change:%s" % random.randrange(0, 1000)
self.git_comment = "comment:%s" % random.randrange(0, 1000)
self.post_data_git = {
'author': 'Jan Kowalski',
'changeset': self.git_changeset,
'comment': self.git_comment,
'file_paths': '/some/path',
}
temp_venture = Venture.objects.create(name='TempTestVenture')
if settings.AUTOCI:
self.ci = CI.get_by_content_object(temp_venture)
else:
CIImporter().import_single_object(temp_venture)
self.ci = CI.objects.create(
name='TempTestVentureCI',
uid=CI.get_uid_by_content_object(temp_venture),
type_id=4,
)
self.cmdb_new_value = 'nv_%s' % random.randrange(0, 1000)
self.cmdb_old_value = 'ov_%s' % random.randrange(0, 1000)
self.post_data_cmdb_change = {
'ci': '/api/v0.9/ci/%d/' % self.ci.pk,
'comment': 'test api',
'field_name': 'child',
'new_value': self.cmdb_new_value,
'old_value': self.cmdb_old_value,
'time': '2012-11-15 12:00:00',
}
cache.clear()
开发者ID:andrzej-jankowski,项目名称:ralph,代码行数:47,代码来源:tests_api.py
示例7: technical_owners
def technical_owners(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
return CIOwner.objects.filter(
ci=ci,
ciownership__type=CIOwnershipType.technical.id,
)
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:8,代码来源:models.py
示例8: business_owners
def business_owners(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
return CIOwner.objects.filter(
ci=ci,
ciownership__type=CIOwnershipType.business.id
)
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:8,代码来源:models.py
示例9: business_owners
def business_owners(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
owners = CIOwner.objects.filter(ciownership__type=CIOwnershipType.business.id,
ci=ci)
part_url = reverse_lazy('ci_edit', kwargs={'ci_id': str(ci.id)})
return "<a href=\"{}\">{}</a>".format(part_url,
", ".join([unicode(owner) for owner in owners]))
开发者ID:Makdaam,项目名称:ralph,代码行数:9,代码来源:admin.py
示例10: setUp
def setUp(self):
engine = settings.ISSUETRACKERS["default"]["ENGINE"]
if engine != "":
raise ImproperlyConfigured("""Expected ISSUETRACKERS['default']['ENGINE']='' got: %r""" % engine)
# usual stuff
self.top_venture = Venture(name="top_venture")
self.top_venture.save()
self.child_venture = Venture(name="child_venture", parent=self.top_venture)
self.child_venture.save()
self.role = VentureRole(name="role", venture=self.child_venture)
self.role.save()
self.child_role = VentureRole(name="child_role", venture=self.child_venture, parent=self.role)
self.child_role.save()
to = CIOwner(first_name="Bufallo", last_name="Kudłaczek")
to.save()
bo = CIOwner(first_name="Bill", last_name="Bąbelek")
bo.save()
ct = ContentType.objects.get_for_model(self.top_venture)
CIImporter().import_all_ci([ct])
CIOwnership(owner=to, ci=CI.get_by_content_object(self.child_venture), type=CIOwnershipType.technical.id).save()
CIOwnership(owner=bo, ci=CI.get_by_content_object(self.child_venture), type=CIOwnershipType.business.id).save()
dm = self.add_model("DC model sample", DeviceType.data_center.id)
self.dc = Device.create(sn="sn1", model=dm)
self.dc.name = "dc"
self.dc.save()
dm = self.add_model("Rack model sample", DeviceType.rack_server.id)
self.rack = Device.create(venture=self.child_venture, sn="sn2", model=dm)
self.rack.parent = self.dc
self.rack.name = "rack"
self.rack.save()
dm = self.add_model("Blade model sample", DeviceType.blade_server.id)
self.blade = Device.create(venture=self.child_venture, venturerole=self.child_role, sn="sn3", model=dm)
self.blade.name = "blade"
self.blade.parent = self.rack
self.blade.save()
self.deployment = Deployment()
self.deployment.hostname = "test_host2"
self.deployment.device = self.blade
self.deployment.mac = "10:9a:df:6f:af:01"
self.deployment.ip = "192.168.1.1"
self.deployment.hostname = "test"
self.deployment.save()
开发者ID:szaydel,项目名称:ralph,代码行数:42,代码来源:tests.py
示例11: setUp
def setUp(self):
self.client = login_as_su()
self.service = CI(
name='allegro.pl',
type=CIType.objects.get(id=CI_TYPES.SERVICE)
)
self.service.save()
self.db_service = CI.objects.get(id=self.service.id)
self.venture = CI(
name='allegro_prod',
type=CIType.objects.get(id=CI_TYPES.VENTURE)
)
self.venture.save()
self.ci_venture = CI.objects.get(id=self.venture.id)
self.relation = CIRelation(
parent=self.ci_venture,
child=self.db_service,
type=CI_RELATION_TYPES.CONTAINS,
)
self.relation.save()
开发者ID:damjanek,项目名称:ralph,代码行数:20,代码来源:tests_reports.py
示例12: technical_owners
def technical_owners(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
owners = CIOwner.objects.filter(
ciownership__type=CIOwnershipType.technical.id,
ci=ci
)
part_url = reverse_lazy('ci_edit', kwargs={'ci_id': str(ci.id)})
link_text = ", ".join([unicode(owner)
for owner in owners]) if owners else '[add]'
return "<a href=\"{}\">{}</a>".format(part_url, link_text)
开发者ID:wmatyskiewicz,项目名称:ralph,代码行数:12,代码来源:admin.py
示例13: setUp
def setUp(self):
self.user = create_user("api_user", "[email protected]", "password", is_superuser=True)
self.puppet_cv = "v%s" % random.randrange(0, 1000)
self.post_data_puppet = {
"configuration_version": self.puppet_cv,
"host": "s11111.dc2",
"kind": "apply",
"status": "failed",
"time": "2012-11-14 13:00:00",
}
self.git_changeset = "change:%s" % random.randrange(0, 1000)
self.git_comment = "comment:%s" % random.randrange(0, 1000)
self.post_data_git = {
"author": "Jan Kowalski",
"changeset": self.git_changeset,
"comment": self.git_comment,
"file_paths": "/some/path",
}
temp_venture = Venture.objects.create(name="TempTestVenture")
if settings.AUTOCI:
self.ci = CI.get_by_content_object(temp_venture)
else:
CIImporter().import_single_object(temp_venture)
self.ci = CI.objects.create(
name="TempTestVentureCI", uid=CI.get_uid_by_content_object(temp_venture), type_id=4
)
self.cmdb_new_value = "nv_%s" % random.randrange(0, 1000)
self.cmdb_old_value = "ov_%s" % random.randrange(0, 1000)
self.post_data_cmdb_change = {
"ci": "/api/v0.9/ci/%d/" % self.ci.pk,
"comment": "test api",
"field_name": "child",
"new_value": self.cmdb_new_value,
"old_value": self.cmdb_old_value,
"time": "2012-11-15 12:00:00",
}
cache.clear()
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:40,代码来源:tests_api.py
示例14: test_reports_views
def test_reports_views(self):
url = '/ui/reports/services/'
report = self.client.get(url, follow=True)
self.assertEqual(report.status_code, 200)
invalid_relation = report.context['invalid_relation']
services_without_venture = report.context['services_without_venture']
self.assertEqual(invalid_relation[0].name, 'allegro.pl')
self.assertEqual(len(invalid_relation), 1)
self.assertEqual(len(services_without_venture), 0)
# local service for tests
service = CI(name='ceneo.pl', type=CIType.objects.get(
id=CI_TYPES.SERVICE)
)
service.save()
# local venture for tests
venture = CI(name='allegro_prod', type=CIType.objects.get(
id=CI_TYPES.VENTURE)
)
venture.save()
reload_report = self.client.get(url, follow=True)
re_invalid_relation = reload_report.context['invalid_relation']
re_services_without_venture = reload_report.context[
'services_without_venture']
self.assertEqual(len(re_invalid_relation), 1)
self.assertEqual(len(re_services_without_venture), 0)
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:25,代码来源:tests_reports.py
示例15: setUp
def setUp(self):
self.puppet_cv = "v%s" % random.randrange(0, 1000)
puppet_bundle = Bundle(
data={
'configuration_version': self.puppet_cv,
'host': 's11111.dc2',
'kind': 'apply',
'status': 'failed',
'time': '2012-11-14 13:00:00'
})
puppet_resource = CIChangePuppetResource()
puppet_resource.obj_create(bundle=puppet_bundle)
self.git_changeset = "change:%s" % random.randrange(0, 1000)
self.git_comment = "comment:%s" % random.randrange(0, 1000)
git_bundle = Bundle(
data={
'author': 'Jan Kowalski',
'changeset': self.git_changeset,
'comment': self.git_comment,
'file_paths': '/some/path',
})
git_resource = CIChangeGitResource()
git_resource.obj_create(bundle=git_bundle)
temp_venture = Venture.objects.create(name='TempTestVenture')
self.ci = CI.objects.create(
name='TempTestVentureCI',
uid=CI.get_uid_by_content_object(temp_venture),
type_id=4)
self.cmdb_new_value = 'nv_%s' % random.randrange(0, 1000)
self.cmdb_old_value = 'ov_%s' % random.randrange(0, 1000)
cmdb_bundle = Bundle(
data={
'ci': '/api/v0.9/ci/%d/' % self.ci.pk,
'comment': 'test api',
'field_name': 'child',
'new_value': self.cmdb_new_value,
'old_value': self.cmdb_old_value,
'time': '2012-11-15 12:00:00'
})
cmdb_resource = CIChangeCMDBHistoryResource()
cmdb_resource.obj_create(bundle=cmdb_bundle)
开发者ID:damjanek,项目名称:ralph,代码行数:43,代码来源:tests_api.py
示例16: CMDBApiTest
class CMDBApiTest(UserTestCase):
def setUp(self):
self.layers = CILayer.objects.all()
self.types = CIType.objects.all()
self.create_owners()
self.create_cis()
self.create_ownerships()
self.create_attributes()
self.create_relations()
super(CMDBApiTest, self).setUp()
def create_owners(self):
self.owner1 = CIOwnerFactory()
self.owner2 = CIOwnerFactory()
def create_cis(self):
self.ci1 = CI(
uid='uid-ci1',
type=self.types[0],
barcode='barcodeci1',
name='ciname1',
)
self.ci1.save()
self.ci1.layers = [self.layers[0].id, self.layers[1].id]
self.ci1.save()
self.ci2 = CI(
uid='uid-ci2',
type=self.types[1],
barcode='barcodeci2',
name='ciname2',
)
self.ci2.save()
self.ci2.layers = [self.layers[0].id]
self.ci2.save()
self.ci3 = CI(
uid='other-ci3',
type=self.types[1],
barcode='otherbarcodeci3',
name='otherci',
)
self.ci3.save()
self.ci3.layers = [self.layers[1].id]
self.ci3.save()
def create_ownerships(self):
self.ciownership1 = CIOwnership(
ci=self.ci1,
owner=self.owner1,
type=CIOwnershipType.technical,
)
self.ciownership1.save()
self.ciownership2 = CIOwnership(
ci=self.ci1,
owner=self.owner2,
type=CIOwnershipType.business,
)
self.ciownership2.save()
self.ciownership3 = CIOwnership(
ci=self.ci2,
owner=self.owner2,
type=CIOwnershipType.business,
)
self.ciownership3.save()
def create_relations(self):
self.relation1 = CIRelation(
parent=self.ci1,
child=self.ci2,
type=CI_RELATION_TYPES.CONTAINS,
)
self.relation1.save()
self.relation2 = CIRelation(
parent=self.ci2,
child=self.ci3,
type=CI_RELATION_TYPES.HASROLE,
)
self.relation2.save()
def create_attributes(self):
self.attribute1 = CIAttribute(
name='Attribute 1', attribute_type=CI_ATTRIBUTE_TYPES.INTEGER,
choices='',
)
self.attribute1.save()
self.attribute1.ci_types.add(self.types[0]),
self.attribute_value1 = CIAttributeValue(
ci=self.ci1, attribute=self.attribute1,
)
self.attribute_value1.value = 10
self.attribute_value1.save()
def test_layers(self):
path = "/api/v0.9/cilayers/"
response = self.get(path)
json_string = response.content
json_data = json.loads(json_string)
resource_uris = [
ci_layer['resource_uri'] for ci_layer in json_data['objects']
]
#.........这里部分代码省略.........
开发者ID:deejay1,项目名称:ralph,代码行数:101,代码来源:tests_api.py
示例17: ReportsServicesTest
class ReportsServicesTest(TestCase):
fixtures = [
'0_types.yaml',
'1_attributes.yaml',
'2_layers.yaml',
'3_prefixes.yaml'
]
def setUp(self):
self.client = login_as_su()
self.service = CI(
name='allegro.pl',
type=CIType.objects.get(id=CI_TYPES.SERVICE)
)
self.service.save()
self.db_service = CI.objects.get(id=self.service.id)
self.venture = CI(
name='allegro_prod',
type=CIType.objects.get(id=CI_TYPES.VENTURE)
)
self.venture.save()
self.ci_venture = CI.objects.get(id=self.venture.id)
self.relation = CIRelation(
parent=self.ci_venture,
child=self.db_service,
type=CI_RELATION_TYPES.CONTAINS,
)
self.relation.save()
def test_user_login(self):
self.assertTrue(self.client)
def test_reports_devices(self):
self.assertEqual(self.service.name, 'allegro.pl')
self.assertEqual(self.db_service.name, self.service.name)
def test_reports_venture(self):
self.assertEqual(self.venture.name, 'allegro_prod')
self.assertEqual(self.ci_venture.name, self.venture.name)
def test_reports_relation(self):
self.assertEqual(self.relation.child.type_id, CI_TYPES.SERVICE)
self.assertEqual(self.relation.parent.type_id, CI_TYPES.VENTURE)
self.assertNotEqual(self.relation.child.type_id, CI_TYPES.VENTURE)
def test_reports_views(self):
url = '/ui/reports/services/'
report = self.client.get(url, follow=True)
self.assertEqual(report.status_code, 200)
invalid_relation = report.context['invalid_relation']
services_without_venture = report.context['services_without_venture']
self.assertEqual(invalid_relation[0].name, 'allegro.pl')
self.assertEqual(len(invalid_relation), 1)
self.assertEqual(len(services_without_venture), 0)
# local service for tests
service = CI(name='ceneo.pl', type=CIType.objects.get(
id=CI_TYPES.SERVICE)
)
service.save()
# local venture for tests
venture = CI(name='allegro_prod', type=CIType.objects.get(
id=CI_TYPES.VENTURE)
)
venture.save()
reload_report = self.client.get(url, follow=True)
re_invalid_relation = reload_report.context['invalid_relation']
re_services_without_venture = reload_report.context['services_without_venture']
self.assertEqual(len(re_invalid_relation), 1)
self.assertEqual(len(re_services_without_venture), 0)
开发者ID:damjanek,项目名称:ralph,代码行数:69,代码来源:tests_reports.py
示例18: all_ownerships
def all_ownerships(self):
ci = CI.get_by_content_object(self)
if not ci:
return []
return CIOwnership.objects.filter(ci=ci)
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:5,代码来源:models.py
示例19: CMDBApiTest
class CMDBApiTest(TestCase):
def setUp(self):
self.user = create_user("api_user", "[email protected]", "password")
self.layers = CILayer.objects.all()
self.types = CIType.objects.all()
self.create_owners()
self.create_cis()
self.create_ownerships()
self.create_attributes()
self.create_relations()
self.headers = {
"HTTP_ACCEPT": "application/json",
"HTTP_AUTHORIZATION": "ApiKey {}:{}".format(self.user.username, self.user.api_key.key),
}
cache.delete("api_user_accesses")
def create_owners(self):
self.owner1 = CIOwner(
first_name="first_name_owner1",
last_name="last_name_owner1",
email="[email protected]",
)
self.owner1.save()
self.owner2 = CIOwner(
first_name="first_name_owner2",
last_name="last_name_owner2",
email="[email protected]",
)
self.owner2.save()
def create_cis(self):
self.ci1 = CI(uid="uid-ci1", type=self.types[0], barcode="barcodeci1", name="ciname1")
self.ci1.save()
self.ci1.layers = [self.layers[0].id, self.layers[1].id]
self.ci1.save()
self.ci2 = CI(uid="uid-ci2", type=self.types[1], barcode="barcodeci2", name="ciname2")
self.ci2.save()
self.ci2.layers = [self.layers[0].id]
self.ci2.save()
self.ci3 = CI(uid="other-ci3", type=self.types[1], barcode="otherbarcodeci3", name="otherci")
self.ci3.save()
self.ci3.layers = [self.layers[1].id]
self.ci3.save()
def create_ownerships(self):
self.ciownership1 = CIOwnership(ci=self.ci1, owner=self.owner1, type=CIOwnershipType.technical)
self.ciownership1.save()
self.ciownership2 = CIOwnership(ci=self.ci1, owner=self.owner2, type=CIOwnershipType.business)
self.ciownership2.save()
self.ciownership3 = CIOwnership(ci=self.ci2, owner=self.owner2, type=CIOwnershipType.business)
self.ciownership3.save()
def create_relations(self):
self.relation1 = CIRelation(parent=self.ci1, child=self.ci2, type=CI_RELATION_TYPES.CONTAINS)
self.relation1.save()
self.relation2 = CIRelation(parent=self.ci2, child=self.ci3, type=CI_RELATION_TYPES.HASROLE)
self.relation2.save()
def create_attributes(self):
self.attribute1 = CIAttribute(name="Attribute 1", attribute_type=CI_ATTRIBUTE_TYPES.INTEGER, choices="")
self.attribute1.save()
self.attribute1.ci_types.add(self.types[0]),
self.attribute_value1 = CIAttributeValue(ci=self.ci1, attribute=self.attribute1)
self.attribute_value1.value = 10
self.attribute_value1.save()
def test_layers(self):
path = "/api/v0.9/cilayers/"
response = self.client.get(path=path, **self.headers)
json_string = response.content
json_data = json.loads(json_string)
resource_uris = [ci_layer["resource_uri"] for ci_layer in json_data["objects"]]
response = self.client.get(path=resource_uris[0], **self.headers)
json_string = response.content
json_data = json.loads(json_string)
self.assertEqual(json_data["name"], self.layers[0].name)
response = self.client.get(resource_uris[1], **self.headers)
json_string = response.content
json_data = json.loads(json_string)
self.assertEqual(json_data["name"], self.layers[1].name)
def test_types(self):
path = "/api/v0.9/citypes/"
response = self.client.get(path=path, **self.headers)
json_string = response.content
json_data = json.loads(json_string)
resource_uris = [ci_type["resource_uri"] for ci_type in json_data["objects"]]
response = self.client.get(path=resource_uris[0], **self.headers)
json_string = response.content
json_data = json.loads(json_string)
self.assertEqual(json_data["name"], self.types[0].name)
response = self.client.get(resource_uris[1], **self.headers)
json_string = response.content
json_data = json.loads(json_string)
self.assertEqual(json_data["name"], self.types[1].name)
#.........这里部分代码省略.........
开发者ID:ReJeCtAll,项目名称:ralph,代码行数:101,代码来源:tests_api.py
示例20: ralph_obj_all_ownerships
def ralph_obj_all_ownerships(obj):
ci = CI.get_by_content_object(obj)
if not ci:
return []
return CIOwnership.objects.filter(ci=ci)
开发者ID:4i60r,项目名称:ralph,代码行数:5,代码来源:extra.py
注:本文中的ralph.cmdb.models_ci.CI类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论