Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
cdcdd131
Kaydet (Commit)
cdcdd131
authored
Tem 15, 2012
tarafından
Claude Paroz
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Dropped support for GDAL < 1.5
GDAL 1.5 has been released in December 2007.
üst
34340517
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
29 additions
and
52 deletions
+29
-52
__init__.py
django/contrib/gis/gdal/__init__.py
+2
-2
geometries.py
django/contrib/gis/gdal/geometries.py
+5
-15
libgdal.py
django/contrib/gis/gdal/libgdal.py
+1
-8
geom.py
django/contrib/gis/gdal/prototypes/geom.py
+5
-10
test_geom.py
django/contrib/gis/gdal/tests/test_geom.py
+0
-5
base.py
django/contrib/gis/geos/base.py
+0
-1
geometry.py
django/contrib/gis/geos/geometry.py
+4
-5
test_geos.py
django/contrib/gis/geos/tests/test_geos.py
+1
-1
test_geoforms.py
django/contrib/gis/tests/test_geoforms.py
+1
-0
gdal.txt
docs/ref/contrib/gis/gdal.txt
+1
-1
install.txt
docs/ref/contrib/gis/install.txt
+4
-4
1.5.txt
docs/releases/1.5.txt
+5
-0
No files found.
django/contrib/gis/gdal/__init__.py
Dosyayı görüntüle @
cdcdd131
...
@@ -37,12 +37,12 @@
...
@@ -37,12 +37,12 @@
try
:
try
:
from
django.contrib.gis.gdal.driver
import
Driver
from
django.contrib.gis.gdal.driver
import
Driver
from
django.contrib.gis.gdal.datasource
import
DataSource
from
django.contrib.gis.gdal.datasource
import
DataSource
from
django.contrib.gis.gdal.libgdal
import
gdal_version
,
gdal_full_version
,
gdal_release_date
,
G
EOJSON
,
G
DAL_VERSION
from
django.contrib.gis.gdal.libgdal
import
gdal_version
,
gdal_full_version
,
gdal_release_date
,
GDAL_VERSION
from
django.contrib.gis.gdal.srs
import
SpatialReference
,
CoordTransform
from
django.contrib.gis.gdal.srs
import
SpatialReference
,
CoordTransform
from
django.contrib.gis.gdal.geometries
import
OGRGeometry
from
django.contrib.gis.gdal.geometries
import
OGRGeometry
HAS_GDAL
=
True
HAS_GDAL
=
True
except
:
except
:
HAS_GDAL
,
GEOJSON
=
False
,
False
HAS_GDAL
=
False
try
:
try
:
from
django.contrib.gis.gdal.envelope
import
Envelope
from
django.contrib.gis.gdal.envelope
import
Envelope
...
...
django/contrib/gis/gdal/geometries.py
Dosyayı görüntüle @
cdcdd131
...
@@ -48,7 +48,7 @@ from django.contrib.gis.gdal.base import GDALBase
...
@@ -48,7 +48,7 @@ from django.contrib.gis.gdal.base import GDALBase
from
django.contrib.gis.gdal.envelope
import
Envelope
,
OGREnvelope
from
django.contrib.gis.gdal.envelope
import
Envelope
,
OGREnvelope
from
django.contrib.gis.gdal.error
import
OGRException
,
OGRIndexError
,
SRSException
from
django.contrib.gis.gdal.error
import
OGRException
,
OGRIndexError
,
SRSException
from
django.contrib.gis.gdal.geomtype
import
OGRGeomType
from
django.contrib.gis.gdal.geomtype
import
OGRGeomType
from
django.contrib.gis.gdal.libgdal
import
G
EOJSON
,
G
DAL_VERSION
from
django.contrib.gis.gdal.libgdal
import
GDAL_VERSION
from
django.contrib.gis.gdal.srs
import
SpatialReference
,
CoordTransform
from
django.contrib.gis.gdal.srs
import
SpatialReference
,
CoordTransform
# Getting the ctypes prototype functions that interface w/the GDAL C library.
# Getting the ctypes prototype functions that interface w/the GDAL C library.
...
@@ -97,10 +97,7 @@ class OGRGeometry(GDALBase):
...
@@ -97,10 +97,7 @@ class OGRGeometry(GDALBase):
else
:
else
:
g
=
capi
.
from_wkt
(
byref
(
c_char_p
(
wkt_m
.
group
(
'wkt'
))),
None
,
byref
(
c_void_p
()))
g
=
capi
.
from_wkt
(
byref
(
c_char_p
(
wkt_m
.
group
(
'wkt'
))),
None
,
byref
(
c_void_p
()))
elif
json_m
:
elif
json_m
:
if
GEOJSON
:
g
=
capi
.
from_json
(
geom_input
)
g
=
capi
.
from_json
(
geom_input
)
else
:
raise
NotImplementedError
(
'GeoJSON input only supported on GDAL 1.5+.'
)
else
:
else
:
# Seeing if the input is a valid short-hand string
# Seeing if the input is a valid short-hand string
# (e.g., 'Point', 'POLYGON').
# (e.g., 'Point', 'POLYGON').
...
@@ -328,22 +325,15 @@ class OGRGeometry(GDALBase):
...
@@ -328,22 +325,15 @@ class OGRGeometry(GDALBase):
@property
@property
def
json
(
self
):
def
json
(
self
):
"""
"""
Returns the GeoJSON representation of this Geometry (requires
Returns the GeoJSON representation of this Geometry.
GDAL 1.5+).
"""
"""
if
GEOJSON
:
return
capi
.
to_json
(
self
.
ptr
)
return
capi
.
to_json
(
self
.
ptr
)
else
:
raise
NotImplementedError
(
'GeoJSON output only supported on GDAL 1.5+.'
)
geojson
=
json
geojson
=
json
@property
@property
def
kml
(
self
):
def
kml
(
self
):
"Returns the KML representation of the Geometry."
"Returns the KML representation of the Geometry."
if
GEOJSON
:
return
capi
.
to_kml
(
self
.
ptr
,
None
)
return
capi
.
to_kml
(
self
.
ptr
,
None
)
else
:
raise
NotImplementedError
(
'KML output only supported on GDAL 1.5+.'
)
@property
@property
def
wkb_size
(
self
):
def
wkb_size
(
self
):
...
...
django/contrib/gis/gdal/libgdal.py
Dosyayı görüntüle @
cdcdd131
...
@@ -19,7 +19,7 @@ elif os.name == 'nt':
...
@@ -19,7 +19,7 @@ elif os.name == 'nt':
elif
os
.
name
==
'posix'
:
elif
os
.
name
==
'posix'
:
# *NIX library names.
# *NIX library names.
lib_names
=
[
'gdal'
,
'GDAL'
,
'gdal1.9.0'
,
'gdal1.8.0'
,
'gdal1.7.0'
,
lib_names
=
[
'gdal'
,
'GDAL'
,
'gdal1.9.0'
,
'gdal1.8.0'
,
'gdal1.7.0'
,
'gdal1.6.0'
,
'gdal1.5.0'
,
'gdal1.4.0'
]
'gdal1.6.0'
,
'gdal1.5.0'
]
else
:
else
:
raise
OGRException
(
'Unsupported OS "
%
s"'
%
os
.
name
)
raise
OGRException
(
'Unsupported OS "
%
s"'
%
os
.
name
)
...
@@ -97,10 +97,3 @@ GDAL_MINOR_VERSION = int(_verinfo['minor'])
...
@@ -97,10 +97,3 @@ GDAL_MINOR_VERSION = int(_verinfo['minor'])
GDAL_SUBMINOR_VERSION
=
_verinfo
[
'subminor'
]
and
int
(
_verinfo
[
'subminor'
])
GDAL_SUBMINOR_VERSION
=
_verinfo
[
'subminor'
]
and
int
(
_verinfo
[
'subminor'
])
GDAL_VERSION
=
(
GDAL_MAJOR_VERSION
,
GDAL_MINOR_VERSION
,
GDAL_SUBMINOR_VERSION
)
GDAL_VERSION
=
(
GDAL_MAJOR_VERSION
,
GDAL_MINOR_VERSION
,
GDAL_SUBMINOR_VERSION
)
del
_verinfo
del
_verinfo
# GeoJSON support is available only in GDAL 1.5+.
if
GDAL_VERSION
>=
(
1
,
5
):
GEOJSON
=
True
else
:
GEOJSON
=
False
django/contrib/gis/gdal/prototypes/geom.py
Dosyayı görüntüle @
cdcdd131
from
ctypes
import
c_char_p
,
c_double
,
c_int
,
c_void_p
,
POINTER
from
ctypes
import
c_char_p
,
c_double
,
c_int
,
c_void_p
,
POINTER
from
django.contrib.gis.gdal.envelope
import
OGREnvelope
from
django.contrib.gis.gdal.envelope
import
OGREnvelope
from
django.contrib.gis.gdal.libgdal
import
lgdal
,
GEOJSON
from
django.contrib.gis.gdal.libgdal
import
lgdal
from
django.contrib.gis.gdal.prototypes.errcheck
import
check_bool
,
check_envelope
from
django.contrib.gis.gdal.prototypes.errcheck
import
check_bool
,
check_envelope
from
django.contrib.gis.gdal.prototypes.generation
import
(
const_string_output
,
from
django.contrib.gis.gdal.prototypes.generation
import
(
const_string_output
,
double_output
,
geom_output
,
int_output
,
srs_output
,
string_output
,
void_output
)
double_output
,
geom_output
,
int_output
,
srs_output
,
string_output
,
void_output
)
...
@@ -25,15 +25,10 @@ def topology_func(f):
...
@@ -25,15 +25,10 @@ def topology_func(f):
### OGR_G ctypes function prototypes ###
### OGR_G ctypes function prototypes ###
# GeoJSON routines, if supported.
# GeoJSON routines.
if
GEOJSON
:
from_json
=
geom_output
(
lgdal
.
OGR_G_CreateGeometryFromJson
,
[
c_char_p
])
from_json
=
geom_output
(
lgdal
.
OGR_G_CreateGeometryFromJson
,
[
c_char_p
])
to_json
=
string_output
(
lgdal
.
OGR_G_ExportToJson
,
[
c_void_p
],
str_result
=
True
)
to_json
=
string_output
(
lgdal
.
OGR_G_ExportToJson
,
[
c_void_p
],
str_result
=
True
)
to_kml
=
string_output
(
lgdal
.
OGR_G_ExportToKML
,
[
c_void_p
,
c_char_p
],
str_result
=
True
)
to_kml
=
string_output
(
lgdal
.
OGR_G_ExportToKML
,
[
c_void_p
,
c_char_p
],
str_result
=
True
)
else
:
from_json
=
False
to_json
=
False
to_kml
=
False
# GetX, GetY, GetZ all return doubles.
# GetX, GetY, GetZ all return doubles.
getx
=
pnt_func
(
lgdal
.
OGR_G_GetX
)
getx
=
pnt_func
(
lgdal
.
OGR_G_GetX
)
...
...
django/contrib/gis/gdal/tests/test_geom.py
Dosyayı görüntüle @
cdcdd131
...
@@ -6,7 +6,6 @@ except ImportError:
...
@@ -6,7 +6,6 @@ except ImportError:
from
django.contrib.gis.gdal
import
(
OGRGeometry
,
OGRGeomType
,
OGRException
,
from
django.contrib.gis.gdal
import
(
OGRGeometry
,
OGRGeomType
,
OGRException
,
OGRIndexError
,
SpatialReference
,
CoordTransform
,
GDAL_VERSION
)
OGRIndexError
,
SpatialReference
,
CoordTransform
,
GDAL_VERSION
)
from
django.contrib.gis.gdal.prototypes.geom
import
GEOJSON
from
django.contrib.gis.geometry.test_data
import
TestDataMixin
from
django.contrib.gis.geometry.test_data
import
TestDataMixin
from
django.utils
import
unittest
from
django.utils
import
unittest
...
@@ -108,7 +107,6 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
...
@@ -108,7 +107,6 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
def
test01e_json
(
self
):
def
test01e_json
(
self
):
"Testing GeoJSON input/output."
"Testing GeoJSON input/output."
if
not
GEOJSON
:
return
for
g
in
self
.
geometries
.
json_geoms
:
for
g
in
self
.
geometries
.
json_geoms
:
geom
=
OGRGeometry
(
g
.
wkt
)
geom
=
OGRGeometry
(
g
.
wkt
)
if
not
hasattr
(
g
,
'not_equal'
):
if
not
hasattr
(
g
,
'not_equal'
):
...
@@ -244,9 +242,6 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
...
@@ -244,9 +242,6 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
self
.
fail
(
'Should have raised an OGRException!'
)
self
.
fail
(
'Should have raised an OGRException!'
)
print
(
"
\n
END - expecting IllegalArgumentException; safe to ignore.
\n
"
)
print
(
"
\n
END - expecting IllegalArgumentException; safe to ignore.
\n
"
)
# Closing the rings -- doesn't work on GDAL versions 1.4.1 and below:
# http://trac.osgeo.org/gdal/ticket/1673
if
GDAL_VERSION
<=
(
1
,
4
,
1
):
return
poly
.
close_rings
()
poly
.
close_rings
()
self
.
assertEqual
(
10
,
poly
.
point_count
)
# Two closing points should've been added
self
.
assertEqual
(
10
,
poly
.
point_count
)
# Two closing points should've been added
self
.
assertEqual
(
OGRGeometry
(
'POINT(2.5 2.5)'
),
poly
.
centroid
)
self
.
assertEqual
(
OGRGeometry
(
'POINT(2.5 2.5)'
),
poly
.
centroid
)
...
...
django/contrib/gis/geos/base.py
Dosyayı görüntüle @
cdcdd131
...
@@ -10,7 +10,6 @@ except ImportError:
...
@@ -10,7 +10,6 @@ except ImportError:
# A 'dummy' gdal module.
# A 'dummy' gdal module.
class
GDALInfo
(
object
):
class
GDALInfo
(
object
):
HAS_GDAL
=
False
HAS_GDAL
=
False
GEOJSON
=
False
gdal
=
GDALInfo
()
gdal
=
GDALInfo
()
# NumPy supported?
# NumPy supported?
...
...
django/contrib/gis/geos/geometry.py
Dosyayı görüntüle @
cdcdd131
...
@@ -65,7 +65,7 @@ class GEOSGeometry(GEOSBase, ListMixin):
...
@@ -65,7 +65,7 @@ class GEOSGeometry(GEOSBase, ListMixin):
elif
hex_regex
.
match
(
geo_input
):
elif
hex_regex
.
match
(
geo_input
):
# Handling HEXEWKB input.
# Handling HEXEWKB input.
g
=
wkb_r
()
.
read
(
geo_input
)
g
=
wkb_r
()
.
read
(
geo_input
)
elif
gdal
.
GEOJSON
and
json_regex
.
match
(
geo_input
):
elif
gdal
.
HAS_GDAL
and
json_regex
.
match
(
geo_input
):
# Handling GeoJSON input.
# Handling GeoJSON input.
g
=
wkb_r
()
.
read
(
gdal
.
OGRGeometry
(
geo_input
)
.
wkb
)
g
=
wkb_r
()
.
read
(
gdal
.
OGRGeometry
(
geo_input
)
.
wkb
)
else
:
else
:
...
@@ -409,13 +409,12 @@ class GEOSGeometry(GEOSBase, ListMixin):
...
@@ -409,13 +409,12 @@ class GEOSGeometry(GEOSBase, ListMixin):
@property
@property
def
json
(
self
):
def
json
(
self
):
"""
"""
Returns GeoJSON representation of this Geometry if GDAL 1.5+
Returns GeoJSON representation of this Geometry if GDAL is installed.
is installed.
"""
"""
if
gdal
.
GEOJSON
:
if
gdal
.
HAS_GDAL
:
return
self
.
ogr
.
json
return
self
.
ogr
.
json
else
:
else
:
raise
GEOSException
(
'GeoJSON output only supported
on GDAL 1.5+
.'
)
raise
GEOSException
(
'GeoJSON output only supported
when GDAL is installed
.'
)
geojson
=
json
geojson
=
json
@property
@property
...
...
django/contrib/gis/geos/tests/test_geos.py
Dosyayı görüntüle @
cdcdd131
...
@@ -196,7 +196,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
...
@@ -196,7 +196,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
self
.
assertEqual
(
srid
,
poly
.
shell
.
srid
)
self
.
assertEqual
(
srid
,
poly
.
shell
.
srid
)
self
.
assertEqual
(
srid
,
fromstr
(
poly
.
ewkt
)
.
srid
)
# Checking export
self
.
assertEqual
(
srid
,
fromstr
(
poly
.
ewkt
)
.
srid
)
# Checking export
@unittest.skipUnless
(
gdal
.
HAS_GDAL
and
gdal
.
GEOJSON
,
"gdal >= 1.5
is required"
)
@unittest.skipUnless
(
gdal
.
HAS_GDAL
,
"gdal
is required"
)
def
test_json
(
self
):
def
test_json
(
self
):
"Testing GeoJSON input/output (via GDAL)."
"Testing GeoJSON input/output (via GDAL)."
for
g
in
self
.
geometries
.
json_geoms
:
for
g
in
self
.
geometries
.
json_geoms
:
...
...
django/contrib/gis/tests/test_geoforms.py
Dosyayı görüntüle @
cdcdd131
...
@@ -71,6 +71,7 @@ class GeometryFieldTest(unittest.TestCase):
...
@@ -71,6 +71,7 @@ class GeometryFieldTest(unittest.TestCase):
for
wkt
in
(
'POINT(5 23)'
,
'MULTIPOLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)))'
,
'LINESTRING(0 0, 1 1)'
):
for
wkt
in
(
'POINT(5 23)'
,
'MULTIPOLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)))'
,
'LINESTRING(0 0, 1 1)'
):
self
.
assertEqual
(
GEOSGeometry
(
wkt
),
fld
.
to_python
(
wkt
))
self
.
assertEqual
(
GEOSGeometry
(
wkt
),
fld
.
to_python
(
wkt
))
# but raises a ValidationError for any other string
# but raises a ValidationError for any other string
import
pdb
;
pdb
.
set_trace
()
for
wkt
in
(
'POINT(5)'
,
'MULTI POLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)))'
,
'BLAH(0 0, 1 1)'
):
for
wkt
in
(
'POINT(5)'
,
'MULTI POLYGON(((0 0, 0 1, 1 1, 1 0, 0 0)))'
,
'BLAH(0 0, 1 1)'
):
self
.
assertRaises
(
forms
.
ValidationError
,
fld
.
to_python
,
wkt
)
self
.
assertRaises
(
forms
.
ValidationError
,
fld
.
to_python
,
wkt
)
...
...
docs/ref/contrib/gis/gdal.txt
Dosyayı görüntüle @
cdcdd131
...
@@ -447,7 +447,7 @@ systems and coordinate transformation::
...
@@ -447,7 +447,7 @@ systems and coordinate transformation::
This object is a wrapper for the `OGR Geometry`__ class.
This object is a wrapper for the `OGR Geometry`__ class.
These objects are instantiated directly from the given ``geom_input``
These objects are instantiated directly from the given ``geom_input``
parameter, which may be a string containing WKT
or HEX
, a ``buffer``
parameter, which may be a string containing WKT
, HEX, GeoJSON
, a ``buffer``
containing WKB data, or an :class:`OGRGeomType` object. These objects
containing WKB data, or an :class:`OGRGeomType` object. These objects
are also returned from the :class:`Feature.geom` attribute, when
are also returned from the :class:`Feature.geom` attribute, when
reading vector data from :class:`Layer` (which is in turn a part of
reading vector data from :class:`Layer` (which is in turn a part of
...
...
docs/ref/contrib/gis/install.txt
Dosyayı görüntüle @
cdcdd131
...
@@ -81,7 +81,7 @@ Program Description Required
...
@@ -81,7 +81,7 @@ Program Description Required
======================== ==================================== ================================ ==========================
======================== ==================================== ================================ ==========================
:ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.3, 3.2, 3.1, 3.0
:ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.3, 3.2, 3.1, 3.0
`PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.7, 4.6, 4.5, 4.4
`PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.7, 4.6, 4.5, 4.4
:ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library No (but, required for SQLite) 1.
8, 1.7, 1.6, 1.5, 1.4
:ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library No (but, required for SQLite) 1.
9, 1.8, 1.7, 1.6, 1.5
:ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
:ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 1.5, 1.4, 1.3
`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 1.5, 1.4, 1.3
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 3.0, 2.4, 2.3
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 3.0, 2.4, 2.3
...
@@ -270,9 +270,9 @@ supports :ref:`GDAL's vector data <ref-gdal>` capabilities [#]_.
...
@@ -270,9 +270,9 @@ supports :ref:`GDAL's vector data <ref-gdal>` capabilities [#]_.
First download the latest GDAL release version and untar the archive::
First download the latest GDAL release version and untar the archive::
$ wget http://download.osgeo.org/gdal/gdal-1.
8
.1.tar.gz
$ wget http://download.osgeo.org/gdal/gdal-1.
9
.1.tar.gz
$ tar xzf gdal-1.
8
.1.tar.gz
$ tar xzf gdal-1.
9
.1.tar.gz
$ cd gdal-1.
8
.1
$ cd gdal-1.
9
.1
Configure, make and install::
Configure, make and install::
...
...
docs/releases/1.5.txt
Dosyayı görüntüle @
cdcdd131
...
@@ -177,6 +177,11 @@ autocommit behavior was never restored. This bug is now fixed in 1.5. While
...
@@ -177,6 +177,11 @@ autocommit behavior was never restored. This bug is now fixed in 1.5. While
this is only a bug fix, it is worth checking your applications behavior if
this is only a bug fix, it is worth checking your applications behavior if
you are using PostgreSQL together with the autocommit option.
you are using PostgreSQL together with the autocommit option.
Miscellaneous
~~~~~~~~~~~~~
* GeoDjango dropped support for GDAL < 1.5
Features deprecated in 1.5
Features deprecated in 1.5
==========================
==========================
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment