Beispiel #1
0
def create_geo_alt_names(geo_type):
    geo_alt_names = {}
    for locale in settings.locales:
        name_format = geo_type.__name__ + '{}' + locale.capitalize()
        name = name_format.format('AltName')
        geo_alt_names[locale] = create_model(
            name = name,
            fields = {
                'geo': models.ForeignKey(geo_type,                              # Related geo type
                    related_name = 'alt_names_' + locale),
                'name': models.CharField(max_length=200, db_index=True),        # Alternate name
                'is_preferred': models.BooleanField(),                          # True if this alternate name is an official / preferred name
                'is_short': models.BooleanField(),                              # True if this is a short name like 'California' for 'State of California'
                'objects': GeoAltNameManager(),
                '__unicode__': lambda self: force_unicode(self.name),
            },
            app_label = 'cities',
            module = 'cities.models',
            options = {
                'db_table': 'cities_' + un_camel(name),
                'verbose_name': un_camel(name).replace('_', ' '),
                'verbose_name_plural': un_camel(name_format.format('AltNames')).replace('_', ' '),
            },
        )
    return geo_alt_names
Beispiel #2
0
def create_geo_alt_names(geo_type):
    geo_alt_names = {}
    for locale in settings.locales:
        name_format = geo_type.__name__ + '{}' + locale.capitalize()
        name = name_format.format('AltName')
        geo_alt_names[locale] = create_model(
            name = name,
            fields = {
                'geo': models.ForeignKey(geo_type,                              # Related geo type
                    related_name = 'alt_names_' + locale),
                'name': models.CharField(max_length=200, db_index=True),        # Alternate name
                'is_preferred': models.BooleanField(),                          # True if this alternate name is an official / preferred name
                'is_short': models.BooleanField(),                              # True if this is a short name like 'California' for 'State of California'
                'objects': GeoAltNameManager(),
                '__unicode__': lambda self: force_unicode(self.name),
            },
            app_label = 'cities',
            module = 'cities.models',
            options = {
                'db_table': 'cities_' + un_camel(name),
                'verbose_name': un_camel(name).replace('_', ' '),
                'verbose_name_plural': un_camel(name_format.format('AltNames')).replace('_', ' '),
            },
        )
    return geo_alt_names
def create_geo_alt_names(geo_type):
    geo_alt_names = {}
    for locale in settings.locales:
        name_format = geo_type.__name__ + "{}" + locale.capitalize()
        name = name_format.format("AltName")
        geo_alt_names[locale] = create_model(
            name=name,
            fields={
                "geo": models.ForeignKey(geo_type, related_name="alt_names_" + locale),  # Related geo type
                "name": models.CharField(max_length=200, db_index=True),  # Alternate name
                "is_preferred": models.BooleanField(),  # True if this alternate name is an official / preferred name
                "is_short": models.BooleanField(),  # True if this is a short name like 'California' for 'State of California'
                "objects": GeoAltNameManager(),
                "__unicode__": lambda self: force_unicode(self.name),
            },
            app_label="cities",
            module="cities.models",
            options={
                "db_table": "cities_" + un_camel(name),
                "verbose_name": un_camel(name).replace("_", " "),
                "verbose_name_plural": un_camel(name_format.format("AltNames")).replace("_", " "),
            },
        )
    return geo_alt_names
Beispiel #4
0
def create_postal_codes():
    
    @property
    def parent(self):
        """Returns region if available, otherwise country"""
        return self.region if self.region else self.country
        
    @property
    def hierarchy(self):
        """Get hierarchy, root first"""
        list = self.parent.hierarchy
        list.append(self)
        return list
    
    @property
    def names(self):
        """Get a hierarchy of non-null names, root first"""
        return [e for e in [
            force_unicode(self.country),
            force_unicode(self.region_0_name),
            force_unicode(self.region_1_name),
            force_unicode(self.region_2_name),
            force_unicode(self.name),
        ] if e]
        
    @property
    def name_full(self):
        """Get full name including hierarchy"""
        return u', '.join(reversed(self.names))
        
    postal_codes = {}
    for country in settings.postal_codes:
        name_format = "{}" + country
        name = name_format.format('PostalCode')
        postal_codes[country] = create_model(
            name = name,
            fields = {
                'country': models.ForeignKey(Country,
                    related_name = 'postal_codes_' + country),
                'code': models.CharField(max_length=20, db_index=True),
                'name': models.CharField(max_length=200, db_index=True),
                'region_0_name': models.CharField(max_length=100, db_index=True, verbose_name="region 0 name (state)"),
                'region_1_name': models.CharField(max_length=100, db_index=True, verbose_name="region 1 name (county)"),
                'region_2_name': models.CharField(max_length=100, db_index=True, verbose_name="region 2 name (community)"),
                'region': models.ForeignKey(Region, null=True, blank=True,
                    related_name = 'postal_codes_' + country),
                'location': models.PointField(),
                'objects': models.GeoManager(),
                'parent': parent,
                'hierarchy': hierarchy,
                'names': names,
                'name_full': name_full,
                '__unicode__': lambda self: force_unicode(self.code),
            },
            app_label = 'cities',
            module = 'cities.models',
            options = {
                'db_table': 'cities_' + un_camel(name),
                'verbose_name': un_camel(name).replace('_', ' '),
                'verbose_name_plural': un_camel(name_format.format('PostalCodes')).replace('_', ' '),
            },
        )
    return postal_codes
Beispiel #5
0
def create_postal_codes():
    
    @property
    def parent(self):
        for parent_name in reversed(['country'] + RegionBase.levels):
            parent_obj = getattr(self, parent_name)
            if parent_obj: return parent_obj
        return None
        
    @property
    def hierarchy(self):
        """Get hierarchy, root first"""
        list = self.parent.hierarchy
        list.append(self)
        return list
    
    @property
    def names(self):
        """Get a hierarchy of non-null names, root first"""
        return [e for e in [
            force_unicode(self.country),
            force_unicode(self.region_name),
            force_unicode(self.subregion_name),
            force_unicode(self.district_name),
            force_unicode(self.name),
        ] if e]
        
    @property
    def name_full(self):
        """Get full name including hierarchy"""
        return u', '.join(reversed(self.names))
        
    postal_codes = {}
    for country in settings.postal_codes:
        name_format = "{}" + country
        name = name_format.format('PostalCode')
        postal_codes[country] = create_model(
            name = name,
            fields = {
                'country': models.ForeignKey(Country,
                    related_name = 'postal_codes_' + country),
                'code': models.CharField(max_length=20, primary_key=True),
                'name': models.CharField(max_length=200, db_index=True),
                # Region names for each admin level, region may not exist in DB
                'region_name': models.CharField(max_length=100, db_index=True),
                'subregion_name': models.CharField(max_length=100, db_index=True),
                'district_name': models.CharField(max_length=100, db_index=True),
                'region': models.ForeignKey(Region, null=True, blank=True, related_name = 'postal_codes_' + country),
                'subregion': models.ForeignKey(Subregion, null=True, blank=True, related_name = 'postal_codes_' + country),
                'location': models.PointField(),
                'objects': models.GeoManager(),
                'parent': parent,
                'hierarchy': hierarchy,
                'names': names,
                'name_full': name_full,
                '__unicode__': lambda self: force_unicode(self.code),
            },
            app_label = 'cities',
            module = 'cities.models',
            options = {
                'db_table': 'cities_' + un_camel(name),
                'verbose_name': un_camel(name).replace('_', ' '),
                'verbose_name_plural': un_camel(name_format.format('PostalCodes')).replace('_', ' '),
            },
        )
    return postal_codes
Beispiel #6
0
def create_postal_codes():
    @property
    def parent(self):
        """Returns region if available, otherwise country"""
        return self.region if self.region else self.country

    @property
    def hierarchy(self):
        """Get hierarchy, root first"""
        list = self.parent.hierarchy
        list.append(self)
        return list

    @property
    def names(self):
        """Get a hierarchy of non-null names, root first"""
        return [
            e for e in [
                force_unicode(self.country),
                force_unicode(self.region_0_name),
                force_unicode(self.region_1_name),
                force_unicode(self.region_2_name),
                force_unicode(self.name),
            ] if e
        ]

    @property
    def name_full(self):
        """Get full name including hierarchy"""
        return u', '.join(reversed(self.names))

    postal_codes = {}
    for country in settings.postal_codes:
        name_format = "{}" + country
        name = name_format.format('PostalCode')
        postal_codes[country] = create_model(
            name=name,
            fields={
                'country':
                models.ForeignKey(Country,
                                  related_name='postal_codes_' + country),
                'code':
                models.CharField(max_length=20, db_index=True),
                'name':
                models.CharField(max_length=200, db_index=True),
                'region_0_name':
                models.CharField(max_length=100,
                                 db_index=True,
                                 verbose_name="region 0 name (state)"),
                'region_1_name':
                models.CharField(max_length=100,
                                 db_index=True,
                                 verbose_name="region 1 name (county)"),
                'region_2_name':
                models.CharField(max_length=100,
                                 db_index=True,
                                 verbose_name="region 2 name (community)"),
                'region':
                models.ForeignKey(Region,
                                  null=True,
                                  blank=True,
                                  related_name='postal_codes_' + country),
                'location':
                models.PointField(),
                'objects':
                models.GeoManager(),
                'parent':
                parent,
                'hierarchy':
                hierarchy,
                'names':
                names,
                'name_full':
                name_full,
                '__unicode__':
                lambda self: force_unicode(self.code),
            },
            app_label='cities',
            module='cities.models',
            options={
                'db_table':
                'cities_' + un_camel(name),
                'verbose_name':
                un_camel(name).replace('_', ' '),
                'verbose_name_plural':
                un_camel(name_format.format('PostalCodes')).replace('_', ' '),
            },
        )
    return postal_codes